slackhive 0.1.41 → 0.1.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (534) hide show
  1. package/cli/dist/index.js +15786 -52
  2. package/package.json +9 -3
  3. package/.dockerignore +0 -14
  4. package/.env.example +0 -44
  5. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -65
  6. package/.github/ISSUE_TEMPLATE/config.yml +0 -5
  7. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -38
  8. package/.github/PULL_REQUEST_TEMPLATE.md +0 -27
  9. package/.github/dependabot.yml +0 -20
  10. package/.github/workflows/audit.yml +0 -149
  11. package/.github/workflows/ci.yml +0 -135
  12. package/CHANGELOG.md +0 -52
  13. package/CODE_OF_CONDUCT.md +0 -37
  14. package/CONTRIBUTING.md +0 -204
  15. package/SECURITY.md +0 -47
  16. package/apps/runner/Dockerfile +0 -33
  17. package/apps/runner/dist/__tests__/channel-restrictions.test.d.ts +0 -8
  18. package/apps/runner/dist/__tests__/channel-restrictions.test.js +0 -63
  19. package/apps/runner/dist/__tests__/channel-restrictions.test.js.map +0 -1
  20. package/apps/runner/dist/__tests__/claude-handler-resolve.test.d.ts +0 -20
  21. package/apps/runner/dist/__tests__/claude-handler-resolve.test.js +0 -178
  22. package/apps/runner/dist/__tests__/claude-handler-resolve.test.js.map +0 -1
  23. package/apps/runner/dist/__tests__/compile-claude-md.test.d.ts +0 -13
  24. package/apps/runner/dist/__tests__/compile-claude-md.test.js +0 -144
  25. package/apps/runner/dist/__tests__/compile-claude-md.test.js.map +0 -1
  26. package/apps/runner/dist/__tests__/memory-sync.test.d.ts +0 -11
  27. package/apps/runner/dist/__tests__/memory-sync.test.js +0 -56
  28. package/apps/runner/dist/__tests__/memory-sync.test.js.map +0 -1
  29. package/apps/runner/dist/__tests__/slack-file-support.test.d.ts +0 -9
  30. package/apps/runner/dist/__tests__/slack-file-support.test.js +0 -271
  31. package/apps/runner/dist/__tests__/slack-file-support.test.js.map +0 -1
  32. package/apps/runner/dist/__tests__/slack-formatting.test.d.ts +0 -12
  33. package/apps/runner/dist/__tests__/slack-formatting.test.js +0 -400
  34. package/apps/runner/dist/__tests__/slack-formatting.test.js.map +0 -1
  35. package/apps/runner/dist/__tests__/thread-context.test.d.ts +0 -12
  36. package/apps/runner/dist/__tests__/thread-context.test.js +0 -182
  37. package/apps/runner/dist/__tests__/thread-context.test.js.map +0 -1
  38. package/apps/runner/dist/agent-runner.d.ts +0 -118
  39. package/apps/runner/dist/agent-runner.js +0 -352
  40. package/apps/runner/dist/agent-runner.js.map +0 -1
  41. package/apps/runner/dist/claude-handler.d.ts +0 -122
  42. package/apps/runner/dist/claude-handler.js +0 -402
  43. package/apps/runner/dist/claude-handler.js.map +0 -1
  44. package/apps/runner/dist/compile-claude-md.d.ts +0 -59
  45. package/apps/runner/dist/compile-claude-md.js +0 -291
  46. package/apps/runner/dist/compile-claude-md.js.map +0 -1
  47. package/apps/runner/dist/correction-handler.d.ts +0 -46
  48. package/apps/runner/dist/correction-handler.js +0 -162
  49. package/apps/runner/dist/correction-handler.js.map +0 -1
  50. package/apps/runner/dist/correction-manager.d.ts +0 -53
  51. package/apps/runner/dist/correction-manager.js +0 -241
  52. package/apps/runner/dist/correction-manager.js.map +0 -1
  53. package/apps/runner/dist/db.d.ts +0 -193
  54. package/apps/runner/dist/db.js +0 -492
  55. package/apps/runner/dist/db.js.map +0 -1
  56. package/apps/runner/dist/index.d.ts +0 -9
  57. package/apps/runner/dist/index.js +0 -43
  58. package/apps/runner/dist/index.js.map +0 -1
  59. package/apps/runner/dist/job-scheduler.d.ts +0 -57
  60. package/apps/runner/dist/job-scheduler.js +0 -150
  61. package/apps/runner/dist/job-scheduler.js.map +0 -1
  62. package/apps/runner/dist/logger.d.ts +0 -32
  63. package/apps/runner/dist/logger.js +0 -52
  64. package/apps/runner/dist/logger.js.map +0 -1
  65. package/apps/runner/dist/mcp-process-manager.d.ts +0 -38
  66. package/apps/runner/dist/mcp-process-manager.js +0 -189
  67. package/apps/runner/dist/mcp-process-manager.js.map +0 -1
  68. package/apps/runner/dist/memory-mcp.d.ts +0 -14
  69. package/apps/runner/dist/memory-mcp.js +0 -88
  70. package/apps/runner/dist/memory-mcp.js.map +0 -1
  71. package/apps/runner/dist/memory-watcher.d.ts +0 -78
  72. package/apps/runner/dist/memory-watcher.js +0 -220
  73. package/apps/runner/dist/memory-watcher.js.map +0 -1
  74. package/apps/runner/dist/slack-handler.d.ts +0 -120
  75. package/apps/runner/dist/slack-handler.js +0 -843
  76. package/apps/runner/dist/slack-handler.js.map +0 -1
  77. package/apps/runner/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  78. package/apps/runner/package.json +0 -42
  79. package/apps/runner/src/__tests__/channel-restrictions.test.ts +0 -75
  80. package/apps/runner/src/__tests__/claude-handler-resolve.test.ts +0 -160
  81. package/apps/runner/src/__tests__/compile-claude-md.test.ts +0 -139
  82. package/apps/runner/src/__tests__/memory-sync.test.ts +0 -59
  83. package/apps/runner/src/__tests__/slack-file-support.test.ts +0 -376
  84. package/apps/runner/src/__tests__/slack-formatting.test.ts +0 -495
  85. package/apps/runner/src/__tests__/thread-context.test.ts +0 -215
  86. package/apps/runner/src/agent-runner.ts +0 -397
  87. package/apps/runner/src/claude-handler.ts +0 -475
  88. package/apps/runner/src/compile-claude-md.ts +0 -283
  89. package/apps/runner/src/correction-handler.ts +0 -191
  90. package/apps/runner/src/correction-manager.ts +0 -285
  91. package/apps/runner/src/db.ts +0 -604
  92. package/apps/runner/src/index.ts +0 -46
  93. package/apps/runner/src/job-scheduler.ts +0 -165
  94. package/apps/runner/src/logger.ts +0 -49
  95. package/apps/runner/src/mcp-process-manager.ts +0 -195
  96. package/apps/runner/src/memory-mcp.ts +0 -85
  97. package/apps/runner/src/memory-watcher.ts +0 -215
  98. package/apps/runner/src/slack-handler.ts +0 -929
  99. package/apps/runner/tsconfig.json +0 -17
  100. package/apps/runner/vitest.config.mts +0 -17
  101. package/apps/web/.eslintrc.json +0 -3
  102. package/apps/web/.next/app-build-manifest.json +0 -323
  103. package/apps/web/.next/app-path-routes-manifest.json +0 -46
  104. package/apps/web/.next/build-manifest.json +0 -33
  105. package/apps/web/.next/cache/.previewinfo +0 -1
  106. package/apps/web/.next/cache/.rscinfo +0 -1
  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 +0 -6
  124. package/apps/web/.next/diagnostics/framework.json +0 -1
  125. package/apps/web/.next/package.json +0 -1
  126. package/apps/web/.next/react-loadable-manifest.json +0 -1
  127. package/apps/web/.next/server/app/_not-found/page.js +0 -2
  128. package/apps/web/.next/server/app/_not-found/page.js.nft.json +0 -1
  129. package/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +0 -1
  130. package/apps/web/.next/server/app/agents/[slug]/page.js +0 -4
  131. package/apps/web/.next/server/app/agents/[slug]/page.js.nft.json +0 -1
  132. package/apps/web/.next/server/app/agents/[slug]/page_client-reference-manifest.js +0 -1
  133. package/apps/web/.next/server/app/agents/new/page.js +0 -2
  134. package/apps/web/.next/server/app/agents/new/page.js.nft.json +0 -1
  135. package/apps/web/.next/server/app/agents/new/page_client-reference-manifest.js +0 -1
  136. package/apps/web/.next/server/app/api/agents/[id]/access/route.js +0 -1
  137. package/apps/web/.next/server/app/api/agents/[id]/access/route.js.nft.json +0 -1
  138. package/apps/web/.next/server/app/api/agents/[id]/access/route_client-reference-manifest.js +0 -1
  139. package/apps/web/.next/server/app/api/agents/[id]/claude-md/route.js +0 -6
  140. package/apps/web/.next/server/app/api/agents/[id]/claude-md/route.js.nft.json +0 -1
  141. package/apps/web/.next/server/app/api/agents/[id]/claude-md/route_client-reference-manifest.js +0 -1
  142. package/apps/web/.next/server/app/api/agents/[id]/logs/route.js +0 -3
  143. package/apps/web/.next/server/app/api/agents/[id]/logs/route.js.nft.json +0 -1
  144. package/apps/web/.next/server/app/api/agents/[id]/logs/route_client-reference-manifest.js +0 -1
  145. package/apps/web/.next/server/app/api/agents/[id]/manifest/route.js +0 -1
  146. package/apps/web/.next/server/app/api/agents/[id]/manifest/route.js.nft.json +0 -1
  147. package/apps/web/.next/server/app/api/agents/[id]/manifest/route_client-reference-manifest.js +0 -1
  148. package/apps/web/.next/server/app/api/agents/[id]/mcps/route.js +0 -1
  149. package/apps/web/.next/server/app/api/agents/[id]/mcps/route.js.nft.json +0 -1
  150. package/apps/web/.next/server/app/api/agents/[id]/mcps/route_client-reference-manifest.js +0 -1
  151. package/apps/web/.next/server/app/api/agents/[id]/memories/[memId]/route.js +0 -1
  152. package/apps/web/.next/server/app/api/agents/[id]/memories/[memId]/route.js.nft.json +0 -1
  153. package/apps/web/.next/server/app/api/agents/[id]/memories/[memId]/route_client-reference-manifest.js +0 -1
  154. package/apps/web/.next/server/app/api/agents/[id]/memories/route.js +0 -1
  155. package/apps/web/.next/server/app/api/agents/[id]/memories/route.js.nft.json +0 -1
  156. package/apps/web/.next/server/app/api/agents/[id]/memories/route_client-reference-manifest.js +0 -1
  157. package/apps/web/.next/server/app/api/agents/[id]/permissions/route.js +0 -1
  158. package/apps/web/.next/server/app/api/agents/[id]/permissions/route.js.nft.json +0 -1
  159. package/apps/web/.next/server/app/api/agents/[id]/permissions/route_client-reference-manifest.js +0 -1
  160. package/apps/web/.next/server/app/api/agents/[id]/reload/route.js +0 -1
  161. package/apps/web/.next/server/app/api/agents/[id]/reload/route.js.nft.json +0 -1
  162. package/apps/web/.next/server/app/api/agents/[id]/reload/route_client-reference-manifest.js +0 -1
  163. package/apps/web/.next/server/app/api/agents/[id]/restrictions/route.js +0 -1
  164. package/apps/web/.next/server/app/api/agents/[id]/restrictions/route.js.nft.json +0 -1
  165. package/apps/web/.next/server/app/api/agents/[id]/restrictions/route_client-reference-manifest.js +0 -1
  166. package/apps/web/.next/server/app/api/agents/[id]/route.js +0 -33
  167. package/apps/web/.next/server/app/api/agents/[id]/route.js.nft.json +0 -1
  168. package/apps/web/.next/server/app/api/agents/[id]/route_client-reference-manifest.js +0 -1
  169. package/apps/web/.next/server/app/api/agents/[id]/skills/[skillId]/route.js +0 -1
  170. package/apps/web/.next/server/app/api/agents/[id]/skills/[skillId]/route.js.nft.json +0 -1
  171. package/apps/web/.next/server/app/api/agents/[id]/skills/[skillId]/route_client-reference-manifest.js +0 -1
  172. package/apps/web/.next/server/app/api/agents/[id]/skills/route.js +0 -1
  173. package/apps/web/.next/server/app/api/agents/[id]/skills/route.js.nft.json +0 -1
  174. package/apps/web/.next/server/app/api/agents/[id]/skills/route_client-reference-manifest.js +0 -1
  175. package/apps/web/.next/server/app/api/agents/[id]/slack-info/route.js +0 -1
  176. package/apps/web/.next/server/app/api/agents/[id]/slack-info/route.js.nft.json +0 -1
  177. package/apps/web/.next/server/app/api/agents/[id]/slack-info/route_client-reference-manifest.js +0 -1
  178. package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/restore/route.js +0 -1
  179. package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/restore/route.js.nft.json +0 -1
  180. package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/restore/route_client-reference-manifest.js +0 -1
  181. package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/route.js +0 -1
  182. package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/route.js.nft.json +0 -1
  183. package/apps/web/.next/server/app/api/agents/[id]/snapshots/[sid]/route_client-reference-manifest.js +0 -1
  184. package/apps/web/.next/server/app/api/agents/[id]/snapshots/route.js +0 -1
  185. package/apps/web/.next/server/app/api/agents/[id]/snapshots/route.js.nft.json +0 -1
  186. package/apps/web/.next/server/app/api/agents/[id]/snapshots/route_client-reference-manifest.js +0 -1
  187. package/apps/web/.next/server/app/api/agents/[id]/start/route.js +0 -1
  188. package/apps/web/.next/server/app/api/agents/[id]/start/route.js.nft.json +0 -1
  189. package/apps/web/.next/server/app/api/agents/[id]/start/route_client-reference-manifest.js +0 -1
  190. package/apps/web/.next/server/app/api/agents/[id]/stop/route.js +0 -1
  191. package/apps/web/.next/server/app/api/agents/[id]/stop/route.js.nft.json +0 -1
  192. package/apps/web/.next/server/app/api/agents/[id]/stop/route_client-reference-manifest.js +0 -1
  193. package/apps/web/.next/server/app/api/agents/route.js +0 -91
  194. package/apps/web/.next/server/app/api/agents/route.js.nft.json +0 -1
  195. package/apps/web/.next/server/app/api/agents/route_client-reference-manifest.js +0 -1
  196. package/apps/web/.next/server/app/api/auth/login/route.js +0 -1
  197. package/apps/web/.next/server/app/api/auth/login/route.js.nft.json +0 -1
  198. package/apps/web/.next/server/app/api/auth/login/route_client-reference-manifest.js +0 -1
  199. package/apps/web/.next/server/app/api/auth/logout/route.js +0 -1
  200. package/apps/web/.next/server/app/api/auth/logout/route.js.nft.json +0 -1
  201. package/apps/web/.next/server/app/api/auth/logout/route_client-reference-manifest.js +0 -1
  202. package/apps/web/.next/server/app/api/auth/me/route.js +0 -1
  203. package/apps/web/.next/server/app/api/auth/me/route.js.nft.json +0 -1
  204. package/apps/web/.next/server/app/api/auth/me/route_client-reference-manifest.js +0 -1
  205. package/apps/web/.next/server/app/api/auth/users/[id]/route.js +0 -1
  206. package/apps/web/.next/server/app/api/auth/users/[id]/route.js.nft.json +0 -1
  207. package/apps/web/.next/server/app/api/auth/users/[id]/route_client-reference-manifest.js +0 -1
  208. package/apps/web/.next/server/app/api/auth/users/route.js +0 -1
  209. package/apps/web/.next/server/app/api/auth/users/route.js.nft.json +0 -1
  210. package/apps/web/.next/server/app/api/auth/users/route_client-reference-manifest.js +0 -1
  211. package/apps/web/.next/server/app/api/env-vars/[key]/route.js +0 -1
  212. package/apps/web/.next/server/app/api/env-vars/[key]/route.js.nft.json +0 -1
  213. package/apps/web/.next/server/app/api/env-vars/[key]/route_client-reference-manifest.js +0 -1
  214. package/apps/web/.next/server/app/api/env-vars/route.js +0 -1
  215. package/apps/web/.next/server/app/api/env-vars/route.js.nft.json +0 -1
  216. package/apps/web/.next/server/app/api/env-vars/route_client-reference-manifest.js +0 -1
  217. package/apps/web/.next/server/app/api/jobs/[id]/route.js +0 -1
  218. package/apps/web/.next/server/app/api/jobs/[id]/route.js.nft.json +0 -1
  219. package/apps/web/.next/server/app/api/jobs/[id]/route_client-reference-manifest.js +0 -1
  220. package/apps/web/.next/server/app/api/jobs/[id]/runs/route.js +0 -1
  221. package/apps/web/.next/server/app/api/jobs/[id]/runs/route.js.nft.json +0 -1
  222. package/apps/web/.next/server/app/api/jobs/[id]/runs/route_client-reference-manifest.js +0 -1
  223. package/apps/web/.next/server/app/api/jobs/route.js +0 -1
  224. package/apps/web/.next/server/app/api/jobs/route.js.nft.json +0 -1
  225. package/apps/web/.next/server/app/api/jobs/route_client-reference-manifest.js +0 -1
  226. package/apps/web/.next/server/app/api/mcps/[id]/route.js +0 -1
  227. package/apps/web/.next/server/app/api/mcps/[id]/route.js.nft.json +0 -1
  228. package/apps/web/.next/server/app/api/mcps/[id]/route_client-reference-manifest.js +0 -1
  229. package/apps/web/.next/server/app/api/mcps/[id]/test/route.js +0 -1
  230. package/apps/web/.next/server/app/api/mcps/[id]/test/route.js.nft.json +0 -1
  231. package/apps/web/.next/server/app/api/mcps/[id]/test/route_client-reference-manifest.js +0 -1
  232. package/apps/web/.next/server/app/api/mcps/route.js +0 -1
  233. package/apps/web/.next/server/app/api/mcps/route.js.nft.json +0 -1
  234. package/apps/web/.next/server/app/api/mcps/route_client-reference-manifest.js +0 -1
  235. package/apps/web/.next/server/app/api/settings/route.js +0 -1
  236. package/apps/web/.next/server/app/api/settings/route.js.nft.json +0 -1
  237. package/apps/web/.next/server/app/api/settings/route_client-reference-manifest.js +0 -1
  238. package/apps/web/.next/server/app/icon.svg/route.js +0 -1
  239. package/apps/web/.next/server/app/icon.svg/route.js.nft.json +0 -1
  240. package/apps/web/.next/server/app/jobs/page.js +0 -2
  241. package/apps/web/.next/server/app/jobs/page.js.nft.json +0 -1
  242. package/apps/web/.next/server/app/jobs/page_client-reference-manifest.js +0 -1
  243. package/apps/web/.next/server/app/login/page.js +0 -2
  244. package/apps/web/.next/server/app/login/page.js.nft.json +0 -1
  245. package/apps/web/.next/server/app/login/page_client-reference-manifest.js +0 -1
  246. package/apps/web/.next/server/app/page.js +0 -2
  247. package/apps/web/.next/server/app/page.js.nft.json +0 -1
  248. package/apps/web/.next/server/app/page_client-reference-manifest.js +0 -1
  249. package/apps/web/.next/server/app/settings/env-vars/page.js +0 -2
  250. package/apps/web/.next/server/app/settings/env-vars/page.js.nft.json +0 -1
  251. package/apps/web/.next/server/app/settings/env-vars/page_client-reference-manifest.js +0 -1
  252. package/apps/web/.next/server/app/settings/mcps/page.js +0 -2
  253. package/apps/web/.next/server/app/settings/mcps/page.js.nft.json +0 -1
  254. package/apps/web/.next/server/app/settings/mcps/page_client-reference-manifest.js +0 -1
  255. package/apps/web/.next/server/app/settings/page.js +0 -2
  256. package/apps/web/.next/server/app/settings/page.js.nft.json +0 -1
  257. package/apps/web/.next/server/app/settings/page_client-reference-manifest.js +0 -1
  258. package/apps/web/.next/server/app-paths-manifest.json +0 -46
  259. package/apps/web/.next/server/chunks/1157.js +0 -9
  260. package/apps/web/.next/server/chunks/2287.js +0 -1
  261. package/apps/web/.next/server/chunks/3444.js +0 -1
  262. package/apps/web/.next/server/chunks/383.js +0 -6
  263. package/apps/web/.next/server/chunks/4012.js +0 -58
  264. package/apps/web/.next/server/chunks/6791.js +0 -1
  265. package/apps/web/.next/server/chunks/7171.js +0 -1
  266. package/apps/web/.next/server/chunks/8819.js +0 -22
  267. package/apps/web/.next/server/edge-runtime-webpack.js +0 -2
  268. package/apps/web/.next/server/edge-runtime-webpack.js.map +0 -1
  269. package/apps/web/.next/server/interception-route-rewrite-manifest.js +0 -1
  270. package/apps/web/.next/server/middleware-build-manifest.js +0 -1
  271. package/apps/web/.next/server/middleware-manifest.json +0 -32
  272. package/apps/web/.next/server/middleware-react-loadable-manifest.js +0 -1
  273. package/apps/web/.next/server/next-font-manifest.js +0 -1
  274. package/apps/web/.next/server/next-font-manifest.json +0 -1
  275. package/apps/web/.next/server/pages/_app.js +0 -1
  276. package/apps/web/.next/server/pages/_app.js.nft.json +0 -1
  277. package/apps/web/.next/server/pages/_document.js +0 -1
  278. package/apps/web/.next/server/pages/_document.js.nft.json +0 -1
  279. package/apps/web/.next/server/pages/_error.js +0 -19
  280. package/apps/web/.next/server/pages/_error.js.nft.json +0 -1
  281. package/apps/web/.next/server/pages-manifest.json +0 -5
  282. package/apps/web/.next/server/server-reference-manifest.js +0 -1
  283. package/apps/web/.next/server/server-reference-manifest.json +0 -1
  284. package/apps/web/.next/server/src/middleware.js +0 -14
  285. package/apps/web/.next/server/src/middleware.js.map +0 -1
  286. package/apps/web/.next/server/webpack-runtime.js +0 -1
  287. package/apps/web/.next/static/chunks/18-90b700ea37b686a2.js +0 -1
  288. package/apps/web/.next/static/chunks/87c73c54-24122e7b92478d00.js +0 -1
  289. package/apps/web/.next/static/chunks/9664-af80478aa73ba424.js +0 -1
  290. package/apps/web/.next/static/chunks/app/_not-found/page-b9cee17ed89ca24a.js +0 -1
  291. package/apps/web/.next/static/chunks/app/agents/[slug]/page-18369fc3fe1a9a7b.js +0 -1
  292. package/apps/web/.next/static/chunks/app/agents/new/page-bf11cf8901c7e2cd.js +0 -1
  293. package/apps/web/.next/static/chunks/app/api/agents/[id]/access/route-07f0f73ac9839899.js +0 -1
  294. package/apps/web/.next/static/chunks/app/api/agents/[id]/claude-md/route-07f0f73ac9839899.js +0 -1
  295. package/apps/web/.next/static/chunks/app/api/agents/[id]/logs/route-07f0f73ac9839899.js +0 -1
  296. package/apps/web/.next/static/chunks/app/api/agents/[id]/manifest/route-07f0f73ac9839899.js +0 -1
  297. package/apps/web/.next/static/chunks/app/api/agents/[id]/mcps/route-07f0f73ac9839899.js +0 -1
  298. package/apps/web/.next/static/chunks/app/api/agents/[id]/memories/[memId]/route-07f0f73ac9839899.js +0 -1
  299. package/apps/web/.next/static/chunks/app/api/agents/[id]/memories/route-07f0f73ac9839899.js +0 -1
  300. package/apps/web/.next/static/chunks/app/api/agents/[id]/permissions/route-07f0f73ac9839899.js +0 -1
  301. package/apps/web/.next/static/chunks/app/api/agents/[id]/reload/route-07f0f73ac9839899.js +0 -1
  302. package/apps/web/.next/static/chunks/app/api/agents/[id]/restrictions/route-07f0f73ac9839899.js +0 -1
  303. package/apps/web/.next/static/chunks/app/api/agents/[id]/route-07f0f73ac9839899.js +0 -1
  304. package/apps/web/.next/static/chunks/app/api/agents/[id]/skills/[skillId]/route-07f0f73ac9839899.js +0 -1
  305. package/apps/web/.next/static/chunks/app/api/agents/[id]/skills/route-07f0f73ac9839899.js +0 -1
  306. package/apps/web/.next/static/chunks/app/api/agents/[id]/slack-info/route-07f0f73ac9839899.js +0 -1
  307. package/apps/web/.next/static/chunks/app/api/agents/[id]/snapshots/[sid]/restore/route-07f0f73ac9839899.js +0 -1
  308. package/apps/web/.next/static/chunks/app/api/agents/[id]/snapshots/[sid]/route-07f0f73ac9839899.js +0 -1
  309. package/apps/web/.next/static/chunks/app/api/agents/[id]/snapshots/route-07f0f73ac9839899.js +0 -1
  310. package/apps/web/.next/static/chunks/app/api/agents/[id]/start/route-07f0f73ac9839899.js +0 -1
  311. package/apps/web/.next/static/chunks/app/api/agents/[id]/stop/route-07f0f73ac9839899.js +0 -1
  312. package/apps/web/.next/static/chunks/app/api/agents/route-07f0f73ac9839899.js +0 -1
  313. package/apps/web/.next/static/chunks/app/api/auth/login/route-07f0f73ac9839899.js +0 -1
  314. package/apps/web/.next/static/chunks/app/api/auth/logout/route-07f0f73ac9839899.js +0 -1
  315. package/apps/web/.next/static/chunks/app/api/auth/me/route-07f0f73ac9839899.js +0 -1
  316. package/apps/web/.next/static/chunks/app/api/auth/users/[id]/route-07f0f73ac9839899.js +0 -1
  317. package/apps/web/.next/static/chunks/app/api/auth/users/route-07f0f73ac9839899.js +0 -1
  318. package/apps/web/.next/static/chunks/app/api/env-vars/[key]/route-07f0f73ac9839899.js +0 -1
  319. package/apps/web/.next/static/chunks/app/api/env-vars/route-07f0f73ac9839899.js +0 -1
  320. package/apps/web/.next/static/chunks/app/api/jobs/[id]/route-07f0f73ac9839899.js +0 -1
  321. package/apps/web/.next/static/chunks/app/api/jobs/[id]/runs/route-07f0f73ac9839899.js +0 -1
  322. package/apps/web/.next/static/chunks/app/api/jobs/route-07f0f73ac9839899.js +0 -1
  323. package/apps/web/.next/static/chunks/app/api/mcps/[id]/route-07f0f73ac9839899.js +0 -1
  324. package/apps/web/.next/static/chunks/app/api/mcps/[id]/test/route-07f0f73ac9839899.js +0 -1
  325. package/apps/web/.next/static/chunks/app/api/mcps/route-07f0f73ac9839899.js +0 -1
  326. package/apps/web/.next/static/chunks/app/api/settings/route-07f0f73ac9839899.js +0 -1
  327. package/apps/web/.next/static/chunks/app/jobs/page-f5aa89a47c50efd8.js +0 -1
  328. package/apps/web/.next/static/chunks/app/layout-2079f4964aa7314e.js +0 -1
  329. package/apps/web/.next/static/chunks/app/login/layout-07f0f73ac9839899.js +0 -1
  330. package/apps/web/.next/static/chunks/app/login/page-aa259283dc38e8f9.js +0 -1
  331. package/apps/web/.next/static/chunks/app/page-e83437b608104dff.js +0 -1
  332. package/apps/web/.next/static/chunks/app/settings/env-vars/page-06479dbdfb78b76b.js +0 -1
  333. package/apps/web/.next/static/chunks/app/settings/mcps/page-75650686ed6490c7.js +0 -1
  334. package/apps/web/.next/static/chunks/app/settings/page-e1e62fc41ff6cddd.js +0 -1
  335. package/apps/web/.next/static/chunks/framework-811407f832a33072.js +0 -1
  336. package/apps/web/.next/static/chunks/main-3f1cddbdd67b1546.js +0 -1
  337. package/apps/web/.next/static/chunks/main-app-cebd8a6a5ccbf72d.js +0 -1
  338. package/apps/web/.next/static/chunks/pages/_app-50fa07b56b2d29ac.js +0 -1
  339. package/apps/web/.next/static/chunks/pages/_error-fed8688bdd23f211.js +0 -1
  340. package/apps/web/.next/static/chunks/polyfills-42372ed130431b0a.js +0 -1
  341. package/apps/web/.next/static/chunks/webpack-6c05566dba553c97.js +0 -1
  342. package/apps/web/.next/static/css/15371687405525e2.css +0 -5
  343. package/apps/web/.next/static/ikfNbLhuw7jntn35bz0lk/_buildManifest.js +0 -1
  344. package/apps/web/.next/static/ikfNbLhuw7jntn35bz0lk/_ssgManifest.js +0 -1
  345. package/apps/web/.next/trace +0 -5
  346. package/apps/web/.next/types/app/agents/[slug]/page.ts +0 -84
  347. package/apps/web/.next/types/app/agents/new/page.ts +0 -84
  348. package/apps/web/.next/types/app/api/agents/[id]/access/route.ts +0 -347
  349. package/apps/web/.next/types/app/api/agents/[id]/claude-md/route.ts +0 -347
  350. package/apps/web/.next/types/app/api/agents/[id]/logs/route.ts +0 -347
  351. package/apps/web/.next/types/app/api/agents/[id]/manifest/route.ts +0 -347
  352. package/apps/web/.next/types/app/api/agents/[id]/mcps/route.ts +0 -347
  353. package/apps/web/.next/types/app/api/agents/[id]/memories/[memId]/route.ts +0 -347
  354. package/apps/web/.next/types/app/api/agents/[id]/memories/route.ts +0 -347
  355. package/apps/web/.next/types/app/api/agents/[id]/permissions/route.ts +0 -347
  356. package/apps/web/.next/types/app/api/agents/[id]/reload/route.ts +0 -347
  357. package/apps/web/.next/types/app/api/agents/[id]/restrictions/route.ts +0 -347
  358. package/apps/web/.next/types/app/api/agents/[id]/route.ts +0 -347
  359. package/apps/web/.next/types/app/api/agents/[id]/skills/[skillId]/route.ts +0 -347
  360. package/apps/web/.next/types/app/api/agents/[id]/skills/route.ts +0 -347
  361. package/apps/web/.next/types/app/api/agents/[id]/slack-info/route.ts +0 -347
  362. package/apps/web/.next/types/app/api/agents/[id]/snapshots/[sid]/restore/route.ts +0 -347
  363. package/apps/web/.next/types/app/api/agents/[id]/snapshots/[sid]/route.ts +0 -347
  364. package/apps/web/.next/types/app/api/agents/[id]/snapshots/route.ts +0 -347
  365. package/apps/web/.next/types/app/api/agents/[id]/start/route.ts +0 -347
  366. package/apps/web/.next/types/app/api/agents/[id]/stop/route.ts +0 -347
  367. package/apps/web/.next/types/app/api/agents/route.ts +0 -347
  368. package/apps/web/.next/types/app/api/auth/login/route.ts +0 -347
  369. package/apps/web/.next/types/app/api/auth/logout/route.ts +0 -347
  370. package/apps/web/.next/types/app/api/auth/me/route.ts +0 -347
  371. package/apps/web/.next/types/app/api/auth/users/[id]/route.ts +0 -347
  372. package/apps/web/.next/types/app/api/auth/users/route.ts +0 -347
  373. package/apps/web/.next/types/app/api/env-vars/[key]/route.ts +0 -347
  374. package/apps/web/.next/types/app/api/env-vars/route.ts +0 -347
  375. package/apps/web/.next/types/app/api/jobs/[id]/route.ts +0 -347
  376. package/apps/web/.next/types/app/api/jobs/[id]/runs/route.ts +0 -347
  377. package/apps/web/.next/types/app/api/jobs/route.ts +0 -347
  378. package/apps/web/.next/types/app/api/mcps/[id]/route.ts +0 -347
  379. package/apps/web/.next/types/app/api/mcps/[id]/test/route.ts +0 -347
  380. package/apps/web/.next/types/app/api/mcps/route.ts +0 -347
  381. package/apps/web/.next/types/app/api/settings/route.ts +0 -347
  382. package/apps/web/.next/types/app/jobs/page.ts +0 -84
  383. package/apps/web/.next/types/app/login/layout.ts +0 -84
  384. package/apps/web/.next/types/app/login/page.ts +0 -84
  385. package/apps/web/.next/types/app/page.ts +0 -84
  386. package/apps/web/.next/types/app/settings/env-vars/page.ts +0 -84
  387. package/apps/web/.next/types/app/settings/mcps/page.ts +0 -84
  388. package/apps/web/.next/types/app/settings/page.ts +0 -84
  389. package/apps/web/.next/types/cache-life.d.ts +0 -141
  390. package/apps/web/.next/types/package.json +0 -1
  391. package/apps/web/.next/types/routes.d.ts +0 -114
  392. package/apps/web/.next/types/validator.ts +0 -448
  393. package/apps/web/Dockerfile +0 -37
  394. package/apps/web/next-env.d.ts +0 -6
  395. package/apps/web/next.config.js +0 -6
  396. package/apps/web/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  397. package/apps/web/package.json +0 -48
  398. package/apps/web/postcss.config.js +0 -3
  399. package/apps/web/public/logo.svg +0 -17
  400. package/apps/web/src/app/agents/[slug]/page.tsx +0 -2235
  401. package/apps/web/src/app/agents/new/page.tsx +0 -1161
  402. package/apps/web/src/app/api/agents/[id]/access/route.ts +0 -76
  403. package/apps/web/src/app/api/agents/[id]/claude-md/route.ts +0 -111
  404. package/apps/web/src/app/api/agents/[id]/logs/route.ts +0 -84
  405. package/apps/web/src/app/api/agents/[id]/manifest/route.ts +0 -32
  406. package/apps/web/src/app/api/agents/[id]/mcps/route.ts +0 -73
  407. package/apps/web/src/app/api/agents/[id]/memories/[memId]/route.ts +0 -31
  408. package/apps/web/src/app/api/agents/[id]/memories/route.ts +0 -56
  409. package/apps/web/src/app/api/agents/[id]/permissions/route.ts +0 -74
  410. package/apps/web/src/app/api/agents/[id]/reload/route.ts +0 -33
  411. package/apps/web/src/app/api/agents/[id]/restrictions/route.ts +0 -85
  412. package/apps/web/src/app/api/agents/[id]/route.ts +0 -81
  413. package/apps/web/src/app/api/agents/[id]/skills/[skillId]/route.ts +0 -52
  414. package/apps/web/src/app/api/agents/[id]/skills/route.ts +0 -80
  415. package/apps/web/src/app/api/agents/[id]/slack-info/route.ts +0 -38
  416. package/apps/web/src/app/api/agents/[id]/snapshots/[sid]/restore/route.ts +0 -61
  417. package/apps/web/src/app/api/agents/[id]/snapshots/[sid]/route.ts +0 -53
  418. package/apps/web/src/app/api/agents/[id]/snapshots/route.ts +0 -84
  419. package/apps/web/src/app/api/agents/[id]/start/route.ts +0 -35
  420. package/apps/web/src/app/api/agents/[id]/stop/route.ts +0 -35
  421. package/apps/web/src/app/api/agents/route.ts +0 -99
  422. package/apps/web/src/app/api/auth/login/route.ts +0 -39
  423. package/apps/web/src/app/api/auth/logout/route.ts +0 -21
  424. package/apps/web/src/app/api/auth/me/route.ts +0 -24
  425. package/apps/web/src/app/api/auth/users/[id]/route.ts +0 -48
  426. package/apps/web/src/app/api/auth/users/route.ts +0 -63
  427. package/apps/web/src/app/api/env-vars/[key]/route.ts +0 -66
  428. package/apps/web/src/app/api/env-vars/route.ts +0 -59
  429. package/apps/web/src/app/api/jobs/[id]/route.ts +0 -51
  430. package/apps/web/src/app/api/jobs/[id]/runs/route.ts +0 -24
  431. package/apps/web/src/app/api/jobs/route.ts +0 -42
  432. package/apps/web/src/app/api/mcps/[id]/route.ts +0 -60
  433. package/apps/web/src/app/api/mcps/[id]/test/route.ts +0 -195
  434. package/apps/web/src/app/api/mcps/route.ts +0 -72
  435. package/apps/web/src/app/api/settings/route.ts +0 -42
  436. package/apps/web/src/app/globals.css +0 -124
  437. package/apps/web/src/app/icon.svg +0 -17
  438. package/apps/web/src/app/jobs/page.tsx +0 -543
  439. package/apps/web/src/app/layout-shell.tsx +0 -89
  440. package/apps/web/src/app/layout.tsx +0 -18
  441. package/apps/web/src/app/login/layout.tsx +0 -9
  442. package/apps/web/src/app/login/page.tsx +0 -150
  443. package/apps/web/src/app/page.tsx +0 -573
  444. package/apps/web/src/app/settings/env-vars/page.tsx +0 -216
  445. package/apps/web/src/app/settings/mcps/page.tsx +0 -763
  446. package/apps/web/src/app/settings/page.tsx +0 -528
  447. package/apps/web/src/app/sidebar.tsx +0 -345
  448. package/apps/web/src/lib/__tests__/api-guard.test.ts +0 -189
  449. package/apps/web/src/lib/__tests__/auth.test.ts +0 -262
  450. package/apps/web/src/lib/__tests__/boss-registry.test.ts +0 -323
  451. package/apps/web/src/lib/__tests__/compile.test.ts +0 -161
  452. package/apps/web/src/lib/__tests__/db-agent-hierarchy.test.ts +0 -136
  453. package/apps/web/src/lib/__tests__/db-env-vars.test.ts +0 -216
  454. package/apps/web/src/lib/__tests__/db-restrictions.test.ts +0 -117
  455. package/apps/web/src/lib/__tests__/db.integration.test.ts +0 -271
  456. package/apps/web/src/lib/__tests__/diff.test.ts +0 -102
  457. package/apps/web/src/lib/__tests__/mcp-mask.test.ts +0 -274
  458. package/apps/web/src/lib/__tests__/skill-templates.test.ts +0 -237
  459. package/apps/web/src/lib/__tests__/slack-manifest.test.ts +0 -105
  460. package/apps/web/src/lib/api-guard.ts +0 -68
  461. package/apps/web/src/lib/auth-context.tsx +0 -71
  462. package/apps/web/src/lib/auth.ts +0 -128
  463. package/apps/web/src/lib/boss-registry.ts +0 -90
  464. package/apps/web/src/lib/compile.ts +0 -51
  465. package/apps/web/src/lib/db.ts +0 -1196
  466. package/apps/web/src/lib/diff.ts +0 -43
  467. package/apps/web/src/lib/mcp-mask.ts +0 -91
  468. package/apps/web/src/lib/portal.tsx +0 -23
  469. package/apps/web/src/lib/skill-templates.ts +0 -148
  470. package/apps/web/src/lib/slack-manifest.ts +0 -85
  471. package/apps/web/src/middleware.ts +0 -68
  472. package/apps/web/tailwind.config.js +0 -6
  473. package/apps/web/tsconfig.json +0 -23
  474. package/apps/web/vitest.config.mts +0 -21
  475. package/cli/.claude/settings.local.json +0 -6
  476. package/cli/node_modules/.package-lock.json +0 -427
  477. package/cli/node_modules/commander/LICENSE +0 -22
  478. package/cli/node_modules/commander/Readme.md +0 -1157
  479. package/cli/node_modules/commander/esm.mjs +0 -16
  480. package/cli/node_modules/commander/index.js +0 -24
  481. package/cli/node_modules/commander/lib/argument.js +0 -149
  482. package/cli/node_modules/commander/lib/command.js +0 -2509
  483. package/cli/node_modules/commander/lib/error.js +0 -39
  484. package/cli/node_modules/commander/lib/help.js +0 -520
  485. package/cli/node_modules/commander/lib/option.js +0 -330
  486. package/cli/node_modules/commander/lib/suggestSimilar.js +0 -101
  487. package/cli/node_modules/commander/package-support.json +0 -16
  488. package/cli/node_modules/commander/package.json +0 -84
  489. package/cli/node_modules/commander/typings/esm.d.mts +0 -3
  490. package/cli/node_modules/commander/typings/index.d.ts +0 -969
  491. package/cli/package-lock.json +0 -449
  492. package/cli/package.json +0 -44
  493. package/cli/src/commands/init.ts +0 -514
  494. package/cli/src/commands/manage.ts +0 -115
  495. package/cli/src/index.ts +0 -63
  496. package/cli/tsconfig.json +0 -14
  497. package/docker-compose.yml +0 -122
  498. package/docs/agents/boss-agents.mdx +0 -108
  499. package/docs/agents/creating-agents.mdx +0 -132
  500. package/docs/agents/memory.mdx +0 -113
  501. package/docs/agents/tools.mdx +0 -103
  502. package/docs/configuration/env-vars.mdx +0 -166
  503. package/docs/configuration/mcp-servers.mdx +0 -203
  504. package/docs/configuration/slack-app.mdx +0 -175
  505. package/docs/docs.json +0 -79
  506. package/docs/favicon.svg +0 -17
  507. package/docs/features/history.mdx +0 -60
  508. package/docs/features/import-export.mdx +0 -77
  509. package/docs/features/logs.mdx +0 -131
  510. package/docs/features/multi-workspace.mdx +0 -90
  511. package/docs/features/scheduled-jobs.mdx +0 -231
  512. package/docs/features/users.mdx +0 -92
  513. package/docs/introduction.mdx +0 -160
  514. package/docs/logo/dark.svg +0 -17
  515. package/docs/logo/light.svg +0 -17
  516. package/docs/logo/wide-dark.svg +0 -12
  517. package/docs/logo/wide-light.svg +0 -12
  518. package/docs/quickstart.mdx +0 -270
  519. package/docs/self-hosting/docker.mdx +0 -151
  520. package/docs/self-hosting/production.mdx +0 -176
  521. package/packages/shared/dist/index.d.ts +0 -8
  522. package/packages/shared/dist/index.d.ts.map +0 -1
  523. package/packages/shared/dist/index.js +0 -24
  524. package/packages/shared/dist/index.js.map +0 -1
  525. package/packages/shared/dist/types.d.ts +0 -584
  526. package/packages/shared/dist/types.d.ts.map +0 -1
  527. package/packages/shared/dist/types.js +0 -39
  528. package/packages/shared/dist/types.js.map +0 -1
  529. package/packages/shared/package.json +0 -15
  530. package/packages/shared/src/db/schema.sql +0 -354
  531. package/packages/shared/src/index.ts +0 -8
  532. package/packages/shared/src/types.ts +0 -683
  533. package/packages/shared/tsconfig.json +0 -17
  534. package/scripts/dev.sh +0 -45
