crewly 1.2.4 → 1.2.6

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 (286) hide show
  1. package/LICENSE +1 -1
  2. package/config/constants.ts +4 -2
  3. package/config/roles/auditor/prompt.md +84 -0
  4. package/config/roles/orchestrator/prompt.md +62 -7
  5. package/config/runtime_scripts/runtime-config.json +5 -5
  6. package/config/skills/orchestrator/cancel-all-schedules/execute.sh +24 -0
  7. package/config/skills/orchestrator/cancel-all-schedules/instructions.md +23 -0
  8. package/config/skills/orchestrator/cancel-all-schedules/skill.json +17 -0
  9. package/config/skills/orchestrator/list-schedules/execute.sh +19 -0
  10. package/config/skills/orchestrator/list-schedules/instructions.md +24 -0
  11. package/config/skills/orchestrator/list-schedules/skill.json +12 -0
  12. package/dist/backend/backend/src/constants.d.ts +53 -13
  13. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  14. package/dist/backend/backend/src/constants.js +54 -16
  15. package/dist/backend/backend/src/constants.js.map +1 -1
  16. package/dist/backend/backend/src/controllers/auditor/auditor.controller.d.ts +37 -0
  17. package/dist/backend/backend/src/controllers/auditor/auditor.controller.d.ts.map +1 -0
  18. package/dist/backend/backend/src/controllers/auditor/auditor.controller.js +64 -0
  19. package/dist/backend/backend/src/controllers/auditor/auditor.controller.js.map +1 -0
  20. package/dist/backend/backend/src/controllers/auditor/auditor.routes.d.ts +15 -0
  21. package/dist/backend/backend/src/controllers/auditor/auditor.routes.d.ts.map +1 -0
  22. package/dist/backend/backend/src/controllers/auditor/auditor.routes.js +23 -0
  23. package/dist/backend/backend/src/controllers/auditor/auditor.routes.js.map +1 -0
  24. package/dist/backend/backend/src/controllers/cloud/admin/admin-auth.middleware.d.ts +23 -0
  25. package/dist/backend/backend/src/controllers/cloud/admin/admin-auth.middleware.d.ts.map +1 -0
  26. package/dist/backend/backend/src/controllers/cloud/admin/admin-auth.middleware.js +42 -0
  27. package/dist/backend/backend/src/controllers/cloud/admin/admin-auth.middleware.js.map +1 -0
  28. package/dist/backend/backend/src/controllers/cloud/admin/admin.controller.d.ts +56 -0
  29. package/dist/backend/backend/src/controllers/cloud/admin/admin.controller.d.ts.map +1 -0
  30. package/dist/backend/backend/src/controllers/cloud/admin/admin.controller.js +173 -0
  31. package/dist/backend/backend/src/controllers/cloud/admin/admin.controller.js.map +1 -0
  32. package/dist/backend/backend/src/controllers/cloud/admin/admin.routes.d.ts +22 -0
  33. package/dist/backend/backend/src/controllers/cloud/admin/admin.routes.d.ts.map +1 -0
  34. package/dist/backend/backend/src/controllers/cloud/admin/admin.routes.js +33 -0
  35. package/dist/backend/backend/src/controllers/cloud/admin/admin.routes.js.map +1 -0
  36. package/dist/backend/backend/src/controllers/cloud/admin/index.d.ts +7 -0
  37. package/dist/backend/backend/src/controllers/cloud/admin/index.d.ts.map +1 -0
  38. package/dist/backend/backend/src/controllers/cloud/admin/index.js +7 -0
  39. package/dist/backend/backend/src/controllers/cloud/admin/index.js.map +1 -0
  40. package/dist/backend/backend/src/controllers/cloud/auth/auth.routes.d.ts +1 -1
  41. package/dist/backend/backend/src/controllers/cloud/auth/auth.routes.js +5 -5
  42. package/dist/backend/backend/src/controllers/cloud/auth/auth.routes.js.map +1 -1
  43. package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts.map +1 -1
  44. package/dist/backend/backend/src/controllers/cloud/cloud.routes.js +0 -3
  45. package/dist/backend/backend/src/controllers/cloud/cloud.routes.js.map +1 -1
  46. package/dist/backend/backend/src/controllers/cloud/index.d.ts +0 -5
  47. package/dist/backend/backend/src/controllers/cloud/index.d.ts.map +1 -1
  48. package/dist/backend/backend/src/controllers/cloud/index.js +0 -5
  49. package/dist/backend/backend/src/controllers/cloud/index.js.map +1 -1
  50. package/dist/backend/backend/src/controllers/cloud/relay.controller.d.ts +6 -45
  51. package/dist/backend/backend/src/controllers/cloud/relay.controller.d.ts.map +1 -1
  52. package/dist/backend/backend/src/controllers/cloud/relay.controller.js +6 -165
  53. package/dist/backend/backend/src/controllers/cloud/relay.controller.js.map +1 -1
  54. package/dist/backend/backend/src/controllers/cloud/relay.routes.d.ts +5 -9
  55. package/dist/backend/backend/src/controllers/cloud/relay.routes.d.ts.map +1 -1
  56. package/dist/backend/backend/src/controllers/cloud/relay.routes.js +11 -21
  57. package/dist/backend/backend/src/controllers/cloud/relay.routes.js.map +1 -1
  58. package/dist/backend/backend/src/controllers/cloud/tasks/index.d.ts +5 -2
  59. package/dist/backend/backend/src/controllers/cloud/tasks/index.d.ts.map +1 -1
  60. package/dist/backend/backend/src/controllers/cloud/tasks/index.js +5 -2
  61. package/dist/backend/backend/src/controllers/cloud/tasks/index.js.map +1 -1
  62. package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.d.ts +6 -2
  63. package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.d.ts.map +1 -1
  64. package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.js +12 -8
  65. package/dist/backend/backend/src/controllers/marketplace/template-marketplace.routes.js.map +1 -1
  66. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  67. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +32 -4
  68. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  69. package/dist/backend/backend/src/controllers/payment/payment.controller.d.ts +16 -5
  70. package/dist/backend/backend/src/controllers/payment/payment.controller.d.ts.map +1 -1
  71. package/dist/backend/backend/src/controllers/payment/payment.controller.js +6 -6
  72. package/dist/backend/backend/src/controllers/payment/payment.controller.js.map +1 -1
  73. package/dist/backend/backend/src/controllers/payment/payment.routes.d.ts +6 -2
  74. package/dist/backend/backend/src/controllers/payment/payment.routes.d.ts.map +1 -1
  75. package/dist/backend/backend/src/controllers/payment/payment.routes.js +22 -8
  76. package/dist/backend/backend/src/controllers/payment/payment.routes.js.map +1 -1
  77. package/dist/backend/backend/src/controllers/payment/payment.types.d.ts +1 -1
  78. package/dist/backend/backend/src/controllers/payment/payment.types.d.ts.map +1 -1
  79. package/dist/backend/backend/src/controllers/payment/payment.types.js +1 -1
  80. package/dist/backend/backend/src/controllers/payment/payment.types.js.map +1 -1
  81. package/dist/backend/backend/src/controllers/request-types.d.ts +2 -2
  82. package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
  83. package/dist/backend/backend/src/controllers/system/scheduler.controller.d.ts +19 -0
  84. package/dist/backend/backend/src/controllers/system/scheduler.controller.d.ts.map +1 -1
  85. package/dist/backend/backend/src/controllers/system/scheduler.controller.js +51 -0
  86. package/dist/backend/backend/src/controllers/system/scheduler.controller.js.map +1 -1
  87. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  88. package/dist/backend/backend/src/controllers/team/team.controller.js +13 -5
  89. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  90. package/dist/backend/backend/src/controllers/template/template.controller.d.ts.map +1 -1
  91. package/dist/backend/backend/src/controllers/template/template.controller.js +2 -2
  92. package/dist/backend/backend/src/controllers/template/template.controller.js.map +1 -1
  93. package/dist/backend/backend/src/index.d.ts.map +1 -1
  94. package/dist/backend/backend/src/index.js +31 -30
  95. package/dist/backend/backend/src/index.js.map +1 -1
  96. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  97. package/dist/backend/backend/src/routes/api.routes.js +4 -12
  98. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  99. package/dist/backend/backend/src/routes/modules/log-rotation.routes.d.ts +8 -0
  100. package/dist/backend/backend/src/routes/modules/log-rotation.routes.d.ts.map +1 -0
  101. package/dist/backend/backend/src/routes/modules/log-rotation.routes.js +62 -0
  102. package/dist/backend/backend/src/routes/modules/log-rotation.routes.js.map +1 -0
  103. package/dist/backend/backend/src/routes/modules/scheduler.routes.d.ts.map +1 -1
  104. package/dist/backend/backend/src/routes/modules/scheduler.routes.js +2 -0
  105. package/dist/backend/backend/src/routes/modules/scheduler.routes.js.map +1 -1
  106. package/dist/backend/backend/src/scripts/run-log-rotation.d.ts +3 -0
  107. package/dist/backend/backend/src/scripts/run-log-rotation.d.ts.map +1 -0
  108. package/dist/backend/backend/src/scripts/run-log-rotation.js +31 -0
  109. package/dist/backend/backend/src/scripts/run-log-rotation.js.map +1 -0
  110. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +10 -0
  111. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  112. package/dist/backend/backend/src/services/agent/agent-registration.service.js +85 -1
  113. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  114. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.d.ts +150 -0
  115. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.d.ts.map +1 -0
  116. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js +307 -0
  117. package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js.map +1 -0
  118. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +105 -0
  119. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +1 -0
  120. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +199 -0
  121. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +1 -0
  122. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts +68 -0
  123. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts.map +1 -0
  124. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js +131 -0
  125. package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js.map +1 -0
  126. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts +29 -0
  127. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts.map +1 -0
  128. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js +229 -0
  129. package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js.map +1 -0
  130. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts +127 -0
  131. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +1 -0
  132. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +242 -0
  133. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +1 -0
  134. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts +95 -0
  135. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -0
  136. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +130 -0
  137. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -0
  138. package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts +14 -0
  139. package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts.map +1 -0
  140. package/dist/backend/backend/src/services/agent/crewly-agent/index.js +14 -0
  141. package/dist/backend/backend/src/services/agent/crewly-agent/index.js.map +1 -0
  142. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +57 -0
  143. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +1 -0
  144. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +93 -0
  145. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +1 -0
  146. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts +13 -0
  147. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts.map +1 -0
  148. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js +91 -0
  149. package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js.map +1 -0
  150. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +29 -0
  151. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +1 -0
  152. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +519 -0
  153. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +1 -0
  154. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +159 -0
  155. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -0
  156. package/dist/backend/backend/src/services/agent/crewly-agent/types.js +63 -0
  157. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -0
  158. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +56 -1
  159. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  160. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +273 -215
  161. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  162. package/dist/backend/backend/src/services/agent/runtime-service.factory.js +8 -8
  163. package/dist/backend/backend/src/services/agent/runtime-service.factory.js.map +1 -1
  164. package/dist/backend/backend/src/services/chat/chat.service.d.ts +7 -1
  165. package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -1
  166. package/dist/backend/backend/src/services/chat/chat.service.js +14 -5
  167. package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -1
  168. package/dist/backend/backend/src/services/cloud/admin-seed.service.d.ts +18 -0
  169. package/dist/backend/backend/src/services/cloud/admin-seed.service.d.ts.map +1 -0
  170. package/dist/backend/backend/src/services/cloud/admin-seed.service.js +50 -0
  171. package/dist/backend/backend/src/services/cloud/admin-seed.service.js.map +1 -0
  172. package/dist/backend/backend/src/services/cloud/cloud-features.d.ts +19 -0
  173. package/dist/backend/backend/src/services/cloud/cloud-features.d.ts.map +1 -0
  174. package/dist/backend/backend/src/services/cloud/cloud-features.js +23 -0
  175. package/dist/backend/backend/src/services/cloud/cloud-features.js.map +1 -0
  176. package/dist/backend/backend/src/services/cloud/cloud-task-processor.service.d.ts +3 -3
  177. package/dist/backend/backend/src/services/cloud/cloud-task-processor.service.d.ts.map +1 -1
  178. package/dist/backend/backend/src/services/cloud/cloud-task-processor.service.js +10 -6
  179. package/dist/backend/backend/src/services/cloud/cloud-task-processor.service.js.map +1 -1
  180. package/dist/backend/backend/src/services/cloud/mongodb.service.d.ts +45 -0
  181. package/dist/backend/backend/src/services/cloud/mongodb.service.d.ts.map +1 -0
  182. package/dist/backend/backend/src/services/cloud/mongodb.service.js +76 -0
  183. package/dist/backend/backend/src/services/cloud/mongodb.service.js.map +1 -0
  184. package/dist/backend/backend/src/services/cloud/relay-server.service.d.ts +0 -2
  185. package/dist/backend/backend/src/services/cloud/relay-server.service.d.ts.map +1 -1
  186. package/dist/backend/backend/src/services/cloud/relay-server.service.js +7 -36
  187. package/dist/backend/backend/src/services/cloud/relay-server.service.js.map +1 -1
  188. package/dist/backend/backend/src/services/continuation/continuation.service.d.ts.map +1 -1
  189. package/dist/backend/backend/src/services/continuation/continuation.service.js +5 -10
  190. package/dist/backend/backend/src/services/continuation/continuation.service.js.map +1 -1
  191. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts +10 -2
  192. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  193. package/dist/backend/backend/src/services/event-bus/event-bus.service.js +47 -12
  194. package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  195. package/dist/backend/backend/src/services/mcp-server.js +1 -1
  196. package/dist/backend/backend/src/services/mcp-server.js.map +1 -1
  197. package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts.map +1 -1
  198. package/dist/backend/backend/src/services/messaging/message-queue.service.js +1 -0
  199. package/dist/backend/backend/src/services/messaging/message-queue.service.js.map +1 -1
  200. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  201. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +22 -4
  202. package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  203. package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.d.ts.map +1 -1
  204. package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.js +6 -0
  205. package/dist/backend/backend/src/services/orchestrator/orchestrator-restart.service.js.map +1 -1
  206. package/dist/backend/backend/src/services/payment/stripe.service.d.ts +4 -43
  207. package/dist/backend/backend/src/services/payment/stripe.service.d.ts.map +1 -1
  208. package/dist/backend/backend/src/services/payment/stripe.service.js +56 -180
  209. package/dist/backend/backend/src/services/payment/stripe.service.js.map +1 -1
  210. package/dist/backend/backend/src/services/session/index.d.ts +2 -0
  211. package/dist/backend/backend/src/services/session/index.d.ts.map +1 -1
  212. package/dist/backend/backend/src/services/session/index.js +2 -0
  213. package/dist/backend/backend/src/services/session/index.js.map +1 -1
  214. package/dist/backend/backend/src/services/session/log-rotation.service.d.ts +163 -0
  215. package/dist/backend/backend/src/services/session/log-rotation.service.d.ts.map +1 -0
  216. package/dist/backend/backend/src/services/session/log-rotation.service.js +362 -0
  217. package/dist/backend/backend/src/services/session/log-rotation.service.js.map +1 -0
  218. package/dist/backend/backend/src/services/settings/settings.service.js +1 -1
  219. package/dist/backend/backend/src/services/settings/settings.service.js.map +1 -1
  220. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +11 -0
  221. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  222. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +83 -1
  223. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  224. package/dist/backend/backend/src/services/template/template.service.d.ts +9 -44
  225. package/dist/backend/backend/src/services/template/template.service.d.ts.map +1 -1
  226. package/dist/backend/backend/src/services/template/template.service.js +7 -80
  227. package/dist/backend/backend/src/services/template/template.service.js.map +1 -1
  228. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts +35 -0
  229. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
  230. package/dist/backend/backend/src/services/workflow/scheduler.service.js +133 -0
  231. package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
  232. package/dist/backend/backend/src/types/chat.types.d.ts +1 -1
  233. package/dist/backend/backend/src/types/chat.types.d.ts.map +1 -1
  234. package/dist/backend/backend/src/types/chat.types.js +21 -17
  235. package/dist/backend/backend/src/types/chat.types.js.map +1 -1
  236. package/dist/backend/backend/src/types/event-bus.types.d.ts +31 -0
  237. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  238. package/dist/backend/backend/src/types/event-bus.types.js +50 -0
  239. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  240. package/dist/backend/backend/src/types/index.d.ts +1 -1
  241. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  242. package/dist/backend/backend/src/types/messaging.types.d.ts +4 -0
  243. package/dist/backend/backend/src/types/messaging.types.d.ts.map +1 -1
  244. package/dist/backend/backend/src/types/messaging.types.js.map +1 -1
  245. package/dist/backend/backend/src/types/settings.types.d.ts +1 -1
  246. package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
  247. package/dist/backend/backend/src/types/settings.types.js +4 -4
  248. package/dist/backend/backend/src/types/settings.types.js.map +1 -1
  249. package/dist/backend/backend/src/types/team-template.types.d.ts +2 -2
  250. package/dist/backend/backend/src/types/team-template.types.d.ts.map +1 -1
  251. package/dist/backend/backend/src/types/team-template.types.js +1 -1
  252. package/dist/backend/backend/src/types/team-template.types.js.map +1 -1
  253. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts +4 -4
  254. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
  255. package/dist/backend/backend/src/websocket/terminal.gateway.js +9 -6
  256. package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
  257. package/dist/backend/config/constants.d.ts +4 -2
  258. package/dist/backend/config/constants.d.ts.map +1 -1
  259. package/dist/backend/config/constants.js +4 -2
  260. package/dist/backend/config/constants.js.map +1 -1
  261. package/dist/cli/backend/src/constants.d.ts +53 -13
  262. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  263. package/dist/cli/backend/src/constants.js +54 -16
  264. package/dist/cli/backend/src/constants.js.map +1 -1
  265. package/dist/cli/backend/src/services/mcp-server.js +1 -1
  266. package/dist/cli/backend/src/services/mcp-server.js.map +1 -1
  267. package/dist/cli/backend/src/types/chat.types.d.ts +1 -1
  268. package/dist/cli/backend/src/types/chat.types.d.ts.map +1 -1
  269. package/dist/cli/backend/src/types/chat.types.js +21 -17
  270. package/dist/cli/backend/src/types/chat.types.js.map +1 -1
  271. package/dist/cli/backend/src/types/index.d.ts +1 -1
  272. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  273. package/dist/cli/backend/src/types/settings.types.d.ts +1 -1
  274. package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
  275. package/dist/cli/backend/src/types/settings.types.js +4 -4
  276. package/dist/cli/backend/src/types/settings.types.js.map +1 -1
  277. package/dist/cli/config/constants.d.ts +4 -2
  278. package/dist/cli/config/constants.d.ts.map +1 -1
  279. package/dist/cli/config/constants.js +4 -2
  280. package/dist/cli/config/constants.js.map +1 -1
  281. package/frontend/dist/assets/index-3558d1a2.js +4919 -0
  282. package/frontend/dist/assets/index-4c4dcc31.css +33 -0
  283. package/frontend/dist/index.html +2 -2
  284. package/package.json +15 -9
  285. package/frontend/dist/assets/index-510ab719.css +0 -33
  286. package/frontend/dist/assets/index-935cd846.js +0 -4961
