crewly 1.6.0 → 1.6.2

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 (448) hide show
  1. package/config/roles/orchestrator/fragments/role-boundary.md +4 -1
  2. package/config/roles/orchestrator/prompt.md +53 -0
  3. package/config/roles/orchestrator/soul.md +47 -10
  4. package/config/skills/_common/lib.sh +28 -0
  5. package/config/skills/agent/core/cancel-followup/execute.sh +0 -19
  6. package/config/skills/agent/core/get-my-active-work/SKILL.md +101 -0
  7. package/config/skills/agent/core/get-my-active-work/execute.sh +122 -0
  8. package/config/skills/agent/core/list-my-followups/execute.sh +0 -19
  9. package/config/skills/agent/core/record-learning/SKILL.md +29 -0
  10. package/config/skills/agent/core/reply-channel/SKILL.md +41 -0
  11. package/config/skills/agent/core/reply-channel/execute.sh +165 -0
  12. package/config/skills/agent/core/reply-channel/execute.test.sh +148 -0
  13. package/config/skills/agent/core/schedule-followup/execute.sh +0 -19
  14. package/config/skills/agent/core/watch-for-event/execute.sh +0 -19
  15. package/config/skills/agent/remote-browser/execute.sh +296 -14
  16. package/config/skills/agent/remote-browser/execute.test.sh +482 -0
  17. package/config/skills/orchestrator/credential-manager/execute.test.sh +88 -0
  18. package/config/skills/orchestrator/send-message/SKILL.md +30 -7
  19. package/config/skills/orchestrator/team-health-scan/SKILL.md +98 -0
  20. package/config/skills/orchestrator/team-health-scan/execute.sh +44 -0
  21. package/config/skills/registry.json +62 -1
  22. package/config/sops/developer/git-workflow.md +38 -3
  23. package/dist/backend/backend/src/config/oauth.config.d.ts +33 -0
  24. package/dist/backend/backend/src/config/oauth.config.d.ts.map +1 -0
  25. package/dist/backend/backend/src/config/oauth.config.js +45 -0
  26. package/dist/backend/backend/src/config/oauth.config.js.map +1 -0
  27. package/dist/backend/backend/src/constants.d.ts +69 -1
  28. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  29. package/dist/backend/backend/src/constants.js +69 -2
  30. package/dist/backend/backend/src/constants.js.map +1 -1
  31. package/dist/backend/backend/src/controllers/active-work/active-work.controller.d.ts +53 -0
  32. package/dist/backend/backend/src/controllers/active-work/active-work.controller.d.ts.map +1 -0
  33. package/dist/backend/backend/src/controllers/active-work/active-work.controller.js +92 -0
  34. package/dist/backend/backend/src/controllers/active-work/active-work.controller.js.map +1 -0
  35. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.d.ts.map +1 -1
  36. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.js +18 -1
  37. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.js.map +1 -1
  38. package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts +68 -0
  39. package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts.map +1 -1
  40. package/dist/backend/backend/src/controllers/browser/browser.controller.js +233 -5
  41. package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
  42. package/dist/backend/backend/src/controllers/browser/browser.routes.d.ts.map +1 -1
  43. package/dist/backend/backend/src/controllers/browser/browser.routes.js +10 -1
  44. package/dist/backend/backend/src/controllers/browser/browser.routes.js.map +1 -1
  45. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  46. package/dist/backend/backend/src/controllers/chat/chat.controller.js +8 -3
  47. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  48. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts +132 -0
  49. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -0
  50. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +401 -0
  51. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -0
  52. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts +29 -0
  53. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts.map +1 -0
  54. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js +39 -0
  55. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js.map +1 -0
  56. package/dist/backend/backend/src/controllers/chat-v2/index.d.ts +8 -0
  57. package/dist/backend/backend/src/controllers/chat-v2/index.d.ts.map +1 -0
  58. package/dist/backend/backend/src/controllers/chat-v2/index.js +8 -0
  59. package/dist/backend/backend/src/controllers/chat-v2/index.js.map +1 -0
  60. package/dist/backend/backend/src/controllers/credentials/credentials.controller.d.ts +0 -26
  61. package/dist/backend/backend/src/controllers/credentials/credentials.controller.d.ts.map +1 -1
  62. package/dist/backend/backend/src/controllers/credentials/credentials.controller.js +47 -184
  63. package/dist/backend/backend/src/controllers/credentials/credentials.controller.js.map +1 -1
  64. package/dist/backend/backend/src/controllers/credentials/credentials.routes.d.ts.map +1 -1
  65. package/dist/backend/backend/src/controllers/credentials/credentials.routes.js +2 -1
  66. package/dist/backend/backend/src/controllers/credentials/credentials.routes.js.map +1 -1
  67. package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.d.ts +40 -0
  68. package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.d.ts.map +1 -0
  69. package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.js +162 -0
  70. package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.js.map +1 -0
  71. package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.d.ts +13 -13
  72. package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.d.ts.map +1 -1
  73. package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.js +74 -234
  74. package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.js.map +1 -1
  75. package/dist/backend/backend/src/controllers/request/request.controller.d.ts.map +1 -1
  76. package/dist/backend/backend/src/controllers/request/request.controller.js +4 -6
  77. package/dist/backend/backend/src/controllers/request/request.controller.js.map +1 -1
  78. package/dist/backend/backend/src/controllers/skill/skill.controller.d.ts.map +1 -1
  79. package/dist/backend/backend/src/controllers/skill/skill.controller.js +1 -0
  80. package/dist/backend/backend/src/controllers/skill/skill.controller.js.map +1 -1
  81. package/dist/backend/backend/src/controllers/task-management/tasks.controller.d.ts +43 -0
  82. package/dist/backend/backend/src/controllers/task-management/tasks.controller.d.ts.map +1 -1
  83. package/dist/backend/backend/src/controllers/task-management/tasks.controller.js +200 -72
  84. package/dist/backend/backend/src/controllers/task-management/tasks.controller.js.map +1 -1
  85. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  86. package/dist/backend/backend/src/controllers/team/team.controller.js +46 -0
  87. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  88. package/dist/backend/backend/src/controllers/team-health/team-health.controller.d.ts +59 -0
  89. package/dist/backend/backend/src/controllers/team-health/team-health.controller.d.ts.map +1 -0
  90. package/dist/backend/backend/src/controllers/team-health/team-health.controller.js +127 -0
  91. package/dist/backend/backend/src/controllers/team-health/team-health.controller.js.map +1 -0
  92. package/dist/backend/backend/src/controllers/team-health/team-health.routes.d.ts +13 -0
  93. package/dist/backend/backend/src/controllers/team-health/team-health.routes.d.ts.map +1 -0
  94. package/dist/backend/backend/src/controllers/team-health/team-health.routes.js +20 -0
  95. package/dist/backend/backend/src/controllers/team-health/team-health.routes.js.map +1 -0
  96. package/dist/backend/backend/src/index.d.ts +9 -0
  97. package/dist/backend/backend/src/index.d.ts.map +1 -1
  98. package/dist/backend/backend/src/index.js +256 -4
  99. package/dist/backend/backend/src/index.js.map +1 -1
  100. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  101. package/dist/backend/backend/src/routes/api.routes.js +43 -6
  102. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  103. package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts +498 -0
  104. package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -0
  105. package/dist/backend/backend/src/services/agent/active-work-briefing.service.js +759 -0
  106. package/dist/backend/backend/src/services/agent/active-work-briefing.service.js.map +1 -0
  107. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +25 -0
  108. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  109. package/dist/backend/backend/src/services/agent/agent-registration.service.js +193 -57
  110. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  111. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +9 -2
  112. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +1 -1
  113. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +35 -2
  114. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +1 -1
  115. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +8 -2
  116. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
  117. package/dist/backend/backend/src/services/agent/crewly-agent/types.js +1 -0
  118. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
  119. package/dist/backend/backend/src/services/agent/tmux-command.service.d.ts.map +1 -1
  120. package/dist/backend/backend/src/services/agent/tmux-command.service.js +2 -1
  121. package/dist/backend/backend/src/services/agent/tmux-command.service.js.map +1 -1
  122. package/dist/backend/backend/src/services/agent/tmux.service.d.ts.map +1 -1
  123. package/dist/backend/backend/src/services/agent/tmux.service.js +2 -1
  124. package/dist/backend/backend/src/services/agent/tmux.service.js.map +1 -1
  125. package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts +148 -3
  126. package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
  127. package/dist/backend/backend/src/services/ai/prompt-builder.service.js +241 -2
  128. package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
  129. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
  130. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js +13 -0
  131. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
  132. package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts.map +1 -1
  133. package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.js +30 -2
  134. package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.js.map +1 -1
  135. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  136. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +17 -0
  137. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  138. package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +79 -0
  139. package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +1 -0
  140. package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +118 -0
  141. package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +1 -0
  142. package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts +161 -0
  143. package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts.map +1 -1
  144. package/dist/backend/backend/src/services/browser/browser-bridge.service.js +382 -2
  145. package/dist/backend/backend/src/services/browser/browser-bridge.service.js.map +1 -1
  146. package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts +105 -0
  147. package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts.map +1 -1
  148. package/dist/backend/backend/src/services/browser/browser-proxy.service.js +232 -13
  149. package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -1
  150. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +178 -0
  151. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -0
  152. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +254 -0
  153. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -0
  154. package/dist/backend/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts +134 -0
  155. package/dist/backend/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts.map +1 -0
  156. package/dist/backend/backend/src/services/chat-v2/chat-v2.mention-resolver.js +232 -0
  157. package/dist/backend/backend/src/services/chat-v2/chat-v2.mention-resolver.js.map +1 -0
  158. package/dist/backend/backend/src/services/chat-v2/chat-v2.realtime-holder.d.ts +25 -0
  159. package/dist/backend/backend/src/services/chat-v2/chat-v2.realtime-holder.d.ts.map +1 -0
  160. package/dist/backend/backend/src/services/chat-v2/chat-v2.realtime-holder.js +23 -0
  161. package/dist/backend/backend/src/services/chat-v2/chat-v2.realtime-holder.js.map +1 -0
  162. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +254 -0
  163. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -0
  164. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +467 -0
  165. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -0
  166. package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.d.ts +27 -0
  167. package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.d.ts.map +1 -0
  168. package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.js +57 -0
  169. package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.js.map +1 -0
  170. package/dist/backend/backend/src/services/chat-v2/chat-v2.team-membership.d.ts +43 -0
  171. package/dist/backend/backend/src/services/chat-v2/chat-v2.team-membership.d.ts.map +1 -0
  172. package/dist/backend/backend/src/services/chat-v2/chat-v2.team-membership.js +54 -0
  173. package/dist/backend/backend/src/services/chat-v2/chat-v2.team-membership.js.map +1 -0
  174. package/dist/backend/backend/src/services/chat-v2/config.d.ts +100 -0
  175. package/dist/backend/backend/src/services/chat-v2/config.d.ts.map +1 -0
  176. package/dist/backend/backend/src/services/chat-v2/config.js +174 -0
  177. package/dist/backend/backend/src/services/chat-v2/config.js.map +1 -0
  178. package/dist/backend/backend/src/services/chat-v2/index.d.ts +11 -0
  179. package/dist/backend/backend/src/services/chat-v2/index.d.ts.map +1 -0
  180. package/dist/backend/backend/src/services/chat-v2/index.js +12 -0
  181. package/dist/backend/backend/src/services/chat-v2/index.js.map +1 -0
  182. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts +114 -0
  183. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -0
  184. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js +194 -0
  185. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -0
  186. package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.d.ts +100 -0
  187. package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.d.ts.map +1 -0
  188. package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.js +351 -0
  189. package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.js.map +1 -0
  190. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +132 -0
  191. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -0
  192. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +281 -0
  193. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -0
  194. package/dist/backend/backend/src/services/chat-v2/types.d.ts +295 -0
  195. package/dist/backend/backend/src/services/chat-v2/types.d.ts.map +1 -0
  196. package/dist/backend/backend/src/services/chat-v2/types.js +61 -0
  197. package/dist/backend/backend/src/services/chat-v2/types.js.map +1 -0
  198. package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.d.ts +113 -0
  199. package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.d.ts.map +1 -0
  200. package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.js +179 -0
  201. package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.js.map +1 -0
  202. package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.d.ts +131 -0
  203. package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.d.ts.map +1 -0
  204. package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.js +227 -0
  205. package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.js.map +1 -0
  206. package/dist/backend/backend/src/services/core/config.service.js +3 -3
  207. package/dist/backend/backend/src/services/core/config.service.js.map +1 -1
  208. package/dist/backend/backend/src/services/core/storage.service.d.ts +7 -0
  209. package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
  210. package/dist/backend/backend/src/services/core/storage.service.js +15 -0
  211. package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
  212. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts +4 -16
  213. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -1
  214. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +7 -28
  215. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -1
  216. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts +69 -1
  217. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  218. package/dist/backend/backend/src/services/event-bus/event-bus.service.js +118 -0
  219. package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  220. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +275 -0
  221. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -0
  222. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +736 -0
  223. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -0
  224. package/dist/backend/backend/src/services/knowledge/fts5-index.service.d.ts.map +1 -1
  225. package/dist/backend/backend/src/services/knowledge/fts5-index.service.js +18 -2
  226. package/dist/backend/backend/src/services/knowledge/fts5-index.service.js.map +1 -1
  227. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts +49 -13
  228. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -1
  229. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js +123 -29
  230. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js.map +1 -1
  231. package/dist/backend/backend/src/services/knowledge/learnings-index.service.d.ts +159 -0
  232. package/dist/backend/backend/src/services/knowledge/learnings-index.service.d.ts.map +1 -0
  233. package/dist/backend/backend/src/services/knowledge/learnings-index.service.js +304 -0
  234. package/dist/backend/backend/src/services/knowledge/learnings-index.service.js.map +1 -0
  235. package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts.map +1 -1
  236. package/dist/backend/backend/src/services/knowledge/vector-store.service.js +24 -4
  237. package/dist/backend/backend/src/services/knowledge/vector-store.service.js.map +1 -1
  238. package/dist/backend/backend/src/services/mcp-server.d.ts +46 -2
  239. package/dist/backend/backend/src/services/mcp-server.d.ts.map +1 -1
  240. package/dist/backend/backend/src/services/mcp-server.js +216 -211
  241. package/dist/backend/backend/src/services/mcp-server.js.map +1 -1
  242. package/dist/backend/backend/src/services/mcp-tool-definitions.d.ts +254 -0
  243. package/dist/backend/backend/src/services/mcp-tool-definitions.d.ts.map +1 -0
  244. package/dist/backend/backend/src/services/mcp-tool-definitions.js +285 -0
  245. package/dist/backend/backend/src/services/mcp-tool-definitions.js.map +1 -0
  246. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.d.ts +174 -0
  247. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.d.ts.map +1 -0
  248. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.js +375 -0
  249. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.js.map +1 -0
  250. package/dist/backend/backend/src/services/memory/learning-format.validator.d.ts +97 -0
  251. package/dist/backend/backend/src/services/memory/learning-format.validator.d.ts.map +1 -0
  252. package/dist/backend/backend/src/services/memory/learning-format.validator.js +209 -0
  253. package/dist/backend/backend/src/services/memory/learning-format.validator.js.map +1 -0
  254. package/dist/backend/backend/src/services/memory/vector-store.service.d.ts.map +1 -1
  255. package/dist/backend/backend/src/services/memory/vector-store.service.js +19 -4
  256. package/dist/backend/backend/src/services/memory/vector-store.service.js.map +1 -1
  257. package/dist/backend/backend/src/services/onboarding/onboarding-provision.service.d.ts +16 -5
  258. package/dist/backend/backend/src/services/onboarding/onboarding-provision.service.d.ts.map +1 -1
  259. package/dist/backend/backend/src/services/onboarding/onboarding-provision.service.js +32 -5
  260. package/dist/backend/backend/src/services/onboarding/onboarding-provision.service.js.map +1 -1
  261. package/dist/backend/backend/src/services/onboarding/onboarding.service.d.ts +157 -0
  262. package/dist/backend/backend/src/services/onboarding/onboarding.service.d.ts.map +1 -0
  263. package/dist/backend/backend/src/services/onboarding/onboarding.service.js +229 -0
  264. package/dist/backend/backend/src/services/onboarding/onboarding.service.js.map +1 -0
  265. package/dist/backend/backend/src/services/onboarding/onboarding.types.d.ts +141 -0
  266. package/dist/backend/backend/src/services/onboarding/onboarding.types.d.ts.map +1 -0
  267. package/dist/backend/backend/src/services/onboarding/onboarding.types.js +18 -0
  268. package/dist/backend/backend/src/services/onboarding/onboarding.types.js.map +1 -0
  269. package/dist/backend/backend/src/services/pr-review/pr-review.service.d.ts.map +1 -1
  270. package/dist/backend/backend/src/services/pr-review/pr-review.service.js +1 -1
  271. package/dist/backend/backend/src/services/pr-review/pr-review.service.js.map +1 -1
  272. package/dist/backend/backend/src/services/project/task.service.d.ts.map +1 -1
  273. package/dist/backend/backend/src/services/project/task.service.js +5 -0
  274. package/dist/backend/backend/src/services/project/task.service.js.map +1 -1
  275. package/dist/backend/backend/src/services/skill/skill-executor.service.d.ts +41 -0
  276. package/dist/backend/backend/src/services/skill/skill-executor.service.d.ts.map +1 -1
  277. package/dist/backend/backend/src/services/skill/skill-executor.service.js +136 -7
  278. package/dist/backend/backend/src/services/skill/skill-executor.service.js.map +1 -1
  279. package/dist/backend/backend/src/services/skill/skill.service.d.ts.map +1 -1
  280. package/dist/backend/backend/src/services/skill/skill.service.js +1 -0
  281. package/dist/backend/backend/src/services/skill/skill.service.js.map +1 -1
  282. package/dist/backend/backend/src/services/slack/cross-machine-message.service.d.ts.map +1 -1
  283. package/dist/backend/backend/src/services/slack/cross-machine-message.service.js +17 -1
  284. package/dist/backend/backend/src/services/slack/cross-machine-message.service.js.map +1 -1
  285. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +39 -1
  286. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  287. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +158 -26
  288. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  289. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +248 -6
  290. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  291. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +531 -51
  292. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  293. package/dist/backend/backend/src/services/team-health/index.d.ts +16 -0
  294. package/dist/backend/backend/src/services/team-health/index.d.ts.map +1 -0
  295. package/dist/backend/backend/src/services/team-health/index.js +16 -0
  296. package/dist/backend/backend/src/services/team-health/index.js.map +1 -0
  297. package/dist/backend/backend/src/services/team-health/live-team-health-data-provider.d.ts +52 -0
  298. package/dist/backend/backend/src/services/team-health/live-team-health-data-provider.d.ts.map +1 -0
  299. package/dist/backend/backend/src/services/team-health/live-team-health-data-provider.js +161 -0
  300. package/dist/backend/backend/src/services/team-health/live-team-health-data-provider.js.map +1 -0
  301. package/dist/backend/backend/src/services/team-health/lost-dispatch-detector.d.ts +53 -0
  302. package/dist/backend/backend/src/services/team-health/lost-dispatch-detector.d.ts.map +1 -0
  303. package/dist/backend/backend/src/services/team-health/lost-dispatch-detector.js +88 -0
  304. package/dist/backend/backend/src/services/team-health/lost-dispatch-detector.js.map +1 -0
  305. package/dist/backend/backend/src/services/team-health/stale-trigger-detector.d.ts +44 -0
  306. package/dist/backend/backend/src/services/team-health/stale-trigger-detector.d.ts.map +1 -0
  307. package/dist/backend/backend/src/services/team-health/stale-trigger-detector.js +83 -0
  308. package/dist/backend/backend/src/services/team-health/stale-trigger-detector.js.map +1 -0
  309. package/dist/backend/backend/src/services/team-health/team-health-alert-router.d.ts +92 -0
  310. package/dist/backend/backend/src/services/team-health/team-health-alert-router.d.ts.map +1 -0
  311. package/dist/backend/backend/src/services/team-health/team-health-alert-router.js +328 -0
  312. package/dist/backend/backend/src/services/team-health/team-health-alert-router.js.map +1 -0
  313. package/dist/backend/backend/src/services/team-health/team-health-config.d.ts +41 -0
  314. package/dist/backend/backend/src/services/team-health/team-health-config.d.ts.map +1 -0
  315. package/dist/backend/backend/src/services/team-health/team-health-config.js +213 -0
  316. package/dist/backend/backend/src/services/team-health/team-health-config.js.map +1 -0
  317. package/dist/backend/backend/src/services/team-health/team-health-detector.d.ts +46 -0
  318. package/dist/backend/backend/src/services/team-health/team-health-detector.d.ts.map +1 -0
  319. package/dist/backend/backend/src/services/team-health/team-health-detector.js +347 -0
  320. package/dist/backend/backend/src/services/team-health/team-health-detector.js.map +1 -0
  321. package/dist/backend/backend/src/services/team-health/team-health-types.d.ts +154 -0
  322. package/dist/backend/backend/src/services/team-health/team-health-types.d.ts.map +1 -0
  323. package/dist/backend/backend/src/services/team-health/team-health-types.js +94 -0
  324. package/dist/backend/backend/src/services/team-health/team-health-types.js.map +1 -0
  325. package/dist/backend/backend/src/services/team-health/team-health-watchdog.service.d.ts +111 -0
  326. package/dist/backend/backend/src/services/team-health/team-health-watchdog.service.d.ts.map +1 -0
  327. package/dist/backend/backend/src/services/team-health/team-health-watchdog.service.js +226 -0
  328. package/dist/backend/backend/src/services/team-health/team-health-watchdog.service.js.map +1 -0
  329. package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts +148 -0
  330. package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts.map +1 -0
  331. package/dist/backend/backend/src/services/v3/mission-reminder.service.js +545 -0
  332. package/dist/backend/backend/src/services/v3/mission-reminder.service.js.map +1 -0
  333. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts +499 -0
  334. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -0
  335. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +1105 -0
  336. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -0
  337. package/dist/backend/backend/src/services/v3/request.service.d.ts +22 -0
  338. package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
  339. package/dist/backend/backend/src/services/v3/request.service.js +71 -0
  340. package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
  341. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts +1 -0
  342. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  343. package/dist/backend/backend/src/services/v3/v3-data.service.js +22 -6
  344. package/dist/backend/backend/src/services/v3/v3-data.service.js.map +1 -1
  345. package/dist/backend/backend/src/types/event-bus.types.d.ts +19 -1
  346. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  347. package/dist/backend/backend/src/types/event-bus.types.js +43 -0
  348. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  349. package/dist/backend/backend/src/types/index.d.ts +22 -1
  350. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  351. package/dist/backend/backend/src/types/index.js.map +1 -1
  352. package/dist/backend/backend/src/types/review-reason.types.d.ts +63 -0
  353. package/dist/backend/backend/src/types/review-reason.types.d.ts.map +1 -0
  354. package/dist/backend/backend/src/types/review-reason.types.js +50 -0
  355. package/dist/backend/backend/src/types/review-reason.types.js.map +1 -0
  356. package/dist/backend/backend/src/types/skill.types.d.ts +9 -0
  357. package/dist/backend/backend/src/types/skill.types.d.ts.map +1 -1
  358. package/dist/backend/backend/src/types/skill.types.js.map +1 -1
  359. package/dist/backend/backend/src/types/slack.types.d.ts +4 -1
  360. package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
  361. package/dist/backend/backend/src/types/slack.types.js.map +1 -1
  362. package/dist/backend/backend/src/types/v2/mission.types.d.ts +18 -0
  363. package/dist/backend/backend/src/types/v2/mission.types.d.ts.map +1 -1
  364. package/dist/backend/backend/src/types/v2/mission.types.js +1 -0
  365. package/dist/backend/backend/src/types/v2/mission.types.js.map +1 -1
  366. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  367. package/dist/backend/backend/src/types/v2/work-item.types.js +25 -1
  368. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  369. package/dist/backend/backend/src/utils/google-userinfo.utils.d.ts +41 -0
  370. package/dist/backend/backend/src/utils/google-userinfo.utils.d.ts.map +1 -0
  371. package/dist/backend/backend/src/utils/google-userinfo.utils.js +44 -0
  372. package/dist/backend/backend/src/utils/google-userinfo.utils.js.map +1 -0
  373. package/dist/backend/backend/src/utils/team.utils.d.ts +38 -0
  374. package/dist/backend/backend/src/utils/team.utils.d.ts.map +1 -0
  375. package/dist/backend/backend/src/utils/team.utils.js +45 -0
  376. package/dist/backend/backend/src/utils/team.utils.js.map +1 -0
  377. package/dist/backend/backend/src/websocket/chat-v2.gateway.d.ts +195 -0
  378. package/dist/backend/backend/src/websocket/chat-v2.gateway.d.ts.map +1 -0
  379. package/dist/backend/backend/src/websocket/chat-v2.gateway.js +401 -0
  380. package/dist/backend/backend/src/websocket/chat-v2.gateway.js.map +1 -0
  381. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts +37 -2
  382. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
  383. package/dist/backend/backend/src/websocket/terminal.gateway.js +106 -5
  384. package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
  385. package/dist/cli/backend/src/config/oauth.config.d.ts +33 -0
  386. package/dist/cli/backend/src/config/oauth.config.d.ts.map +1 -0
  387. package/dist/cli/backend/src/config/oauth.config.js +45 -0
  388. package/dist/cli/backend/src/config/oauth.config.js.map +1 -0
  389. package/dist/cli/backend/src/constants.d.ts +69 -1
  390. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  391. package/dist/cli/backend/src/constants.js +69 -2
  392. package/dist/cli/backend/src/constants.js.map +1 -1
  393. package/dist/cli/backend/src/services/core/config.service.js +3 -3
  394. package/dist/cli/backend/src/services/core/config.service.js.map +1 -1
  395. package/dist/cli/backend/src/services/core/storage.service.d.ts +7 -0
  396. package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
  397. package/dist/cli/backend/src/services/core/storage.service.js +15 -0
  398. package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
  399. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts +4 -16
  400. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -1
  401. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +7 -28
  402. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -1
  403. package/dist/cli/backend/src/services/knowledge/fts5-index.service.d.ts.map +1 -1
  404. package/dist/cli/backend/src/services/knowledge/fts5-index.service.js +18 -2
  405. package/dist/cli/backend/src/services/knowledge/fts5-index.service.js.map +1 -1
  406. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts +49 -13
  407. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -1
  408. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +123 -29
  409. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +1 -1
  410. package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts.map +1 -1
  411. package/dist/cli/backend/src/services/knowledge/vector-store.service.js +24 -4
  412. package/dist/cli/backend/src/services/knowledge/vector-store.service.js.map +1 -1
  413. package/dist/cli/backend/src/services/mcp-server.d.ts +46 -2
  414. package/dist/cli/backend/src/services/mcp-server.d.ts.map +1 -1
  415. package/dist/cli/backend/src/services/mcp-server.js +216 -211
  416. package/dist/cli/backend/src/services/mcp-server.js.map +1 -1
  417. package/dist/cli/backend/src/services/mcp-tool-definitions.d.ts +254 -0
  418. package/dist/cli/backend/src/services/mcp-tool-definitions.d.ts.map +1 -0
  419. package/dist/cli/backend/src/services/mcp-tool-definitions.js +285 -0
  420. package/dist/cli/backend/src/services/mcp-tool-definitions.js.map +1 -0
  421. package/dist/cli/backend/src/services/skill/skill-executor.service.d.ts +18 -0
  422. package/dist/cli/backend/src/services/skill/skill-executor.service.d.ts.map +1 -1
  423. package/dist/cli/backend/src/services/skill/skill-executor.service.js +7 -9
  424. package/dist/cli/backend/src/services/skill/skill-executor.service.js.map +1 -1
  425. package/dist/cli/backend/src/types/index.d.ts +22 -1
  426. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  427. package/dist/cli/backend/src/types/index.js.map +1 -1
  428. package/dist/cli/backend/src/types/skill.types.d.ts +9 -0
  429. package/dist/cli/backend/src/types/skill.types.d.ts.map +1 -1
  430. package/dist/cli/backend/src/types/skill.types.js.map +1 -1
  431. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  432. package/dist/cli/backend/src/types/v2/work-item.types.js +25 -1
  433. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  434. package/dist/cli/backend/src/utils/google-userinfo.utils.d.ts +41 -0
  435. package/dist/cli/backend/src/utils/google-userinfo.utils.d.ts.map +1 -0
  436. package/dist/cli/backend/src/utils/google-userinfo.utils.js +44 -0
  437. package/dist/cli/backend/src/utils/google-userinfo.utils.js.map +1 -0
  438. package/frontend/dist/assets/{index-9e6d97d1.js → index-7a4e7df5.js} +328 -326
  439. package/frontend/dist/assets/index-b7e59b2b.css +33 -0
  440. package/frontend/dist/index.html +2 -2
  441. package/package.json +2 -1
  442. package/config/skills/orchestrator/recall/SKILL.md +0 -47
  443. package/config/skills/orchestrator/recall/execute.sh +0 -13
  444. package/config/skills/orchestrator/record-learning/SKILL.md +0 -47
  445. package/config/skills/orchestrator/record-learning/execute.sh +0 -13
  446. package/config/skills/orchestrator/remember/SKILL.md +0 -55
  447. package/config/skills/orchestrator/remember/execute.sh +0 -15
  448. package/frontend/dist/assets/index-6aaa0630.css +0 -33