@@ -1,24 +0,0 @@
1
- /**
2
- * @fileoverview Current user API — returns session info from cookie.
3
- *
4
- * GET /api/auth/me
5
- *
6
- * @module web/api/auth/me
7
- */
8
-
9
- import { NextResponse } from 'next/server';
10
- import { getSessionFromRequest } from '@/lib/auth';
11
-
12
- /**
13
- * Returns the current user's username and role from the session cookie.
14
- *
15
- * @param {Request} req - Incoming request.
16
- * @returns {Promise<NextResponse>} JSON with user info or 401.
17
- */
18
- export async function GET(req: Request): Promise<NextResponse> {
19
- const session = getSessionFromRequest(req);
20
- if (!session) {
21
- return NextResponse.json({ error: 'Not authenticated' }, { status: 401 });
22
- }
23
- return NextResponse.json({ username: session.username, role: session.role });
24
- }
@@ -1,48 +0,0 @@
1
- /**
2
- * @fileoverview User management API — delete and update role.
3
- *
4
- * DELETE /api/auth/users/[id] — Delete a user (admin only)
5
- * PATCH /api/auth/users/[id] — Update a user's role (admin only)
6
- *
7
- * @module web/api/auth/users/[id]
8
- */
9
-
10
- import { NextResponse } from 'next/server';
11
- import { requireRole } from '@/lib/auth';
12
- import { deleteUser, updateUserRole } from '@/lib/db';
13
-
14
- const VALID_ROLES = ['admin', 'editor', 'viewer'];
15
-
16
- /**
17
- * Deletes a user by ID (admin only).
18
- */
19
- export async function DELETE(req: Request, { params }: { params: Promise<{ id: string }> }): Promise<NextResponse> {
20
- try {
21
- requireRole(req, 'admin');
22
- } catch {
23
- return NextResponse.json({ error: 'Forbidden' }, { status: 403 });
24
- }
25
- const { id } = await params;
26
- await deleteUser(id);
27
- return new NextResponse(null, { status: 204 });
28
- }
29
-
30
- /**
31
- * Updates a user's role (admin only).
32
- * Body: { role: 'admin' | 'editor' | 'viewer' }
33
- */
34
- export async function PATCH(req: Request, { params }: { params: Promise<{ id: string }> }): Promise<NextResponse> {
35
- try {
36
- requireRole(req, 'admin');
37
- } catch {
38
- return NextResponse.json({ error: 'Forbidden' }, { status: 403 });
39
- }
40
- const { id } = await params;
41
- const body = await req.json().catch(() => ({}));
42
- const { role } = body;
43
- if (!role || !VALID_ROLES.includes(role)) {
44
- return NextResponse.json({ error: `Invalid role. Must be one of: ${VALID_ROLES.join(', ')}` }, { status: 400 });
45
- }
46
- await updateUserRole(id, role);
47
- return NextResponse.json({ id, role });
48
- }
@@ -1,63 +0,0 @@
1
- /**
2
- * @fileoverview User management API — list and create users.
3
- *
4
- * GET /api/auth/users — list all users (admin only).
5
- * POST /api/auth/users — create a user `{ username, password, role }` (admin only).
6
- *
7
- * @module web/api/auth/users
8
- */
9
-
10
- import { NextResponse } from 'next/server';
11
- import { requireRole, hashPassword } from '@/lib/auth';
12
- import { getAllUsers, createUser } from '@/lib/db';
13
-
14
- /**
15
- * Lists all platform users (excluding password hashes).
16
- *
17
- * @param {Request} req - Incoming request.
18
- * @returns {Promise<NextResponse>} JSON array of users.
19
- */
20
- export async function GET(req: Request): Promise<NextResponse> {
21
- try {
22
- requireRole(req, 'admin');
23
- } catch {
24
- return NextResponse.json({ error: 'Forbidden' }, { status: 403 });
25
- }
26
- const users = await getAllUsers();
27
- return NextResponse.json(users);
28
- }
29
-
30
- /**
31
- * Creates a new platform user.
32
- *
33
- * @param {Request} req - JSON body with `username`, `password`, `role`.
34
- * @returns {Promise<NextResponse>} Created user JSON.
35
- */
36
- export async function POST(req: Request): Promise<NextResponse> {
37
- try {
38
- requireRole(req, 'admin');
39
- } catch {
40
- return NextResponse.json({ error: 'Forbidden' }, { status: 403 });
41
- }
42
-
43
- const { username, password, role } = await req.json();
44
-
45
- if (!username || !password) {
46
- return NextResponse.json({ error: 'username and password required' }, { status: 400 });
47
- }
48
- if (role && !['admin', 'editor', 'viewer'].includes(role)) {
49
- return NextResponse.json({ error: 'role must be admin, editor, or viewer' }, { status: 400 });
50
- }
51
-
52
- try {
53
- const hash = await hashPassword(password);
54
- const user = await createUser(username, hash, role || 'viewer');
55
- return NextResponse.json(user, { status: 201 });
56
- } catch (e: unknown) {
57
- const msg = e instanceof Error ? e.message : 'Unknown error';
58
- if (msg.includes('unique') || msg.includes('duplicate')) {
59
- return NextResponse.json({ error: 'Username already exists' }, { status: 409 });
60
- }
61
- return NextResponse.json({ error: msg }, { status: 500 });
62
- }
63
- }
@@ -1,66 +0,0 @@
1
- /**
2
- * @fileoverview REST API for a single env var entry.
3
- *
4
- * PUT /api/env-vars/[key] — Update value and/or description
5
- * DELETE /api/env-vars/[key] — Remove the env var
6
- *
7
- * @module web/api/env-vars/[key]
8
- */
9
-
10
- import { NextRequest, NextResponse } from 'next/server';
11
- import { setEnvVar, updateEnvVarDescription, deleteEnvVar } from '@/lib/db';
12
- import { guardAdmin } from '@/lib/api-guard';
13
-
14
- /**
15
- * PUT /api/env-vars/[key]
16
- * Updates an env var. Supply value to replace it, description to update label.
17
- * At least one of value or description must be provided.
18
- *
19
- * @param {NextRequest} request - Body: { value?: string, description?: string }
20
- * @param {{ params: { key: string } }} context - Route params.
21
- * @returns {Promise<NextResponse>}
22
- */
23
- export async function PUT(
24
- request: NextRequest,
25
- { params }: { params: Promise<{ key: string }> }
26
- ): Promise<NextResponse> {
27
- const denied = guardAdmin(request);
28
- if (denied) return denied;
29
- try {
30
- const { key } = await params;
31
- const body = (await request.json()) as { value?: string; description?: string };
32
- if (body.value !== undefined) {
33
- await setEnvVar(key, body.value, body.description);
34
- } else if (body.description !== undefined) {
35
- await updateEnvVarDescription(key, body.description);
36
- } else {
37
- return NextResponse.json({ error: 'value or description required' }, { status: 400 });
38
- }
39
- return NextResponse.json({ key });
40
- } catch (err) {
41
- return NextResponse.json({ error: (err as Error).message }, { status: 500 });
42
- }
43
- }
44
-
45
- /**
46
- * DELETE /api/env-vars/[key]
47
- * Removes an env var from the store.
48
- *
49
- * @param {NextRequest} request - Incoming request.
50
- * @param {{ params: { key: string } }} context - Route params.
51
- * @returns {Promise<NextResponse>}
52
- */
53
- export async function DELETE(
54
- request: NextRequest,
55
- { params }: { params: Promise<{ key: string }> }
56
- ): Promise<NextResponse> {
57
- const denied = guardAdmin(request);
58
- if (denied) return denied;
59
- try {
60
- const { key } = await params;
61
- await deleteEnvVar(key);
62
- return NextResponse.json({ ok: true });
63
- } catch (err) {
64
- return NextResponse.json({ error: (err as Error).message }, { status: 500 });
65
- }
66
- }
@@ -1,59 +0,0 @@
1
- /**
2
- * @fileoverview REST API for the platform env vars store.
3
- *
4
- * GET /api/env-vars — List all env var keys + metadata (values never returned)
5
- * POST /api/env-vars — Create or update an env var
6
- *
7
- * @module web/api/env-vars
8
- */
9
-
10
- import { NextRequest, NextResponse } from 'next/server';
11
- import { getAllEnvVars, setEnvVar } from '@/lib/db';
12
- import { guardAdmin } from '@/lib/api-guard';
13
-
14
- /**
15
- * GET /api/env-vars
16
- * Returns all env var keys and descriptions. Values are never included.
17
- *
18
- * @returns {Promise<NextResponse>} JSON array of { key, description, updatedAt }.
19
- */
20
- export async function GET(): Promise<NextResponse> {
21
- try {
22
- const vars = await getAllEnvVars();
23
- return NextResponse.json(vars);
24
- } catch (err) {
25
- return NextResponse.json({ error: (err as Error).message }, { status: 500 });
26
- }
27
- }
28
-
29
- /**
30
- * POST /api/env-vars
31
- * Creates or updates an env var. Requires editor role or above.
32
- *
33
- * @param {NextRequest} request - Body: { key: string, value: string, description?: string }
34
- * @returns {Promise<NextResponse>} 201 on success.
35
- */
36
- export async function POST(request: NextRequest): Promise<NextResponse> {
37
- const denied = guardAdmin(request);
38
- if (denied) return denied;
39
- try {
40
- const { key, value, description } = (await request.json()) as {
41
- key: string;
42
- value: string;
43
- description?: string;
44
- };
45
- if (!key || !value) {
46
- return NextResponse.json({ error: 'key and value are required' }, { status: 400 });
47
- }
48
- if (!/^[A-Z_][A-Z0-9_]*$/.test(key)) {
49
- return NextResponse.json(
50
- { error: 'key must be uppercase letters, digits, and underscores (e.g. DATABASE_URL)' },
51
- { status: 400 }
52
- );
53
- }
54
- await setEnvVar(key, value, description);
55
- return NextResponse.json({ key }, { status: 201 });
56
- } catch (err) {
57
- return NextResponse.json({ error: (err as Error).message }, { status: 500 });
58
- }
59
- }
@@ -1,51 +0,0 @@
1
- /**
2
- * @fileoverview Single job API — get, update, delete.
3
- *
4
- * GET /api/jobs/[id] — get a job.
5
- * PATCH /api/jobs/[id] — update a job.
6
- * DELETE /api/jobs/[id] — delete a job.
7
- *
8
- * @module web/api/jobs/[id]
9
- */
10
-
11
- import { NextResponse } from 'next/server';
12
- import { guardAdmin } from '@/lib/api-guard';
13
- import { getJobById, updateJob, deleteJob, publishAgentEvent } from '@/lib/db';
14
-
15
- type Ctx = { params: Promise<{ id: string }> };
16
-
17
- /**
18
- * Returns a single job by ID.
19
- */
20
- export async function GET(_req: Request, { params }: Ctx): Promise<NextResponse> {
21
- const { id } = await params;
22
- const job = await getJobById(id);
23
- if (!job) return NextResponse.json({ error: 'Not found' }, { status: 404 });
24
- return NextResponse.json(job);
25
- }
26
-
27
- /**
28
- * Updates a scheduled job.
29
- */
30
- export async function PATCH(req: Request, { params }: Ctx): Promise<NextResponse> {
31
- const denied = guardAdmin(req);
32
- if (denied) return denied;
33
- const { id } = await params;
34
- const body = await req.json();
35
- const job = await updateJob(id, body);
36
- if (!job) return NextResponse.json({ error: 'Not found' }, { status: 404 });
37
- await publishAgentEvent({ type: 'reload-jobs' });
38
- return NextResponse.json(job);
39
- }
40
-
41
- /**
42
- * Deletes a scheduled job.
43
- */
44
- export async function DELETE(req: Request, { params }: Ctx): Promise<NextResponse> {
45
- const denied = guardAdmin(req);
46
- if (denied) return denied;
47
- const { id } = await params;
48
- await deleteJob(id);
49
- await publishAgentEvent({ type: 'reload-jobs' });
50
- return new NextResponse(null, { status: 204 });
51
- }
@@ -1,24 +0,0 @@
1
- /**
2
- * @fileoverview Job runs API — execution history for a scheduled job.
3
- *
4
- * GET /api/jobs/[id]/runs — paginated run history.
5
- *
6
- * @module web/api/jobs/[id]/runs
7
- */
8
-
9
- import { NextResponse } from 'next/server';
10
- import { getJobRuns } from '@/lib/db';
11
-
12
- type Ctx = { params: Promise<{ id: string }> };
13
-
14
- /**
15
- * Returns paginated run history for a job.
16
- */
17
- export async function GET(req: Request, { params }: Ctx): Promise<NextResponse> {
18
- const { id } = await params;
19
- const url = new URL(req.url);
20
- const limit = parseInt(url.searchParams.get('limit') || '20', 10);
21
- const offset = parseInt(url.searchParams.get('offset') || '0', 10);
22
- const runs = await getJobRuns(id, limit, offset);
23
- return NextResponse.json(runs);
24
- }
@@ -1,42 +0,0 @@
1
- /**
2
- * @fileoverview Scheduled jobs API — list and create jobs.
3
- *
4
- * GET /api/jobs — list all jobs with last run info.
5
- * POST /api/jobs — create a new scheduled job.
6
- *
7
- * @module web/api/jobs
8
- */
9
-
10
- import { NextResponse } from 'next/server';
11
- import { guardAdmin } from '@/lib/api-guard';
12
- import { getAllJobs, createJob, publishAgentEvent } from '@/lib/db';
13
-
14
- /**
15
- * Lists all scheduled jobs with their most recent run.
16
- *
17
- * @returns {Promise<NextResponse>} JSON array of jobs.
18
- */
19
- export async function GET(): Promise<NextResponse> {
20
- const jobs = await getAllJobs();
21
- return NextResponse.json(jobs);
22
- }
23
-
24
- /**
25
- * Creates a new scheduled job.
26
- *
27
- * @param {Request} req - JSON body with job fields.
28
- * @returns {Promise<NextResponse>} Created job.
29
- */
30
- export async function POST(req: Request): Promise<NextResponse> {
31
- const denied = guardAdmin(req);
32
- if (denied) return denied;
33
-
34
- const body = await req.json();
35
- if (!body.name || !body.prompt || !body.cronSchedule || !body.targetId || !body.agentId) {
36
- return NextResponse.json({ error: 'agentId, name, prompt, cronSchedule, and targetId are required' }, { status: 400 });
37
- }
38
-
39
- const job = await createJob(body);
40
- await publishAgentEvent({ type: 'reload-jobs' });
41
- return NextResponse.json(job, { status: 201 });
42
- }
@@ -1,60 +0,0 @@
1
- /**
2
- * @fileoverview REST API route for a single MCP server resource.
3
- *
4
- * GET /api/mcps/[id] — Get a specific MCP server
5
- * PATCH /api/mcps/[id] — Update an MCP server
6
- * DELETE /api/mcps/[id] — Remove an MCP server from the catalog
7
- *
8
- * @module web/api/mcps/[id]
9
- */
10
-
11
- import { NextRequest, NextResponse } from 'next/server';
12
- import { getMcpServerById, updateMcpServer, deleteMcpServer } from '@/lib/db';
13
- import type { UpsertMcpServerRequest } from '@slackhive/shared';
14
- import { guardAdmin } from '@/lib/api-guard';
15
- import { maskMcpServer, mergeMcpConfig } from '@/lib/mcp-mask';
16
-
17
- type RouteParams = { params: Promise<{ id: string }> };
18
-
19
- export async function GET(_req: NextRequest, { params }: RouteParams): Promise<NextResponse> {
20
- try {
21
- const { id } = await params;
22
- const server = await getMcpServerById(id);
23
- if (!server) return NextResponse.json({ error: 'Not found' }, { status: 404 });
24
- return NextResponse.json(maskMcpServer(server));
25
- } catch (err) {
26
- return NextResponse.json({ error: (err as Error).message }, { status: 500 });
27
- }
28
- }
29
-
30
- export async function PATCH(req: NextRequest, { params }: RouteParams): Promise<NextResponse> {
31
- const denied = guardAdmin(req);
32
- if (denied) return denied;
33
- try {
34
- const { id } = await params;
35
- const body = (await req.json()) as Partial<UpsertMcpServerRequest>;
36
- // If config is being updated, merge masked values with existing secrets
37
- if (body.config) {
38
- const existing = await getMcpServerById(id);
39
- if (!existing) return NextResponse.json({ error: 'Not found' }, { status: 404 });
40
- body.config = mergeMcpConfig(existing.config, body.config);
41
- }
42
- const updated = await updateMcpServer(id, body);
43
- if (!updated) return NextResponse.json({ error: 'Not found' }, { status: 404 });
44
- return NextResponse.json(maskMcpServer(updated));
45
- } catch (err) {
46
- return NextResponse.json({ error: (err as Error).message }, { status: 500 });
47
- }
48
- }
49
-
50
- export async function DELETE(req: NextRequest, { params }: RouteParams): Promise<NextResponse> {
51
- const denied = guardAdmin(req);
52
- if (denied) return denied;
53
- try {
54
- const { id } = await params;
55
- await deleteMcpServer(id);
56
- return new NextResponse(null, { status: 204 });
57
- } catch (err) {
58
- return NextResponse.json({ error: (err as Error).message }, { status: 500 });
59
- }
60
- }
@@ -1,195 +0,0 @@
1
- /**
2
- * @fileoverview MCP server connectivity test endpoint.
3
- *
4
- * POST /api/mcps/[id]/test
5
- *
6
- * For stdio MCPs: spawns the process, sends an MCP initialize request over
7
- * stdin/stdout, and verifies the server responds with a valid JSON-RPC result.
8
- * Times out after 10 seconds.
9
- *
10
- * For SSE/HTTP MCPs: sends a GET request to the configured URL and checks
11
- * for a 2xx response.
12
- *
13
- * @module web/api/mcps/[id]/test
14
- */
15
-
16
- import { NextRequest, NextResponse } from 'next/server';
17
- import { getMcpServerById, getEnvVarValues } from '@/lib/db';
18
- import { guardAdmin } from '@/lib/api-guard';
19
- import { spawn } from 'child_process';
20
- import { writeFile, unlink, mkdir } from 'fs/promises';
21
- import { tmpdir } from 'os';
22
- import { join } from 'path';
23
- import type { McpStdioConfig, McpSseConfig } from '@slackhive/shared';
24
-
25
- type RouteParams = { params: Promise<{ id: string }> };
26
-
27
- const TIMEOUT_MS = 30_000;
28
-
29
- /**
30
- * POST /api/mcps/[id]/test
31
- * Runs a quick connectivity check against the MCP server.
32
- *
33
- * @returns {Promise<NextResponse>} { ok: true, message } or { ok: false, error }
34
- */
35
- export async function POST(req: NextRequest, { params }: RouteParams): Promise<NextResponse> {
36
- const denied = guardAdmin(req);
37
- if (denied) return denied;
38
-
39
- const { id } = await params;
40
- const server = await getMcpServerById(id);
41
- if (!server) {
42
- return NextResponse.json({ error: 'MCP server not found' }, { status: 404 });
43
- }
44
-
45
- try {
46
- if (server.type === 'stdio') {
47
- const result = await testStdioMcp(server.config as McpStdioConfig, server.name);
48
- return NextResponse.json(result);
49
- }
50
-
51
- // SSE / HTTP — just check the URL is reachable
52
- const cfg = server.config as McpSseConfig & { envRefs?: Record<string, string> };
53
- const headers: Record<string, string> = { ...(cfg.headers ?? {}) };
54
- if (cfg.envRefs && Object.keys(cfg.envRefs).length > 0) {
55
- try {
56
- const envVarValues = await getEnvVarValues();
57
- for (const [headerKey, storeKey] of Object.entries(cfg.envRefs)) {
58
- const val = envVarValues[storeKey];
59
- if (val) headers[headerKey] = headers[headerKey] ? `${headers[headerKey]}${val}` : val;
60
- }
61
- } catch { /* skip if env vars unavailable */ }
62
- }
63
- const res = await fetch(cfg.url, {
64
- method: 'GET',
65
- headers,
66
- signal: AbortSignal.timeout(TIMEOUT_MS),
67
- });
68
- if (res.ok || res.status === 405) {
69
- // 405 Method Not Allowed is fine — the endpoint exists
70
- return NextResponse.json({ ok: true, message: `Reachable (HTTP ${res.status})` });
71
- }
72
- return NextResponse.json({ ok: false, error: `HTTP ${res.status}: ${res.statusText}` });
73
- } catch (err) {
74
- return NextResponse.json({ ok: false, error: (err as Error).message });
75
- }
76
- }
77
-
78
- /**
79
- * Spawns a stdio MCP process, sends an MCP initialize request, and verifies
80
- * the response. Resolves envRefs from the env_vars store before spawning.
81
- */
82
- async function testStdioMcp(
83
- cfg: McpStdioConfig,
84
- name: string
85
- ): Promise<{ ok: boolean; message?: string; error?: string; tools?: string[] }> {
86
- const resolvedEnv: Record<string, string> = { ...(cfg.env ?? {}) };
87
- if (cfg.envRefs && Object.keys(cfg.envRefs).length > 0) {
88
- try {
89
- const envVarValues = await getEnvVarValues();
90
- for (const [subKey, storeKey] of Object.entries(cfg.envRefs)) {
91
- if (envVarValues[storeKey] !== undefined) resolvedEnv[subKey] = envVarValues[storeKey];
92
- }
93
- } catch { /* ENV_SECRET_KEY not set — skip */ }
94
- }
95
-
96
- let command: string;
97
- let args: string[];
98
- let tmpScript: string | null = null;
99
-
100
- if (cfg.tsSource) {
101
- const dir = join(tmpdir(), 'slackhive-mcp-test');
102
- await mkdir(dir, { recursive: true });
103
- tmpScript = join(dir, `test-${Date.now()}.ts`);
104
- await writeFile(tmpScript, cfg.tsSource, 'utf8');
105
- command = 'tsx';
106
- args = [tmpScript];
107
- } else {
108
- command = cfg.command;
109
- args = cfg.args ?? [];
110
- }
111
-
112
- const cleanup = () => { if (tmpScript) unlink(tmpScript).catch(() => {}); };
113
-
114
- return new Promise((resolve) => {
115
- let stdout = '';
116
- let stderr = '';
117
- let settled = false;
118
-
119
- const timer = setTimeout(() => {
120
- if (!settled) {
121
- settled = true;
122
- proc.kill();
123
- cleanup();
124
- resolve({ ok: false, error: `Timed out after ${TIMEOUT_MS / 1000}s — process did not respond` });
125
- }
126
- }, TIMEOUT_MS);
127
-
128
- const proc = spawn(command, args, {
129
- env: { ...process.env, NODE_PATH: '/app/node_modules', ...resolvedEnv },
130
- stdio: ['pipe', 'pipe', 'pipe'],
131
- });
132
-
133
- proc.stderr.on('data', (d: Buffer) => { stderr += d.toString(); });
134
-
135
- const initRequest = JSON.stringify({
136
- jsonrpc: '2.0',
137
- id: 1,
138
- method: 'initialize',
139
- params: {
140
- protocolVersion: '2024-11-05',
141
- capabilities: {},
142
- clientInfo: { name: 'slackhive-test', version: '1.0.0' },
143
- },
144
- }) + '\n';
145
-
146
- proc.stdin.write(initRequest);
147
-
148
- proc.stdout.on('data', (d: Buffer) => {
149
- stdout += d.toString();
150
- const lines = stdout.split('\n').filter(l => l.trim());
151
- for (const line of lines) {
152
- try {
153
- const msg = JSON.parse(line) as { id?: number; result?: { serverInfo?: { name?: string }; capabilities?: { tools?: unknown } }; error?: { message?: string } };
154
- if (msg.id === 1) {
155
- clearTimeout(timer);
156
- if (!settled) {
157
- settled = true;
158
- proc.kill();
159
- cleanup();
160
- if (msg.error) {
161
- resolve({ ok: false, error: msg.error.message ?? 'MCP error' });
162
- } else {
163
- const serverName = msg.result?.serverInfo?.name ?? name;
164
- resolve({ ok: true, message: `Connected to "${serverName}" successfully` });
165
- }
166
- }
167
- }
168
- } catch {
169
- // incomplete line, keep buffering
170
- }
171
- }
172
- });
173
-
174
- proc.on('error', (err) => {
175
- clearTimeout(timer);
176
- if (!settled) {
177
- settled = true;
178
- cleanup();
179
- resolve({ ok: false, error: `Failed to start: ${err.message}${stderr ? ` — ${stderr.trim()}` : ''}` });
180
- }
181
- });
182
-
183
- proc.on('exit', (code) => {
184
- clearTimeout(timer);
185
- if (!settled) {
186
- settled = true;
187
- cleanup();
188
- resolve({
189
- ok: false,
190
- error: `Process exited with code ${code}${stderr ? ` — ${stderr.trim()}` : ''}`,
191
- });
192
- }
193
- });
194
- });
195
- }