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,492 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview PostgreSQL database client for the runner service.
4
+ *
5
+ * Provides a singleton Pool instance and typed query helpers for all
6
+ * tables used by the runner: agents, mcp_servers, agent_mcps, skills,
7
+ * permissions, memories, and sessions.
8
+ *
9
+ * @module runner/db
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getPool = getPool;
13
+ exports.closePool = closePool;
14
+ exports.getAllAgents = getAllAgents;
15
+ exports.getAgentById = getAgentById;
16
+ exports.updateAgentStatus = updateAgentStatus;
17
+ exports.updateAgentSlackUserId = updateAgentSlackUserId;
18
+ exports.getAgentMcpServers = getAgentMcpServers;
19
+ exports.getAgentSkills = getAgentSkills;
20
+ exports.upsertSkill = upsertSkill;
21
+ exports.deleteSkill = deleteSkill;
22
+ exports.getAgentPermissions = getAgentPermissions;
23
+ exports.getAgentRestrictions = getAgentRestrictions;
24
+ exports.getAgentMemories = getAgentMemories;
25
+ exports.upsertMemory = upsertMemory;
26
+ exports.upsertMemorySafe = upsertMemorySafe;
27
+ exports.getSession = getSession;
28
+ exports.upsertSession = upsertSession;
29
+ exports.cleanupStaleSessions = cleanupStaleSessions;
30
+ exports.getAllEnabledJobs = getAllEnabledJobs;
31
+ exports.insertJobRun = insertJobRun;
32
+ exports.updateJobRun = updateJobRun;
33
+ exports.getAllEnvVarValues = getAllEnvVarValues;
34
+ const pg_1 = require("pg");
35
+ const logger_1 = require("./logger");
36
+ /** Singleton Postgres connection pool. */
37
+ let pool = null;
38
+ /**
39
+ * Returns the singleton Postgres connection pool.
40
+ * Creates the pool on first call using DATABASE_URL from environment.
41
+ *
42
+ * @returns {Pool} The Postgres connection pool.
43
+ * @throws {Error} If DATABASE_URL is not set.
44
+ */
45
+ function getPool() {
46
+ if (!pool) {
47
+ const databaseUrl = process.env.DATABASE_URL;
48
+ if (!databaseUrl) {
49
+ throw new Error('DATABASE_URL environment variable is required');
50
+ }
51
+ pool = new pg_1.Pool({
52
+ connectionString: databaseUrl,
53
+ max: 10,
54
+ idleTimeoutMillis: 30_000,
55
+ connectionTimeoutMillis: 5_000,
56
+ });
57
+ pool.on('error', (err) => {
58
+ logger_1.logger.error('Unexpected pool error', { error: err.message });
59
+ });
60
+ }
61
+ return pool;
62
+ }
63
+ /**
64
+ * Closes the Postgres connection pool.
65
+ * Should be called on graceful shutdown.
66
+ *
67
+ * @returns {Promise<void>}
68
+ */
69
+ async function closePool() {
70
+ if (pool) {
71
+ await pool.end();
72
+ pool = null;
73
+ }
74
+ }
75
+ // =============================================================================
76
+ // Row mappers — convert snake_case DB columns to camelCase TS interfaces
77
+ // =============================================================================
78
+ /**
79
+ * Maps a raw database row to an {@link Agent} interface.
80
+ *
81
+ * @param {Record<string, unknown>} row - Raw row from the agents table.
82
+ * @returns {Agent} Typed agent object.
83
+ */
84
+ function rowToAgent(row) {
85
+ return {
86
+ id: row.id,
87
+ slug: row.slug,
88
+ name: row.name,
89
+ persona: row.persona,
90
+ description: row.description,
91
+ slackBotToken: row.slack_bot_token,
92
+ slackAppToken: row.slack_app_token,
93
+ slackSigningSecret: row.slack_signing_secret,
94
+ slackBotUserId: row.slack_bot_user_id,
95
+ model: row.model,
96
+ status: row.status,
97
+ enabled: row.enabled !== false,
98
+ isBoss: row.is_boss,
99
+ reportsTo: row.reports_to ?? [],
100
+ claudeMd: row.claude_md ?? '',
101
+ createdBy: row.created_by ?? 'system',
102
+ createdAt: row.created_at,
103
+ updatedAt: row.updated_at,
104
+ };
105
+ }
106
+ /**
107
+ * Maps a raw database row to a {@link McpServer} interface.
108
+ *
109
+ * @param {Record<string, unknown>} row - Raw row from the mcp_servers table.
110
+ * @returns {McpServer} Typed MCP server object.
111
+ */
112
+ function rowToMcpServer(row) {
113
+ return {
114
+ id: row.id,
115
+ name: row.name,
116
+ type: row.type,
117
+ config: row.config,
118
+ description: row.description,
119
+ enabled: row.enabled,
120
+ createdAt: row.created_at,
121
+ };
122
+ }
123
+ /**
124
+ * Maps a raw database row to a {@link Skill} interface.
125
+ *
126
+ * @param {Record<string, unknown>} row - Raw row from the skills table.
127
+ * @returns {Skill} Typed skill object.
128
+ */
129
+ function rowToSkill(row) {
130
+ return {
131
+ id: row.id,
132
+ agentId: row.agent_id,
133
+ category: row.category,
134
+ filename: row.filename,
135
+ content: row.content,
136
+ sortOrder: row.sort_order,
137
+ createdAt: row.created_at,
138
+ updatedAt: row.updated_at,
139
+ };
140
+ }
141
+ /**
142
+ * Maps a raw database row to a {@link Permission} interface.
143
+ *
144
+ * @param {Record<string, unknown>} row - Raw row from the permissions table.
145
+ * @returns {Permission} Typed permission object.
146
+ */
147
+ function rowToPermission(row) {
148
+ return {
149
+ id: row.id,
150
+ agentId: row.agent_id,
151
+ allowedTools: row.allowed_tools,
152
+ deniedTools: row.denied_tools,
153
+ updatedAt: row.updated_at,
154
+ };
155
+ }
156
+ /**
157
+ * Maps a raw database row to a {@link Memory} interface.
158
+ *
159
+ * @param {Record<string, unknown>} row - Raw row from the memories table.
160
+ * @returns {Memory} Typed memory object.
161
+ */
162
+ function rowToMemory(row) {
163
+ return {
164
+ id: row.id,
165
+ agentId: row.agent_id,
166
+ type: row.type,
167
+ name: row.name,
168
+ content: row.content,
169
+ createdAt: row.created_at,
170
+ updatedAt: row.updated_at,
171
+ };
172
+ }
173
+ /**
174
+ * Maps a raw database row to a {@link Session} interface.
175
+ *
176
+ * @param {Record<string, unknown>} row - Raw row from the sessions table.
177
+ * @returns {Session} Typed session object.
178
+ */
179
+ function rowToSession(row) {
180
+ return {
181
+ id: row.id,
182
+ agentId: row.agent_id,
183
+ sessionKey: row.session_key,
184
+ claudeSessionId: row.claude_session_id,
185
+ mcpHash: row.mcp_hash,
186
+ lastActivity: row.last_activity,
187
+ };
188
+ }
189
+ // =============================================================================
190
+ // Agent queries
191
+ // =============================================================================
192
+ /**
193
+ * Fetches all agents from the database.
194
+ *
195
+ * @returns {Promise<Agent[]>} All registered agents.
196
+ */
197
+ async function getAllAgents() {
198
+ const result = await getPool().query('SELECT * FROM agents ORDER BY is_boss DESC, created_at ASC');
199
+ return result.rows.map(rowToAgent);
200
+ }
201
+ /**
202
+ * Fetches a single agent by ID.
203
+ *
204
+ * @param {string} id - Agent UUID.
205
+ * @returns {Promise<Agent | null>} The agent, or null if not found.
206
+ */
207
+ async function getAgentById(id) {
208
+ const result = await getPool().query('SELECT * FROM agents WHERE id = $1', [id]);
209
+ return result.rows.length > 0 ? rowToAgent(result.rows[0]) : null;
210
+ }
211
+ /**
212
+ * Updates the runtime status of an agent.
213
+ *
214
+ * @param {string} id - Agent UUID.
215
+ * @param {AgentStatus} status - New status value.
216
+ * @returns {Promise<void>}
217
+ */
218
+ async function updateAgentStatus(id, status) {
219
+ await getPool().query('UPDATE agents SET status = $1, updated_at = now() WHERE id = $2', [status, id]);
220
+ }
221
+ /**
222
+ * Updates the Slack bot user ID for an agent after successful auth.test.
223
+ *
224
+ * @param {string} id - Agent UUID.
225
+ * @param {string} slackBotUserId - The bot's Slack user ID (e.g., "U12345678").
226
+ * @returns {Promise<void>}
227
+ */
228
+ async function updateAgentSlackUserId(id, slackBotUserId) {
229
+ await getPool().query('UPDATE agents SET slack_bot_user_id = $1, updated_at = now() WHERE id = $2', [slackBotUserId, id]);
230
+ }
231
+ // =============================================================================
232
+ // MCP server queries
233
+ // =============================================================================
234
+ /**
235
+ * Fetches all MCP servers assigned to an agent, in catalog order.
236
+ *
237
+ * @param {string} agentId - Agent UUID.
238
+ * @returns {Promise<McpServer[]>} MCP servers assigned to this agent.
239
+ */
240
+ async function getAgentMcpServers(agentId) {
241
+ const result = await getPool().query(`SELECT m.* FROM mcp_servers m
242
+ JOIN agent_mcps am ON am.mcp_id = m.id
243
+ WHERE am.agent_id = $1 AND m.enabled = true
244
+ ORDER BY m.name`, [agentId]);
245
+ return result.rows.map(rowToMcpServer);
246
+ }
247
+ // =============================================================================
248
+ // Skills queries
249
+ // =============================================================================
250
+ /**
251
+ * Fetches all skills for an agent, ordered for CLAUDE.md compilation.
252
+ * Skills are ordered by category (alphabetical) then sort_order (ascending).
253
+ *
254
+ * @param {string} agentId - Agent UUID.
255
+ * @returns {Promise<Skill[]>} Ordered skill files for this agent.
256
+ */
257
+ async function getAgentSkills(agentId) {
258
+ const result = await getPool().query(`SELECT * FROM skills
259
+ WHERE agent_id = $1
260
+ ORDER BY category ASC, sort_order ASC, filename ASC`, [agentId]);
261
+ return result.rows.map(rowToSkill);
262
+ }
263
+ /**
264
+ * Upserts a skill for an agent.
265
+ * Conflicts on (agent_id, category, filename) update content and sort_order.
266
+ *
267
+ * @param {string} agentId - Agent UUID.
268
+ * @param {string} category - Skill category directory (e.g. `'99-corrections'`).
269
+ * @param {string} filename - Skill filename (e.g. `'corrections.md'`).
270
+ * @param {string} content - Full markdown content of the skill.
271
+ * @param {number} [sortOrder=0] - Sort order within the category.
272
+ * @returns {Promise<Skill>} The upserted skill.
273
+ */
274
+ async function upsertSkill(agentId, category, filename, content, sortOrder = 0) {
275
+ const result = await getPool().query(`INSERT INTO skills (agent_id, category, filename, content, sort_order)
276
+ VALUES ($1, $2, $3, $4, $5)
277
+ ON CONFLICT (agent_id, category, filename)
278
+ DO UPDATE SET content = EXCLUDED.content, sort_order = EXCLUDED.sort_order, updated_at = now()
279
+ RETURNING *`, [agentId, category, filename, content, sortOrder]);
280
+ return rowToSkill(result.rows[0]);
281
+ }
282
+ /**
283
+ * Deletes a skill by agent_id, category, and filename.
284
+ *
285
+ * @param {string} agentId - Agent UUID.
286
+ * @param {string} category - Skill category directory.
287
+ * @param {string} filename - Skill filename.
288
+ * @returns {Promise<boolean>} True if a row was deleted.
289
+ */
290
+ async function deleteSkill(agentId, category, filename) {
291
+ const result = await getPool().query('DELETE FROM skills WHERE agent_id = $1 AND category = $2 AND filename = $3', [agentId, category, filename]);
292
+ return (result.rowCount ?? 0) > 0;
293
+ }
294
+ // =============================================================================
295
+ // Permissions queries
296
+ // =============================================================================
297
+ /**
298
+ * Fetches the tool permissions for an agent.
299
+ *
300
+ * @param {string} agentId - Agent UUID.
301
+ * @returns {Promise<Permission | null>} The permission record, or null if not set.
302
+ */
303
+ async function getAgentPermissions(agentId) {
304
+ const result = await getPool().query('SELECT * FROM permissions WHERE agent_id = $1', [agentId]);
305
+ return result.rows.length > 0 ? rowToPermission(result.rows[0]) : null;
306
+ }
307
+ // =============================================================================
308
+ // Restrictions queries
309
+ // =============================================================================
310
+ function rowToRestriction(row) {
311
+ return {
312
+ id: row.id,
313
+ agentId: row.agent_id,
314
+ allowedChannels: row.allowed_channels ?? [],
315
+ updatedAt: row.updated_at,
316
+ };
317
+ }
318
+ /**
319
+ * Fetches the channel restrictions for an agent.
320
+ *
321
+ * @param {string} agentId - Agent UUID.
322
+ * @returns {Promise<Restriction | null>} The restriction record, or null if not configured.
323
+ */
324
+ async function getAgentRestrictions(agentId) {
325
+ const result = await getPool().query('SELECT * FROM agent_restrictions WHERE agent_id = $1', [agentId]);
326
+ return result.rows.length > 0 ? rowToRestriction(result.rows[0]) : null;
327
+ }
328
+ // =============================================================================
329
+ // Memory queries
330
+ // =============================================================================
331
+ /**
332
+ * Fetches all memory entries for an agent, ordered by type then created_at.
333
+ *
334
+ * @param {string} agentId - Agent UUID.
335
+ * @returns {Promise<Memory[]>} All memory entries for this agent.
336
+ */
337
+ async function getAgentMemories(agentId) {
338
+ const result = await getPool().query(`SELECT * FROM memories
339
+ WHERE agent_id = $1
340
+ ORDER BY type ASC, created_at ASC`, [agentId]);
341
+ return result.rows.map(rowToMemory);
342
+ }
343
+ /**
344
+ * Upserts a memory entry for an agent.
345
+ * If a memory with the same agent_id and name already exists, it is updated.
346
+ * Otherwise a new entry is created.
347
+ *
348
+ * This is called by the memory watcher when the agent writes new memory files
349
+ * to disk during a conversation.
350
+ *
351
+ * @param {string} agentId - Agent UUID.
352
+ * @param {Memory['type']} type - Memory type classification.
353
+ * @param {string} name - Unique name/identifier for this memory.
354
+ * @param {string} content - Full markdown content of the memory.
355
+ * @returns {Promise<Memory>} The upserted memory record.
356
+ */
357
+ async function upsertMemory(agentId, type, name, content) {
358
+ const result = await getPool().query(`INSERT INTO memories (agent_id, type, name, content)
359
+ VALUES ($1, $2, $3, $4)
360
+ ON CONFLICT (agent_id, (name)) DO UPDATE
361
+ SET content = EXCLUDED.content,
362
+ type = EXCLUDED.type,
363
+ updated_at = now()
364
+ RETURNING *`, [agentId, type, name, content]);
365
+ return rowToMemory(result.rows[0]);
366
+ }
367
+ /**
368
+ * Upserts a memory entry by agent_id and name (no unique constraint version).
369
+ * Uses a safe upsert pattern compatible with the current schema.
370
+ *
371
+ * @param {string} agentId - Agent UUID.
372
+ * @param {Memory['type']} type - Memory type classification.
373
+ * @param {string} name - Memory name (used as identifier).
374
+ * @param {string} content - Full markdown content.
375
+ * @returns {Promise<void>}
376
+ */
377
+ async function upsertMemorySafe(agentId, type, name, content) {
378
+ await getPool().query(`INSERT INTO memories (agent_id, type, name, content)
379
+ VALUES ($1, $2, $3, $4)
380
+ ON CONFLICT (agent_id, name) DO UPDATE
381
+ SET content = EXCLUDED.content,
382
+ type = EXCLUDED.type,
383
+ updated_at = now()`, [agentId, type, name, content]);
384
+ }
385
+ // =============================================================================
386
+ // Session queries
387
+ // =============================================================================
388
+ /**
389
+ * Fetches a conversation session by agent and session key.
390
+ *
391
+ * @param {string} agentId - Agent UUID.
392
+ * @param {string} sessionKey - Composite key: {userId}-{channelId}-{threadTs|'direct'}.
393
+ * @returns {Promise<Session | null>} The session, or null if not found.
394
+ */
395
+ async function getSession(agentId, sessionKey) {
396
+ const result = await getPool().query('SELECT * FROM sessions WHERE agent_id = $1 AND session_key = $2', [agentId, sessionKey]);
397
+ return result.rows.length > 0 ? rowToSession(result.rows[0]) : null;
398
+ }
399
+ /**
400
+ * Creates or updates a conversation session.
401
+ * Updates last_activity on conflict.
402
+ *
403
+ * @param {string} agentId - Agent UUID.
404
+ * @param {string} sessionKey - Composite session key.
405
+ * @param {string | undefined} claudeSessionId - Claude Code SDK session ID.
406
+ * @returns {Promise<Session>} The upserted session.
407
+ */
408
+ async function upsertSession(agentId, sessionKey, claudeSessionId, mcpHash) {
409
+ const result = await getPool().query(`INSERT INTO sessions (agent_id, session_key, claude_session_id, mcp_hash, last_activity)
410
+ VALUES ($1, $2, $3, $4, now())
411
+ ON CONFLICT (agent_id, session_key) DO UPDATE
412
+ SET claude_session_id = COALESCE(EXCLUDED.claude_session_id, sessions.claude_session_id),
413
+ mcp_hash = COALESCE(EXCLUDED.mcp_hash, sessions.mcp_hash),
414
+ last_activity = now()
415
+ RETURNING *`, [agentId, sessionKey, claudeSessionId ?? null, mcpHash ?? null]);
416
+ return rowToSession(result.rows[0]);
417
+ }
418
+ /**
419
+ * Deletes sessions for an agent that have been inactive for longer than maxAgeMs.
420
+ *
421
+ * @param {string} agentId - Agent UUID.
422
+ * @param {number} maxAgeMs - Maximum session age in milliseconds.
423
+ * @returns {Promise<number>} Number of sessions deleted.
424
+ */
425
+ async function cleanupStaleSessions(agentId, maxAgeMs) {
426
+ const cutoff = new Date(Date.now() - maxAgeMs);
427
+ const result = await getPool().query('DELETE FROM sessions WHERE agent_id = $1 AND last_activity < $2', [agentId, cutoff]);
428
+ return result.rowCount ?? 0;
429
+ }
430
+ // =============================================================================
431
+ // Scheduled Jobs
432
+ // =============================================================================
433
+ /**
434
+ * Returns all enabled scheduled jobs.
435
+ *
436
+ * @returns {Promise<ScheduledJob[]>}
437
+ */
438
+ async function getAllEnabledJobs() {
439
+ const r = await getPool().query('SELECT * FROM scheduled_jobs WHERE enabled = true');
440
+ return r.rows.map(row => ({
441
+ id: row.id,
442
+ agentId: row.agent_id,
443
+ name: row.name,
444
+ prompt: row.prompt,
445
+ cronSchedule: row.cron_schedule,
446
+ targetType: row.target_type,
447
+ targetId: row.target_id,
448
+ enabled: row.enabled,
449
+ createdAt: row.created_at,
450
+ updatedAt: row.updated_at,
451
+ }));
452
+ }
453
+ /**
454
+ * Inserts a new job run record with status 'running'.
455
+ *
456
+ * @param {string} jobId - The scheduled job ID.
457
+ * @returns {Promise<string>} The new run ID.
458
+ */
459
+ async function insertJobRun(jobId) {
460
+ const r = await getPool().query("INSERT INTO job_runs (job_id, status) VALUES ($1, 'running') RETURNING id", [jobId]);
461
+ return r.rows[0].id;
462
+ }
463
+ /**
464
+ * Updates a job run with final status, output, and error.
465
+ *
466
+ * @param {string} runId - The run ID.
467
+ * @param {'success' | 'error'} status - Final status.
468
+ * @param {string | null} output - Truncated output text.
469
+ * @param {string | null} error - Error message if failed.
470
+ */
471
+ async function updateJobRun(runId, status, output, error) {
472
+ await getPool().query('UPDATE job_runs SET status = $1, output = $2, error = $3, finished_at = now() WHERE id = $4', [status, output ?? null, error ?? null, runId]);
473
+ }
474
+ // =============================================================================
475
+ // Env Vars
476
+ // =============================================================================
477
+ /**
478
+ * Returns all env vars as a key→value map. Used by the runner to resolve
479
+ * envRefs in MCP stdio configs at agent start time.
480
+ *
481
+ * @returns {Promise<Record<string, string>>}
482
+ */
483
+ async function getAllEnvVarValues() {
484
+ const encKey = process.env.ENV_SECRET_KEY;
485
+ if (!encKey) {
486
+ logger_1.logger.warn('ENV_SECRET_KEY not set — env var refs will not resolve');
487
+ return {};
488
+ }
489
+ const r = await getPool().query('SELECT key, pgp_sym_decrypt(value::bytea, $1::text)::text AS value FROM env_vars', [encKey]);
490
+ return Object.fromEntries(r.rows.map((row) => [row.key, row.value]));
491
+ }
492
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Entry point for the agent runner service.
3
+ *
4
+ * Loads environment variables, validates configuration, and starts the
5
+ * AgentRunner which manages all Slack bot instances.
6
+ *
7
+ * @module runner/index
8
+ */
9
+ import 'dotenv/config';
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Entry point for the agent runner service.
4
+ *
5
+ * Loads environment variables, validates configuration, and starts the
6
+ * AgentRunner which manages all Slack bot instances.
7
+ *
8
+ * @module runner/index
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ require("dotenv/config");
12
+ const agent_runner_1 = require("./agent-runner");
13
+ const logger_1 = require("./logger");
14
+ /**
15
+ * Main entry point. Initializes and starts the AgentRunner.
16
+ *
17
+ * @returns {Promise<void>}
18
+ */
19
+ // Prevent a single bad agent from crashing the entire runner process.
20
+ // Individual agent errors are already logged and status set to 'error' in AgentRunner.
21
+ process.on('uncaughtException', (err) => {
22
+ logger_1.logger.error('Uncaught exception — continuing', { error: err.message, stack: err.stack });
23
+ });
24
+ process.on('unhandledRejection', (reason) => {
25
+ logger_1.logger.error('Unhandled rejection — continuing', { error: String(reason) });
26
+ });
27
+ async function main() {
28
+ logger_1.logger.info('Starting Slack Claude Code Agent Team — Runner Service');
29
+ if (!process.env.DATABASE_URL) {
30
+ logger_1.logger.error('DATABASE_URL is required');
31
+ process.exit(1);
32
+ }
33
+ const runner = new agent_runner_1.AgentRunner();
34
+ try {
35
+ await runner.start();
36
+ }
37
+ catch (err) {
38
+ logger_1.logger.error('Failed to start AgentRunner', { error: err.message });
39
+ process.exit(1);
40
+ }
41
+ }
42
+ main();
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAEH,yBAAuB;AACvB,iDAA6C;AAC7C,qCAAkC;AAElC;;;;GAIG;AACH,sEAAsE;AACtE,uFAAuF;AACvF,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;IACtC,eAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AAC5F,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,eAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC9E,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IACjB,eAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;IAEtE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC9B,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,0BAAW,EAAE,CAAC;IAEjC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @fileoverview Job scheduler — executes scheduled jobs via node-cron.
3
+ *
4
+ * On each cron trigger:
5
+ * 1. Finds the boss agent from the runningAgents map
6
+ * 2. Sends the job's prompt to the boss via claudeHandler.streamQuery()
7
+ * 3. Posts the result to the target Slack channel or DM
8
+ * 4. Records the run in the job_runs table
9
+ *
10
+ * @module runner/job-scheduler
11
+ */
12
+ import type { App } from '@slack/bolt';
13
+ import type { ClaudeHandler } from './claude-handler';
14
+ /** The shape of a running agent as exposed by AgentRunner. */
15
+ interface RunningAgent {
16
+ app: App;
17
+ claudeHandler: ClaudeHandler;
18
+ }
19
+ /**
20
+ * Manages cron-scheduled jobs that are executed by any running agent.
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * const scheduler = new JobScheduler((id) => agentRunner.getRunningAgent(id));
25
+ * await scheduler.start();
26
+ * ```
27
+ */
28
+ export declare class JobScheduler {
29
+ private getAgent;
30
+ private tasks;
31
+ private running;
32
+ /**
33
+ * @param {(agentId: string) => RunningAgent | undefined} getAgent - Returns a running agent by ID.
34
+ */
35
+ constructor(getAgent: (agentId: string) => RunningAgent | undefined);
36
+ /**
37
+ * Loads all enabled jobs from DB and schedules them.
38
+ */
39
+ start(): Promise<void>;
40
+ /**
41
+ * Destroys all cron tasks.
42
+ */
43
+ stop(): Promise<void>;
44
+ /**
45
+ * Reloads all jobs from DB — destroys old tasks, creates new ones.
46
+ */
47
+ reload(): Promise<void>;
48
+ /**
49
+ * Schedules a single job.
50
+ */
51
+ private scheduleJob;
52
+ /**
53
+ * Executes a single job — sends prompt to boss, posts result.
54
+ */
55
+ private executeJob;
56
+ }
57
+ export {};