@@ -64,10 +64,12 @@ export interface CrewlyMcpServerConfig {
64
64
  */
65
65
  export declare class CrewlyMcpServer {
66
66
  private server;
67
- private storage;
68
- private memory;
67
+ private readonly storage;
68
+ private readonly memory;
69
69
  private transport;
70
70
  private stdioTransportCtor;
71
+ private geminiCliHelper;
72
+ private getGeminiCliHelper;
71
73
  /**
72
74
  * Creates a new CrewlyMcpServer instance.
73
75
  *
@@ -78,6 +80,14 @@ export declare class CrewlyMcpServer {
78
80
  * Register MCP request handlers for tool listing and tool calling.
79
81
  */
80
82
  private registerHandlers;
83
+ /**
84
+ * Build the Server + transport + handlers from already-loaded SDK modules.
85
+ * Returns false if any expected SDK symbol is missing (so the caller can
86
+ * decide whether to throw or silently fall back). Both `ensureInitialized`
87
+ * (dynamic import) and `tryInitializeWithRequire` (CommonJS require) feed
88
+ * their loaded modules through here.
89
+ */
90
+ private installSdkModules;
81
91
  private ensureInitialized;
82
92
  private tryInitializeWithRequire;
83
93
  /**
@@ -88,6 +98,14 @@ export declare class CrewlyMcpServer {
88
98
  * @returns Tool result with content blocks
89
99
  */
90
100
  private handleToolCall;
101
+ /**
102
+ * Format a TeamMember for an MCP response. Three variants share the
103
+ * same base (id/name/role/agentStatus/workingStatus); `includeRuntime`
104
+ * adds `runtimeType` + `sessionName`, and `includeTickets` adds
105
+ * `currentTickets`. Keeping all three paths in one place so that a
106
+ * field added to the member shape only needs to be surfaced once.
107
+ */
108
+ private formatMember;
91
109
  /**
92
110
  * Handle crewly_get_teams: list all teams and their members.
93
111
  *
@@ -134,6 +152,32 @@ export declare class CrewlyMcpServer {
134
152
  * @returns Confirmation with message ID
135
153
  */
136
154
  private handleSendMessage;
155
+ /**
156
+ * Handle crewly_credential_list: return credential metadata (no values).
157
+ */
158
+ private handleCredentialList;
159
+ /**
160
+ * Handle crewly_credential_add_api_key: store an API key.
161
+ */
162
+ private handleCredentialAddApiKey;
163
+ /**
164
+ * Handle crewly_credential_oauth_import_gemini_cli: capture the current
165
+ * gemini-cli-workspace extension login into an encrypted Crewly credential.
166
+ */
167
+ private handleCredentialImportGeminiCli;
168
+ /**
169
+ * Handle crewly_credential_clear_gemini_cli_file: delete the extension's
170
+ * cached token file so the next extension login captures a fresh account.
171
+ */
172
+ private handleCredentialClearGeminiCliFile;
173
+ /**
174
+ * Handle crewly_credential_delete: remove a credential.
175
+ */
176
+ private handleCredentialDelete;
177
+ /**
178
+ * Handle crewly_execute_skill: run a skill with optional credential bindings.
179
+ */
180
+ private handleExecuteSkill;
137
181
  /**
138
182
  * Create a success result with JSON-serialized content.
139
183
  *
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../../../../backend/src/services/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AASH;;GAEG;AACH,eAAO,MAAM,oBAAoB;IAC/B,sDAAsD;;;;;IAKtD,uCAAuC;;CAE/B,CAAC;AAIX;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA0KD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,kBAAkB,CAAgC;IAE1D;;;;OAIG;gBACS,MAAM,CAAC,EAAE,qBAAqB;IAM1C;;OAEG;IACH,OAAO,CAAC,gBAAgB;YAwBV,iBAAiB;IAiC/B,OAAO,CAAC,wBAAwB;IA2ChC;;;;;;OAMG;YACW,cAAc;IA6B5B;;;;;OAKG;YACW,cAAc;IAoC5B;;;;;OAKG;YACW,gBAAgB;IA0D9B;;;;;;;;;OASG;YACW,gBAAgB;IA2C9B;;;;;OAKG;YACW,eAAe;IAiE7B;;;;;OAKG;YACW,kBAAkB;IAiChC;;;;;OAKG;YACW,iBAAiB;IAwB/B;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAMrB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IASnB;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B;;;;OAIG;IACH,SAAS,IAAI,GAAG;CAGjB"}
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../../../../backend/src/services/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAcH;;GAEG;AACH,eAAO,MAAM,oBAAoB;IAC/B,sDAAsD;;;;;IAKtD,uCAAuC;;CAE/B,CAAC;AAIX;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAeD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,kBAAkB,CAAgC;IAC1D,OAAO,CAAC,eAAe,CAAyC;IAEhE,OAAO,CAAC,kBAAkB;IAO1B;;;;OAIG;gBACS,MAAM,CAAC,EAAE,qBAAqB;IAM1C;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;YA2BX,iBAAiB;IAc/B,OAAO,CAAC,wBAAwB;IAsBhC;;;;;;OAMG;YACW,cAAc;IAyC5B;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAuBpB;;;;;OAKG;YACW,cAAc;IA4B5B;;;;;OAKG;YACW,gBAAgB;IA8D9B;;;;;;;;;OASG;YACW,gBAAgB;IA4C9B;;;;;OAKG;YACW,eAAe;IAqD7B;;;;;OAKG;YACW,kBAAkB;IAiChC;;;;;OAKG;YACW,iBAAiB;IA0B/B;;OAEG;YACW,oBAAoB;IA6BlC;;OAEG;YACW,yBAAyB;IAqBvC;;;OAGG;YACW,+BAA+B;IA8B7C;;;OAGG;YACW,kCAAkC;IAKhD;;OAEG;YACW,sBAAsB;IAapC;;OAEG;YACW,kBAAkB;IA8BhC;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAMrB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IASnB;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B;;;;OAIG;IACH,SAAS,IAAI,GAAG;CAGjB"}
@@ -21,6 +21,10 @@
21
21
  import { StorageService } from './core/storage.service.js';
22
22
  import { MemoryService } from './memory/memory.service.js';
23
23
  import { v4 as uuidv4 } from 'uuid';
24
+ import { getCredentialStoreService } from './credential/credential-store.service.js';
25
+ import { GeminiCliWorkspaceHelper } from './credential/helpers/gemini-cli-workspace.helper.js';
26
+ import { getSkillExecutorService } from './skill/skill-executor.service.js';
27
+ import { TOOL_DEFINITIONS } from './mcp-tool-definitions.js';
24
28
  // ========================= Constants =========================
25
29
  /**
26
30
  * MCP Server configuration constants.
@@ -34,156 +38,8 @@ export const MCP_SERVER_CONSTANTS = {
34
38
  /** Tool name prefix for namespacing */
35
39
  TOOL_PREFIX: 'crewly',
36
40
  };
37
- // ========================= Tool Definitions =========================
38
- /**
39
- * MCP tool definitions for Crewly capabilities.
40
- * Each tool has a name, description, and JSON Schema for its input.
41
- */
42
- const TOOL_DEFINITIONS = [
43
- {
44
- name: 'crewly_get_teams',
45
- description: 'List all Crewly teams and their members with current status. ' +
46
- 'Returns team names, member roles, agent status, and working status.',
47
- inputSchema: {
48
- type: 'object',
49
- properties: {
50
- teamId: {
51
- type: 'string',
52
- description: 'Optional: filter to a specific team by ID',
53
- },
54
- },
55
- },
56
- },
57
- {
58
- name: 'crewly_create_team',
59
- description: 'Create a new Crewly team with the specified members. ' +
60
- 'Each member needs a name, role, and runtime type.',
61
- inputSchema: {
62
- type: 'object',
63
- properties: {
64
- name: {
65
- type: 'string',
66
- description: 'Team name (e.g. "Backend Squad")',
67
- },
68
- description: {
69
- type: 'string',
70
- description: 'Optional team description',
71
- },
72
- members: {
73
- type: 'array',
74
- description: 'Array of team members to create',
75
- items: {
76
- type: 'object',
77
- properties: {
78
- name: { type: 'string', description: 'Member name' },
79
- role: {
80
- type: 'string',
81
- description: 'Member role (developer, qa, product-manager, designer, etc.)',
82
- },
83
- runtimeType: {
84
- type: 'string',
85
- enum: ['claude-code', 'gemini-cli', 'codex-cli', 'crewly-agent'],
86
- description: 'AI runtime to use (default: claude-code)',
87
- },
88
- },
89
- required: ['name', 'role'],
90
- },
91
- },
92
- },
93
- required: ['name', 'members'],
94
- },
95
- },
96
- {
97
- name: 'crewly_assign_task',
98
- description: 'Assign a task to a specific agent by sending it a message via the ' +
99
- 'message queue. The agent will receive the task content as input.',
100
- inputSchema: {
101
- type: 'object',
102
- properties: {
103
- teamId: {
104
- type: 'string',
105
- description: 'ID of the team the agent belongs to',
106
- },
107
- memberId: {
108
- type: 'string',
109
- description: 'ID of the member to assign the task to',
110
- },
111
- task: {
112
- type: 'string',
113
- description: 'Task description/instructions for the agent',
114
- },
115
- },
116
- required: ['teamId', 'memberId', 'task'],
117
- },
118
- },
119
- {
120
- name: 'crewly_get_status',
121
- description: 'Get the current status of a specific team or agent. Returns agent ' +
122
- 'status (active/inactive), working status (idle/in_progress), and ' +
123
- 'runtime type.',
124
- inputSchema: {
125
- type: 'object',
126
- properties: {
127
- teamId: {
128
- type: 'string',
129
- description: 'Optional: filter to a specific team',
130
- },
131
- memberId: {
132
- type: 'string',
133
- description: 'Optional: filter to a specific member within a team',
134
- },
135
- },
136
- },
137
- },
138
- {
139
- name: 'crewly_recall_memory',
140
- description: 'Search team memory and knowledge base for relevant information. ' +
141
- 'Uses keyword and semantic matching to find stored learnings, ' +
142
- 'patterns, decisions, and documents.',
143
- inputSchema: {
144
- type: 'object',
145
- properties: {
146
- query: {
147
- type: 'string',
148
- description: 'Search query for the memory/knowledge system',
149
- },
150
- agentId: {
151
- type: 'string',
152
- description: 'Optional: agent ID to scope the recall',
153
- },
154
- projectPath: {
155
- type: 'string',
156
- description: 'Optional: project path to scope the recall',
157
- },
158
- scope: {
159
- type: 'string',
160
- enum: ['agent', 'project', 'both'],
161
- description: 'Memory scope to search (default: both)',
162
- },
163
- },
164
- required: ['query'],
165
- },
166
- },
167
- {
168
- name: 'crewly_send_message',
169
- description: 'Send a message to the orchestrator via the message queue. ' +
170
- 'The message will be queued and processed by the orchestrator.',
171
- inputSchema: {
172
- type: 'object',
173
- properties: {
174
- message: {
175
- type: 'string',
176
- description: 'Message content to send',
177
- },
178
- conversationId: {
179
- type: 'string',
180
- description: 'Optional: conversation ID for threading (auto-generated if omitted)',
181
- },
182
- },
183
- required: ['message'],
184
- },
185
- },
186
- ];
41
+ // Tool definitions live in `./mcp-tool-definitions.ts` so this file can stay
42
+ // focused on routing, lifecycle, and handler implementations.
187
43
  // ========================= Service =========================
188
44
  /**
189
45
  * CrewlyMcpServer exposes Crewly team management capabilities as MCP tools.
@@ -216,6 +72,13 @@ export class CrewlyMcpServer {
216
72
  memory;
217
73
  transport = null;
218
74
  stdioTransportCtor = null;
75
+ geminiCliHelper = null;
76
+ getGeminiCliHelper() {
77
+ if (!this.geminiCliHelper) {
78
+ this.geminiCliHelper = new GeminiCliWorkspaceHelper(getCredentialStoreService());
79
+ }
80
+ return this.geminiCliHelper;
81
+ }
219
82
  /**
220
83
  * Creates a new CrewlyMcpServer instance.
221
84
  *
@@ -248,30 +111,39 @@ export class CrewlyMcpServer {
248
111
  return result;
249
112
  });
250
113
  }
251
- async ensureInitialized() {
252
- if (this.server && this.stdioTransportCtor) {
253
- return;
254
- }
255
- const serverModule = await import('@modelcontextprotocol/sdk/server/index.js');
256
- const stdioModule = await import('@modelcontextprotocol/sdk/server/stdio.js');
257
- const typesModule = await import('@modelcontextprotocol/sdk/types.js');
114
+ /**
115
+ * Build the Server + transport + handlers from already-loaded SDK modules.
116
+ * Returns false if any expected SDK symbol is missing (so the caller can
117
+ * decide whether to throw or silently fall back). Both `ensureInitialized`
118
+ * (dynamic import) and `tryInitializeWithRequire` (CommonJS require) feed
119
+ * their loaded modules through here.
120
+ */
121
+ installSdkModules(serverModule, stdioModule, typesModule) {
258
122
  const ServerCtor = serverModule.Server ?? serverModule.default?.Server;
259
123
  const StdioTransportCtor = stdioModule.StdioServerTransport ?? stdioModule.default?.StdioServerTransport;
260
124
  const listTools = typesModule.ListToolsRequestSchema;
261
125
  const callTool = typesModule.CallToolRequestSchema;
262
126
  if (!ServerCtor || !StdioTransportCtor || !listTools || !callTool) {
263
- throw new Error('Failed to load MCP server SDK modules');
127
+ return false;
264
128
  }
265
129
  this.server = new ServerCtor({
266
130
  name: MCP_SERVER_CONSTANTS.SERVER_INFO.NAME,
267
131
  version: MCP_SERVER_CONSTANTS.SERVER_INFO.VERSION,
268
- }, {
269
- capabilities: {
270
- tools: {},
271
- },
272
- });
132
+ }, { capabilities: { tools: {} } });
273
133
  this.stdioTransportCtor = StdioTransportCtor;