@@ -0,0 +1,95 @@
1
+ /**
2
+ * In-Process Log Buffer
3
+ *
4
+ * Ring buffer that captures structured output from in-process Crewly Agent
5
+ * runtimes. Provides the same interface as PTY terminal capture so the
6
+ * frontend Side Terminal panel can display crewly-agent activity.
7
+ *
8
+ * @module services/agent/crewly-agent/in-process-log-buffer
9
+ */
10
+ /**
11
+ * Single log entry from an in-process agent session.
12
+ */
13
+ export interface LogEntry {
14
+ /** ISO timestamp */
15
+ timestamp: string;
16
+ /** Log level */
17
+ level: 'info' | 'debug' | 'warn' | 'error';
18
+ /** Log message */
19
+ message: string;
20
+ }
21
+ /**
22
+ * Singleton buffer that captures in-process agent output.
23
+ *
24
+ * Used by CrewlyAgentRuntimeService to log tool calls, responses,
25
+ * and errors. The terminal controller reads from this buffer when
26
+ * the requested session is an in-process agent (no PTY).
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const buffer = InProcessLogBuffer.getInstance();
31
+ * buffer.append('crewly-assistant', 'info', 'Calling get_team_status tool...');
32
+ * const output = buffer.capture('crewly-assistant', 50);
33
+ * ```
34
+ */
35
+ export declare class InProcessLogBuffer {
36
+ private static instance;
37
+ private sessions;
38
+ /**
39
+ * Get the singleton instance.
40
+ *
41
+ * @returns The shared InProcessLogBuffer instance
42
+ */
43
+ static getInstance(): InProcessLogBuffer;
44
+ /**
45
+ * Reset the singleton (for testing).
46
+ */
47
+ static resetInstance(): void;
48
+ /**
49
+ * Append a log entry for a session.
50
+ *
51
+ * @param sessionName - In-process agent session name
52
+ * @param level - Log level
53
+ * @param message - Log message text
54
+ */
55
+ append(sessionName: string, level: LogEntry['level'], message: string): void;
56
+ /**
57
+ * Check if a session has any log entries.
58
+ *
59
+ * @param sessionName - Session to check
60
+ * @returns True if the session has been registered with at least one entry
61
+ */
62
+ hasSession(sessionName: string): boolean;
63
+ /**
64
+ * Capture recent output from an in-process session, formatted like
65
+ * terminal output for frontend compatibility.
66
+ *
67
+ * @param sessionName - Session to capture from
68
+ * @param lines - Maximum number of lines to return
69
+ * @returns Formatted output string (one log entry per line)
70
+ */
71
+ capture(sessionName: string, lines?: number): string;
72
+ /**
73
+ * Register a session (creates empty entry list).
74
+ *
75
+ * @param sessionName - Session to register
76
+ */
77
+ registerSession(sessionName: string): void;
78
+ /**
79
+ * Remove a session's log buffer.
80
+ *
81
+ * @param sessionName - Session to remove
82
+ */
83
+ removeSession(sessionName: string): void;
84
+ /**
85
+ * Get all registered in-process session names.
86
+ *
87
+ * @returns Array of session names
88
+ */
89
+ getSessionNames(): string[];
90
+ /**
91
+ * Clear all sessions (for testing).
92
+ */
93
+ clear(): void;
94
+ }
95
+ //# sourceMappingURL=in-process-log-buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-process-log-buffer.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/in-process-log-buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB;IAChB,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD;;;;;;;;;;;;;GAaG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAiC;IAEjD;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAOxC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAI5B;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAgB5E;;;;;OAKG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIxC;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,MAAM;IAajD;;;;OAIG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAM1C;;;;OAIG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIxC;;;;OAIG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * In-Process Log Buffer
3
+ *
4
+ * Ring buffer that captures structured output from in-process Crewly Agent
5
+ * runtimes. Provides the same interface as PTY terminal capture so the
6
+ * frontend Side Terminal panel can display crewly-agent activity.
7
+ *
8
+ * @module services/agent/crewly-agent/in-process-log-buffer
9
+ */
10
+ /** Maximum number of entries to keep per session */
11
+ const MAX_ENTRIES_PER_SESSION = 500;
12
+ /**
13
+ * Singleton buffer that captures in-process agent output.
14
+ *
15
+ * Used by CrewlyAgentRuntimeService to log tool calls, responses,
16
+ * and errors. The terminal controller reads from this buffer when
17
+ * the requested session is an in-process agent (no PTY).
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const buffer = InProcessLogBuffer.getInstance();
22
+ * buffer.append('crewly-assistant', 'info', 'Calling get_team_status tool...');
23
+ * const output = buffer.capture('crewly-assistant', 50);
24
+ * ```
25
+ */
26
+ export class InProcessLogBuffer {
27
+ static instance = null;
28
+ sessions = new Map();
29
+ /**
30
+ * Get the singleton instance.
31
+ *
32
+ * @returns The shared InProcessLogBuffer instance
33
+ */
34
+ static getInstance() {
35
+ if (!InProcessLogBuffer.instance) {
36
+ InProcessLogBuffer.instance = new InProcessLogBuffer();
37
+ }
38
+ return InProcessLogBuffer.instance;
39
+ }
40
+ /**
41
+ * Reset the singleton (for testing).
42
+ */
43
+ static resetInstance() {
44
+ InProcessLogBuffer.instance = null;
45
+ }
46
+ /**
47
+ * Append a log entry for a session.
48
+ *
49
+ * @param sessionName - In-process agent session name
50
+ * @param level - Log level
51
+ * @param message - Log message text
52
+ */
53
+ append(sessionName, level, message) {
54
+ if (!this.sessions.has(sessionName)) {
55
+ this.sessions.set(sessionName, []);
56
+ }
57
+ const entries = this.sessions.get(sessionName);
58
+ entries.push({
59
+ timestamp: new Date().toISOString(),
60
+ level,
61
+ message,
62
+ });
63
+ // Ring buffer — drop oldest entries
64
+ if (entries.length > MAX_ENTRIES_PER_SESSION) {
65
+ entries.splice(0, entries.length - MAX_ENTRIES_PER_SESSION);
66
+ }
67
+ }
68
+ /**
69
+ * Check if a session has any log entries.
70
+ *
71
+ * @param sessionName - Session to check
72
+ * @returns True if the session has been registered with at least one entry
73
+ */
74
+ hasSession(sessionName) {
75
+ return this.sessions.has(sessionName);
76
+ }
77
+ /**
78
+ * Capture recent output from an in-process session, formatted like
79
+ * terminal output for frontend compatibility.
80
+ *
81
+ * @param sessionName - Session to capture from
82
+ * @param lines - Maximum number of lines to return
83
+ * @returns Formatted output string (one log entry per line)
84
+ */
85
+ capture(sessionName, lines = 100) {
86
+ const entries = this.sessions.get(sessionName);
87
+ if (!entries || entries.length === 0) {
88
+ return '[crewly-agent] No output yet';
89
+ }
90
+ const slice = entries.slice(-lines);
91
+ return slice.map(e => {
92
+ const ts = e.timestamp.substring(11, 23); // HH:MM:SS.mmm
93
+ const prefix = e.level === 'error' ? 'ERROR' : e.level === 'warn' ? 'WARN' : e.level === 'debug' ? 'DEBUG' : '';
94
+ return prefix ? `[${ts}] ${prefix}: ${e.message}` : `[${ts}] ${e.message}`;
95
+ }).join('\n');
96
+ }
97
+ /**
98
+ * Register a session (creates empty entry list).
99
+ *
100
+ * @param sessionName - Session to register
101
+ */
102
+ registerSession(sessionName) {
103
+ if (!this.sessions.has(sessionName)) {
104
+ this.sessions.set(sessionName, []);
105
+ }
106
+ }
107
+ /**
108
+ * Remove a session's log buffer.
109
+ *
110
+ * @param sessionName - Session to remove
111
+ */
112
+ removeSession(sessionName) {
113
+ this.sessions.delete(sessionName);
114
+ }
115
+ /**
116
+ * Get all registered in-process session names.
117
+ *
118
+ * @returns Array of session names
119
+ */
120
+ getSessionNames() {
121
+ return Array.from(this.sessions.keys());
122
+ }
123
+ /**
124
+ * Clear all sessions (for testing).
125
+ */
126
+ clear() {
127
+ this.sessions.clear();
128
+ }
129
+ }
130
+ //# sourceMappingURL=in-process-log-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-process-log-buffer.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/in-process-log-buffer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Crewly Agent Runtime — Barrel Export
3
+ *
4
+ * @module services/agent/crewly-agent
5
+ */
6
+ export { AgentRunnerService } from './agent-runner.service.js';
7
+ export { CrewlyAgentRuntimeService } from './crewly-agent-runtime.service.js';
8
+ export { CrewlyApiClient } from './api-client.js';
9
+ export { ModelManager } from './model-manager.js';
10
+ export { InProcessLogBuffer, type LogEntry } from './in-process-log-buffer.js';
11
+ export { createTools, getToolNames } from './tool-registry.js';
12
+ export { createAuditorTools, getAuditorToolNames } from './auditor-tools.js';
13
+ export { type ModelProvider, type ModelConfig, type ConversationState, type CrewlyAgentConfig, type AgentRunResult, type ToolCallRecord, type ApiCallResult, MODEL_PROVIDERS, CREWLY_AGENT_DEFAULTS, isModelProvider, isModelConfig, } from './types.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,KAAK,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,aAAa,GACd,MAAM,YAAY,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Crewly Agent Runtime — Barrel Export
3
+ *
4
+ * @module services/agent/crewly-agent
5
+ */
6
+ export { AgentRunnerService } from './agent-runner.service.js';
7
+ export { CrewlyAgentRuntimeService } from './crewly-agent-runtime.service.js';
8
+ export { CrewlyApiClient } from './api-client.js';
9
+ export { ModelManager } from './model-manager.js';
10
+ export { InProcessLogBuffer } from './in-process-log-buffer.js';
11
+ export { createTools, getToolNames } from './tool-registry.js';
12
+ export { createAuditorTools, getAuditorToolNames } from './auditor-tools.js';
13
+ export { MODEL_PROVIDERS, CREWLY_AGENT_DEFAULTS, isModelProvider, isModelConfig, } from './types.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAiB,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAQL,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,aAAa,GACd,MAAM,YAAY,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Crewly Agent Model Manager
3
+ *
4
+ * Multi-provider model factory that creates AI SDK model instances
5
+ * from configuration. Supports Anthropic, OpenAI, and Google providers.
6
+ *
7
+ * API keys are read from environment variables by the provider SDKs:
8
+ * - ANTHROPIC_API_KEY
9
+ * - OPENAI_API_KEY
10
+ * - GOOGLE_GENERATIVE_AI_API_KEY
11
+ *
12
+ * @module services/agent/crewly-agent/model-manager
13
+ */
14
+ import type { LanguageModel } from 'ai';
15
+ import { type ModelConfig, type ModelProvider } from './types.js';
16
+ /**
17
+ * Factory for creating AI SDK language model instances from configuration.
18
+ *
19
+ * Uses dynamic imports to avoid loading provider SDKs that aren't needed,
20
+ * keeping the startup cost minimal when only one provider is used.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const manager = new ModelManager();
25
+ * const model = await manager.getModel({ provider: 'anthropic', modelId: 'claude-sonnet-4-20250514' });
26
+ * ```
27
+ */
28
+ export declare class ModelManager {
29
+ /** Cached provider module references to avoid re-importing */
30
+ private providerCache;
31
+ /**
32
+ * Get an AI SDK language model instance for the given configuration.
33
+ *
34
+ * @param config - Model configuration specifying provider and model ID
35
+ * @returns AI SDK LanguageModel instance ready for use with generateText
36
+ * @throws Error if the provider is unknown or the SDK is not installed
37
+ */
38
+ getModel(config?: ModelConfig): Promise<LanguageModel>;
39
+ /**
40
+ * Get provider function, using cache for repeated calls.
41
+ *
42
+ * @param provider - Provider name
43
+ * @returns Function that creates a model from a model ID string
44
+ */
45
+ private getProviderFunction;
46
+ /**
47
+ * Check which providers have API keys configured in the environment.
48
+ *
49
+ * @returns Object indicating which providers are available
50
+ */
51
+ getAvailableProviders(): Record<ModelProvider, boolean>;
52
+ /**
53
+ * Clear the provider cache (useful for testing or reconfiguration).
54
+ */
55
+ clearCache(): void;
56
+ }
57
+ //# sourceMappingURL=model-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-manager.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/model-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAyB,MAAM,YAAY,CAAC;AAEzF;;;;;;;;;;;GAWG;AACH,qBAAa,YAAY;IACvB,8DAA8D;IAC9D,OAAO,CAAC,aAAa,CAAgE;IAErF;;;;;;OAMG;IACG,QAAQ,CAAC,MAAM,GAAE,WAAiD,GAAG,OAAO,CAAC,aAAa,CAAC;IAKjG;;;;;OAKG;YACW,mBAAmB;IA8BjC;;;;OAIG;IACH,qBAAqB,IAAI,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC;IAQvD;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Crewly Agent Model Manager
3
+ *
4
+ * Multi-provider model factory that creates AI SDK model instances
5
+ * from configuration. Supports Anthropic, OpenAI, and Google providers.
6
+ *
7
+ * API keys are read from environment variables by the provider SDKs:
8
+ * - ANTHROPIC_API_KEY
9
+ * - OPENAI_API_KEY
10
+ * - GOOGLE_GENERATIVE_AI_API_KEY
11
+ *
12
+ * @module services/agent/crewly-agent/model-manager
13
+ */
14
+ import { CREWLY_AGENT_DEFAULTS } from './types.js';
15
+ /**
16
+ * Factory for creating AI SDK language model instances from configuration.
17
+ *
18
+ * Uses dynamic imports to avoid loading provider SDKs that aren't needed,
19
+ * keeping the startup cost minimal when only one provider is used.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const manager = new ModelManager();
24
+ * const model = await manager.getModel({ provider: 'anthropic', modelId: 'claude-sonnet-4-20250514' });
25
+ * ```
26
+ */
27
+ export class ModelManager {
28
+ /** Cached provider module references to avoid re-importing */
29
+ providerCache = new Map();
30
+ /**
31
+ * Get an AI SDK language model instance for the given configuration.
32
+ *
33
+ * @param config - Model configuration specifying provider and model ID
34
+ * @returns AI SDK LanguageModel instance ready for use with generateText
35
+ * @throws Error if the provider is unknown or the SDK is not installed
36
+ */
37
+ async getModel(config = CREWLY_AGENT_DEFAULTS.DEFAULT_MODEL) {
38
+ const providerFn = await this.getProviderFunction(config.provider);
39
+ return providerFn(config.modelId);
40
+ }
41
+ /**
42
+ * Get provider function, using cache for repeated calls.
43
+ *
44
+ * @param provider - Provider name
45
+ * @returns Function that creates a model from a model ID string
46
+ */
47
+ async getProviderFunction(provider) {
48
+ const cached = this.providerCache.get(provider);
49
+ if (cached)
50
+ return cached;
51
+ let providerFn;
52
+ switch (provider) {
53
+ case 'anthropic': {
54
+ const { anthropic } = await import('@ai-sdk/anthropic');
55
+ providerFn = (modelId) => anthropic(modelId);
56
+ break;
57
+ }
58
+ case 'openai': {
59
+ const { openai } = await import('@ai-sdk/openai');
60
+ providerFn = (modelId) => openai(modelId);
61
+ break;
62
+ }
63
+ case 'google': {
64
+ const { google } = await import('@ai-sdk/google');
65
+ providerFn = (modelId) => google(modelId);
66
+ break;
67
+ }
68
+ default:
69
+ throw new Error(`Unknown model provider: ${provider}`);
70
+ }
71
+ this.providerCache.set(provider, providerFn);
72
+ return providerFn;
73
+ }
74
+ /**
75
+ * Check which providers have API keys configured in the environment.
76
+ *
77
+ * @returns Object indicating which providers are available
78
+ */
79
+ getAvailableProviders() {
80
+ return {
81
+ anthropic: !!process.env.ANTHROPIC_API_KEY,
82
+ openai: !!process.env.OPENAI_API_KEY,
83
+ google: !!process.env.GOOGLE_GENERATIVE_AI_API_KEY || !!process.env.GEMINI_API_KEY,
84
+ };
85
+ }
86
+ /**
87
+ * Clear the provider cache (useful for testing or reconfiguration).
88
+ */
89
+ clearCache() {
90
+ this.providerCache.clear();
91
+ }
92
+ }
93
+ //# sourceMappingURL=model-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-manager.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/model-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAwC,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEzF;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,YAAY;IACvB,8DAA8D;IACtD,aAAa,GAAG,IAAI,GAAG,EAAqD,CAAC;IAErF;;;;;;OAMG;IACH,KAAK,CAAC,QAAQ,CAAC,SAAsB,qBAAqB,CAAC,aAAa;QACtE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnE,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,mBAAmB,CAAC,QAAuB;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAE1B,IAAI,UAA8C,CAAC;QAEnD,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;gBACxD,UAAU,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBACrD,MAAM;YACR,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBAClD,UAAU,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAClD,MAAM;YACR,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBAClD,UAAU,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAClD,MAAM;YACR,CAAC;YACD;gBACE,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC7C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACH,qBAAqB;QACnB,OAAO;YACL,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB;YAC1C,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc;YACpC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc;SACnF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Smoke Test — Crewly Agent Runtime end-to-end with Gemini API
3
+ *
4
+ * Verifies the full pipeline: CrewlyAgentRuntimeService → AgentRunnerService →
5
+ * AI SDK generateText → Gemini model → tool calls → response.
6
+ *
7
+ * Usage:
8
+ * npx tsx backend/src/services/agent/crewly-agent/smoke-test.ts
9
+ *
10
+ * Requires: GEMINI_API_KEY or GOOGLE_GENERATIVE_AI_API_KEY env var
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=smoke-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smoke-test.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/smoke-test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Smoke Test — Crewly Agent Runtime end-to-end with Gemini API
3
+ *
4
+ * Verifies the full pipeline: CrewlyAgentRuntimeService → AgentRunnerService →
5
+ * AI SDK generateText → Gemini model → tool calls → response.
6
+ *
7
+ * Usage:
8
+ * npx tsx backend/src/services/agent/crewly-agent/smoke-test.ts
9
+ *
10
+ * Requires: GEMINI_API_KEY or GOOGLE_GENERATIVE_AI_API_KEY env var
11
+ */
12
+ import { CrewlyAgentRuntimeService } from './crewly-agent-runtime.service.js';
13
+ // Bridge GEMINI_API_KEY → GOOGLE_GENERATIVE_AI_API_KEY if needed
14
+ if (!process.env.GOOGLE_GENERATIVE_AI_API_KEY && process.env.GEMINI_API_KEY) {
15
+ process.env.GOOGLE_GENERATIVE_AI_API_KEY = process.env.GEMINI_API_KEY;
16
+ }
17
+ const API_KEY = process.env.GOOGLE_GENERATIVE_AI_API_KEY;
18
+ if (!API_KEY) {
19
+ console.error('ERROR: No Google AI API key found. Set GEMINI_API_KEY or GOOGLE_GENERATIVE_AI_API_KEY.');
20
+ process.exit(1);
21
+ }
22
+ async function main() {
23
+ console.log('=== Crewly Agent Runtime Smoke Test ===\n');
24
+ console.log('Provider: google');
25
+ console.log('Model: gemini-2.5-flash');
26
+ console.log('API Key: ...%s', API_KEY.slice(-6));
27
+ console.log();
28
+ // Create a minimal mock SessionCommandHelper (not used by in-process runtime)
29
+ const mockSessionHelper = {
30
+ capturePane: () => '',
31
+ sendMessage: async () => { },
32
+ clearCurrentCommandLine: async () => { },
33
+ };
34
+ const projectRoot = process.cwd();
35
+ const runtime = new CrewlyAgentRuntimeService(mockSessionHelper, projectRoot);
36
+ try {
37
+ // Step 1: Initialize with Gemini
38
+ console.log('[1/4] Initializing runtime...');
39
+ await runtime.initializeInProcess('smoke-test-session', {
40
+ model: { provider: 'google', modelId: 'gemini-2.5-flash' },
41
+ maxSteps: 5,
42
+ systemPrompt: `You are a test agent. When asked to check team status, you MUST call the get_team_status tool. After getting the result, summarize it briefly. Always use tools when available.`,
43
+ });
44
+ console.log(' -> Runtime ready:', runtime.isReady());
45
+ console.log(' -> Session:', runtime.getSessionName());
46
+ if (!runtime.isReady()) {
47
+ throw new Error('Runtime failed to initialize');
48
+ }
49
+ // Step 2: Send a message that should trigger the get_team_status tool
50
+ console.log('\n[2/4] Sending message: "Check team status"...');
51
+ const result = await runtime.handleMessage('Check the current team status and report what you find.');
52
+ // Step 3: Verify results
53
+ console.log('\n[3/4] Results:');
54
+ console.log(' -> Response text:', result.text?.substring(0, 200) || '(empty)');
55
+ console.log(' -> Steps:', result.steps);
56
+ console.log(' -> Tool calls:', result.toolCalls.length);
57
+ console.log(' -> Usage:', JSON.stringify(result.usage));
58
+ console.log(' -> Finish reason:', result.finishReason);
59
+ if (result.toolCalls.length > 0) {
60
+ console.log('\n Tool call details:');
61
+ for (const tc of result.toolCalls) {
62
+ console.log(` - ${tc.toolName}(${JSON.stringify(tc.args)})`);
63
+ console.log(` Result: ${JSON.stringify(tc.result)?.substring(0, 150)}`);
64
+ }
65
+ }
66
+ // Step 4: Verify model used the tool
67
+ const usedGetTeamStatus = result.toolCalls.some(tc => tc.toolName === 'get_team_status');
68
+ console.log('\n[4/4] Verification:');
69
+ console.log(' -> Model called get_team_status:', usedGetTeamStatus);
70
+ console.log(' -> Got text response:', !!result.text);
71
+ console.log(' -> Steps > 0:', result.steps > 0);
72
+ const passed = result.text && result.steps > 0;
73
+ console.log('\n=== SMOKE TEST %s ===', passed ? 'PASSED' : 'FAILED');
74
+ if (!passed) {
75
+ process.exit(1);
76
+ }
77
+ }
78
+ catch (error) {
79
+ console.error('\n=== SMOKE TEST FAILED ===');
80
+ console.error('Error:', error instanceof Error ? error.message : String(error));
81
+ if (error instanceof Error && error.stack) {
82
+ console.error('\nStack:', error.stack);
83
+ }
84
+ process.exit(1);
85
+ }
86
+ finally {
87
+ runtime.shutdown();
88
+ }
89
+ }
90
+ main();
91
+ //# sourceMappingURL=smoke-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smoke-test.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/smoke-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Crewly Agent Tool Registry
3
+ *
4
+ * Defines all AI SDK tools available to the Crewly Agent runtime.
5
+ * Each tool maps to a Crewly REST API endpoint, replacing the bash
6
+ * skill scripts used by PTY-based runtimes.
7
+ *
8
+ * @module services/agent/crewly-agent/tool-registry
9
+ */
10
+ import type { CrewlyApiClient } from './api-client.js';
11
+ import type { ToolDefinition } from './types.js';
12
+ /**
13
+ * Create the complete set of AI SDK tools for the Crewly Agent.
14
+ *
15
+ * Each tool's execute function calls the Crewly REST API directly
16
+ * via the provided API client, bypassing the bash script layer.
17
+ *
18
+ * @param client - API client instance for making REST calls
19
+ * @param sessionName - Agent session name for identity context
20
+ * @returns Object of named tools ready to pass to generateText
21
+ */
22
+ export declare function createTools(client: CrewlyApiClient, sessionName: string): Record<string, ToolDefinition>;
23
+ /**
24
+ * Get the list of tool names available in the registry.
25
+ *
26
+ * @returns Array of tool name strings
27
+ */
28
+ export declare function getToolNames(): string[];
29
+ //# sourceMappingURL=tool-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/tool-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAgfxG;AA2BD;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAQvC"}