274
134
  this.registerHandlers({ listTools, callTool });
135
+ return true;
136
+ }
137
+ async ensureInitialized() {
138
+ if (this.server && this.stdioTransportCtor) {
139
+ return;
140
+ }
141
+ const serverModule = (await import('@modelcontextprotocol/sdk/server/index.js'));
142
+ const stdioModule = (await import('@modelcontextprotocol/sdk/server/stdio.js'));
143
+ const typesModule = (await import('@modelcontextprotocol/sdk/types.js'));
144
+ if (!this.installSdkModules(serverModule, stdioModule, typesModule)) {
145
+ throw new Error('Failed to load MCP server SDK modules');
146
+ }
275
147
  }
276
148
  tryInitializeWithRequire() {
277
149
  if (this.server && this.stdioTransportCtor) {
@@ -285,23 +157,7 @@ export class CrewlyMcpServer {
285
157
  const serverModule = req('@modelcontextprotocol/sdk/server/index.js');
286
158
  const stdioModule = req('@modelcontextprotocol/sdk/server/stdio.js');
287
159
  const typesModule = req('@modelcontextprotocol/sdk/types.js');
288
- const ServerCtor = serverModule.Server ?? serverModule.default?.Server;
289
- const StdioTransportCtor = stdioModule.StdioServerTransport ?? stdioModule.default?.StdioServerTransport;
290
- const listTools = typesModule.ListToolsRequestSchema;
291
- const callTool = typesModule.CallToolRequestSchema;
292
- if (!ServerCtor || !StdioTransportCtor || !listTools || !callTool) {
293
- return;
294
- }
295
- this.server = new ServerCtor({
296
- name: MCP_SERVER_CONSTANTS.SERVER_INFO.NAME,
297
- version: MCP_SERVER_CONSTANTS.SERVER_INFO.VERSION,
298
- }, {
299
- capabilities: {
300
- tools: {},
301
- },
302
- });
303
- this.stdioTransportCtor = StdioTransportCtor;
304
- this.registerHandlers({ listTools, callTool });
160
+ this.installSdkModules(serverModule, stdioModule, typesModule);
305
161
  }
306
162
  catch {
307
163
  // Ignore in environments where `require` cannot load ESM SDK modules.
@@ -330,6 +186,18 @@ export class CrewlyMcpServer {
330
186
  return await this.handleRecallMemory(args);
331
187
  case 'crewly_send_message':
332
188
  return await this.handleSendMessage(args);
189
+ case 'crewly_credential_list':
190
+ return await this.handleCredentialList(args);
191
+ case 'crewly_credential_add_api_key':
192
+ return await this.handleCredentialAddApiKey(args);
193
+ case 'crewly_credential_oauth_import_gemini_cli':
194
+ return await this.handleCredentialImportGeminiCli(args);
195
+ case 'crewly_credential_clear_gemini_cli_file':
196
+ return await this.handleCredentialClearGeminiCliFile();
197
+ case 'crewly_credential_delete':
198
+ return await this.handleCredentialDelete(args);
199
+ case 'crewly_execute_skill':
200
+ return await this.handleExecuteSkill(args);
333
201
  default:
334
202
  return this.errorResult(`Unknown tool: ${name}`);
335
203
  }
@@ -339,6 +207,31 @@ export class CrewlyMcpServer {
339
207
  return this.errorResult(`Tool "${name}" failed: ${message}`);
340
208
  }
341
209
  }
210
+ // ========================= Member formatters =========================
211
+ /**
212
+ * Format a TeamMember for an MCP response. Three variants share the
213
+ * same base (id/name/role/agentStatus/workingStatus); `includeRuntime`
214
+ * adds `runtimeType` + `sessionName`, and `includeTickets` adds
215
+ * `currentTickets`. Keeping all three paths in one place so that a
216
+ * field added to the member shape only needs to be surfaced once.
217
+ */
218
+ formatMember(m, opts = {}) {
219
+ const base = {
220
+ id: m.id,
221
+ name: m.name,
222
+ role: m.role,
223
+ agentStatus: m.agentStatus,
224
+ workingStatus: m.workingStatus,
225
+ };
226
+ if (opts.includeRuntime) {
227
+ base.runtimeType = m.runtimeType;
228
+ base.sessionName = m.sessionName;
229
+ }
230
+ if (opts.includeTickets) {
231
+ base.currentTickets = m.currentTickets;
232
+ }
233
+ return base;
234
+ }
342
235
  // ========================= Tool Handlers =========================
343
236
  /**
344
237
  * Handle crewly_get_teams: list all teams and their members.
@@ -364,15 +257,7 @@ export class CrewlyMcpServer {
364
257
  name: team.name,
365
258
  description: team.description,
366
259
  memberCount: team.members.length,
367
- members: team.members.map((m) => ({
368
- id: m.id,
369
- name: m.name,
370
- role: m.role,
371
- agentStatus: m.agentStatus,
372
- workingStatus: m.workingStatus,
373
- runtimeType: m.runtimeType,
374
- sessionName: m.sessionName,
375
- })),
260
+ members: team.members.map((m) => this.formatMember(m, { includeRuntime: true })),
376
261
  projectIds: team.projectIds,
377
262
  }));
378
263
  return this.successResult(result);
@@ -386,10 +271,14 @@ export class CrewlyMcpServer {
386
271
  async handleCreateTeam(args) {
387
272
  const name = args.name;
388
273
  const description = args.description;
389
- const memberSpecs = args.members;
390
- if (!name || !memberSpecs || memberSpecs.length === 0) {
391
- return this.errorResult('Team name and at least one member are required');
274
+ const rawMembers = args.members;
275
+ if (!name) {
276
+ return this.errorResult('Team name is required');
277
+ }
278
+ if (!Array.isArray(rawMembers) || rawMembers.length === 0) {
279
+ return this.errorResult('At least one member is required (members must be a non-empty array)');
392
280
  }
281
+ const memberSpecs = rawMembers;
393
282
  const teamId = uuidv4();
394
283
  const now = new Date().toISOString();
395
284
  const members = memberSpecs.map((spec) => {
@@ -454,8 +343,9 @@ export class CrewlyMcpServer {
454
343
  if (!member) {
455
344
  return this.errorResult(`Member not found: ${memberId} in team "${team.name}"`);
456
345
  }
457
- // Add task to member's ticket list
458
- const ticketId = `mcp-task-${Date.now()}`;
346
+ // Add task to member's ticket list. Include a uuid tail so two
347
+ // assignments in the same millisecond can't collide.
348
+ const ticketId = `mcp-task-${Date.now()}-${uuidv4().slice(0, 8)}`;
459
349
  if (!member.currentTickets) {
460
350
  member.currentTickets = [];
461
351
  }
@@ -492,16 +382,10 @@ export class CrewlyMcpServer {
492
382
  }
493
383
  return this.successResult({
494
384
  team: { id: team.id, name: team.name },
495
- member: {
496
- id: member.id,
497
- name: member.name,
498
- role: member.role,
499
- agentStatus: member.agentStatus,
500
- workingStatus: member.workingStatus,
501
- runtimeType: member.runtimeType,
502
- sessionName: member.sessionName,
503
- currentTickets: member.currentTickets,
504
- },
385
+ member: this.formatMember(member, {
386
+ includeRuntime: true,
387
+ includeTickets: true,
388
+ }),
505
389
  });
506
390
  }
507
391
  return this.successResult({
@@ -510,13 +394,7 @@ export class CrewlyMcpServer {
510
394
  name: team.name,
511
395
  memberCount: team.members.length,
512
396
  },
513
- members: team.members.map((m) => ({
514
- id: m.id,
515
- name: m.name,
516
- role: m.role,
517
- agentStatus: m.agentStatus,
518
- workingStatus: m.workingStatus,
519
- })),
397
+ members: team.members.map((m) => this.formatMember(m)),
520
398
  });
521
399
  }
522
400
  // Summary of all teams
@@ -586,6 +464,133 @@ export class CrewlyMcpServer {
586
464
  });
587
465
  }
588
466
  // ========================= Helpers =========================
467
+ // ========================= Credential handlers =========================
468
+ /**
469
+ * Handle crewly_credential_list: return credential metadata (no values).
470
+ */
471
+ async handleCredentialList(args) {
472
+ const type = args.type;
473
+ const provider = args.provider;
474
+ const store = getCredentialStoreService();
475
+ let credentials = await store.listCredentials();
476
+ if (type)
477
+ credentials = credentials.filter((c) => c.type === type);
478
+ if (provider)
479
+ credentials = credentials.filter((c) => c.provider === provider);
480
+ return this.successResult(credentials.map((c) => ({
481
+ id: c.id,
482
+ name: c.name,
483
+ type: c.type,
484
+ provider: c.provider,
485
+ helper: c.helper,
486
+ scopes: c.scopes,
487
+ accountEmail: c.accountEmail,
488
+ status: c.status,
489
+ createdAt: c.createdAt,
490
+ lastUsedAt: c.lastUsedAt,
491
+ expiresAt: c.expiresAt,
492
+ })));
493
+ }
494
+ /**
495
+ * Handle crewly_credential_add_api_key: store an API key.
496
+ */
497
+ async handleCredentialAddApiKey(args) {
498
+ const name = args.name;
499
+ const provider = args.provider;
500
+ const value = args.value;
501
+ if (!name || !provider || !value) {
502
+ return this.errorResult('name, provider, and value are required');
503
+ }
504
+ const cred = await getCredentialStoreService().addApiKey({ name, provider, value });
505
+ return this.successResult({
506
+ id: cred.id,
507
+ name: cred.name,
508
+ provider: cred.provider,
509
+ type: cred.type,
510
+ createdAt: cred.createdAt,
511
+ });
512
+ }
513
+ /**
514
+ * Handle crewly_credential_oauth_import_gemini_cli: capture the current
515
+ * gemini-cli-workspace extension login into an encrypted Crewly credential.
516
+ */
517
+ async handleCredentialImportGeminiCli(args) {
518
+ const name = args.name;
519
+ if (!name) {
520
+ return this.errorResult('name is required');
521
+ }
522
+ try {
523
+ const payload = await this.getGeminiCliHelper().captureFromFile();
524
+ const cred = await getCredentialStoreService().addOAuth({
525
+ name,
526
+ provider: 'google',
527
+ helper: 'gemini-cli-workspace',
528
+ payload,
529
+ });
530
+ return this.successResult({
531
+ id: cred.id,
532
+ name: cred.name,
533
+ accountEmail: cred.accountEmail,
534
+ scopes: cred.scopes,
535
+ type: cred.type,
536
+ helper: cred.helper,
537
+ });
538
+ }
539
+ catch (err) {
540
+ const message = err instanceof Error ? err.message : String(err);
541
+ return this.errorResult(message);
542
+ }
543
+ }
544
+ /**
545
+ * Handle crewly_credential_clear_gemini_cli_file: delete the extension's
546
+ * cached token file so the next extension login captures a fresh account.
547
+ */
548
+ async handleCredentialClearGeminiCliFile() {
549
+ await this.getGeminiCliHelper().clearExtensionFile();
550
+ return this.successResult({ cleared: true });
551
+ }
552
+ /**
553
+ * Handle crewly_credential_delete: remove a credential.
554
+ */
555
+ async handleCredentialDelete(args) {
556
+ const id = args.id;
557
+ if (!id)
558
+ return this.errorResult('id is required');
559
+ try {
560
+ await getCredentialStoreService().deleteCredential(id);
561
+ return this.successResult({ deleted: true, id });
562
+ }
563
+ catch (err) {
564
+ return this.errorResult(err instanceof Error ? err.message : String(err));
565
+ }
566
+ }
567
+ /**
568
+ * Handle crewly_execute_skill: run a skill with optional credential bindings.
569
+ */
570
+ async handleExecuteSkill(args) {
571
+ const skillId = args.skillId;
572
+ if (!skillId)
573
+ return this.errorResult('skillId is required');
574
+ const credentialBindings = args.credentialBindings;
575
+ const context = {
576
+ agentId: args.agentId || 'mcp-agent',
577
+ roleId: args.roleId || 'default',
578
+ userInput: args.userInput,
579
+ credentialBindings,
580
+ };
581
+ try {
582
+ const result = await getSkillExecutorService().executeSkill(skillId, context);
583
+ return this.successResult({
584
+ success: result.success,
585
+ output: result.output,
586
+ error: result.error,
587
+ durationMs: result.durationMs,
588
+ });
589
+ }
590
+ catch (err) {
591
+ return this.errorResult(err instanceof Error ? err.message : String(err));
592
+ }
593
+ }
589
594
  /**
590
595
  * Create a success result with JSON-serialized content.
591
596
  *