crewly 1.20.133 → 1.20.135

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 (270) hide show
  1. package/config/skills/agent/core/block-task/SKILL.md +16 -3
  2. package/dist/backend/backend/src/constants.d.ts +82 -0
  3. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  4. package/dist/backend/backend/src/constants.js +87 -0
  5. package/dist/backend/backend/src/constants.js.map +1 -1
  6. package/dist/backend/backend/src/controllers/bundle/bundle.controller.d.ts +44 -0
  7. package/dist/backend/backend/src/controllers/bundle/bundle.controller.d.ts.map +1 -0
  8. package/dist/backend/backend/src/controllers/bundle/bundle.controller.js +122 -0
  9. package/dist/backend/backend/src/controllers/bundle/bundle.controller.js.map +1 -0
  10. package/dist/backend/backend/src/controllers/bundle/bundle.routes.d.ts +25 -0
  11. package/dist/backend/backend/src/controllers/bundle/bundle.routes.d.ts.map +1 -0
  12. package/dist/backend/backend/src/controllers/bundle/bundle.routes.js +33 -0
  13. package/dist/backend/backend/src/controllers/bundle/bundle.routes.js.map +1 -0
  14. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +6 -1
  15. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  16. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +9 -2
  17. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  18. package/dist/backend/backend/src/index.d.ts.map +1 -1
  19. package/dist/backend/backend/src/index.js +28 -0
  20. package/dist/backend/backend/src/index.js.map +1 -1
  21. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  22. package/dist/backend/backend/src/routes/api.routes.js +4 -0
  23. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  24. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +43 -7
  25. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  26. package/dist/backend/backend/src/services/agent/agent-registration.service.js +144 -51
  27. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  28. package/dist/backend/backend/src/services/agent/registration-flow-registry.d.ts +92 -0
  29. package/dist/backend/backend/src/services/agent/registration-flow-registry.d.ts.map +1 -0
  30. package/dist/backend/backend/src/services/agent/registration-flow-registry.js +121 -0
  31. package/dist/backend/backend/src/services/agent/registration-flow-registry.js.map +1 -0
  32. package/dist/backend/backend/src/services/agent/resumed-kickoff.d.ts +66 -0
  33. package/dist/backend/backend/src/services/agent/resumed-kickoff.d.ts.map +1 -0
  34. package/dist/backend/backend/src/services/agent/resumed-kickoff.js +72 -0
  35. package/dist/backend/backend/src/services/agent/resumed-kickoff.js.map +1 -0
  36. package/dist/backend/backend/src/services/bundle/bundle-apply.factory.d.ts +62 -0
  37. package/dist/backend/backend/src/services/bundle/bundle-apply.factory.d.ts.map +1 -0
  38. package/dist/backend/backend/src/services/bundle/bundle-apply.factory.js +173 -0
  39. package/dist/backend/backend/src/services/bundle/bundle-apply.factory.js.map +1 -0
  40. package/dist/backend/backend/src/services/bundle/bundle-apply.service.d.ts +359 -0
  41. package/dist/backend/backend/src/services/bundle/bundle-apply.service.d.ts.map +1 -0
  42. package/dist/backend/backend/src/services/bundle/bundle-apply.service.js +888 -0
  43. package/dist/backend/backend/src/services/bundle/bundle-apply.service.js.map +1 -0
  44. package/dist/backend/backend/src/services/bundle/bundle-catalog.d.ts +167 -0
  45. package/dist/backend/backend/src/services/bundle/bundle-catalog.d.ts.map +1 -0
  46. package/dist/backend/backend/src/services/bundle/bundle-catalog.js +248 -0
  47. package/dist/backend/backend/src/services/bundle/bundle-catalog.js.map +1 -0
  48. package/dist/backend/backend/src/services/bundle/bundle-connectors.d.ts +43 -0
  49. package/dist/backend/backend/src/services/bundle/bundle-connectors.d.ts.map +1 -0
  50. package/dist/backend/backend/src/services/bundle/bundle-connectors.js +57 -0
  51. package/dist/backend/backend/src/services/bundle/bundle-connectors.js.map +1 -0
  52. package/dist/backend/backend/src/services/bundle/bundle-deps.d.ts +37 -0
  53. package/dist/backend/backend/src/services/bundle/bundle-deps.d.ts.map +1 -0
  54. package/dist/backend/backend/src/services/bundle/bundle-deps.js +60 -0
  55. package/dist/backend/backend/src/services/bundle/bundle-deps.js.map +1 -0
  56. package/dist/backend/backend/src/services/bundle/bundle-manifest.d.ts +93 -0
  57. package/dist/backend/backend/src/services/bundle/bundle-manifest.d.ts.map +1 -0
  58. package/dist/backend/backend/src/services/bundle/bundle-manifest.js +532 -0
  59. package/dist/backend/backend/src/services/bundle/bundle-manifest.js.map +1 -0
  60. package/dist/backend/backend/src/services/bundle/bundle-placeholders.d.ts +100 -0
  61. package/dist/backend/backend/src/services/bundle/bundle-placeholders.d.ts.map +1 -0
  62. package/dist/backend/backend/src/services/bundle/bundle-placeholders.js +183 -0
  63. package/dist/backend/backend/src/services/bundle/bundle-placeholders.js.map +1 -0
  64. package/dist/backend/backend/src/services/bundle/bundle-runtime.d.ts +36 -0
  65. package/dist/backend/backend/src/services/bundle/bundle-runtime.d.ts.map +1 -0
  66. package/dist/backend/backend/src/services/bundle/bundle-runtime.js +38 -0
  67. package/dist/backend/backend/src/services/bundle/bundle-runtime.js.map +1 -0
  68. package/dist/backend/backend/src/services/bundle/bundle-skill-installer.d.ts +105 -0
  69. package/dist/backend/backend/src/services/bundle/bundle-skill-installer.d.ts.map +1 -0
  70. package/dist/backend/backend/src/services/bundle/bundle-skill-installer.js +144 -0
  71. package/dist/backend/backend/src/services/bundle/bundle-skill-installer.js.map +1 -0
  72. package/dist/backend/backend/src/services/bundle/bundle-state.store.d.ts +48 -0
  73. package/dist/backend/backend/src/services/bundle/bundle-state.store.d.ts.map +1 -0
  74. package/dist/backend/backend/src/services/bundle/bundle-state.store.js +90 -0
  75. package/dist/backend/backend/src/services/bundle/bundle-state.store.js.map +1 -0
  76. package/dist/backend/backend/src/services/bundle/bundle-team.builder.d.ts +81 -0
  77. package/dist/backend/backend/src/services/bundle/bundle-team.builder.d.ts.map +1 -0
  78. package/dist/backend/backend/src/services/bundle/bundle-team.builder.js +172 -0
  79. package/dist/backend/backend/src/services/bundle/bundle-team.builder.js.map +1 -0
  80. package/dist/backend/backend/src/services/bundle/bundle-time.d.ts +59 -0
  81. package/dist/backend/backend/src/services/bundle/bundle-time.d.ts.map +1 -0
  82. package/dist/backend/backend/src/services/bundle/bundle-time.js +98 -0
  83. package/dist/backend/backend/src/services/bundle/bundle-time.js.map +1 -0
  84. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.d.ts.map +1 -1
  85. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js +5 -0
  86. package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js.map +1 -1
  87. package/dist/backend/backend/src/services/core/storage.service.js +1 -1
  88. package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
  89. package/dist/backend/backend/src/services/core/teams-backup.service.d.ts.map +1 -1
  90. package/dist/backend/backend/src/services/core/teams-backup.service.js +4 -2
  91. package/dist/backend/backend/src/services/core/teams-backup.service.js.map +1 -1
  92. package/dist/backend/backend/src/services/onboarding/onboarding-checklist.factory.d.ts.map +1 -1
  93. package/dist/backend/backend/src/services/onboarding/onboarding-checklist.factory.js +2 -0
  94. package/dist/backend/backend/src/services/onboarding/onboarding-checklist.factory.js.map +1 -1
  95. package/dist/backend/backend/src/services/onboarding/onboarding-checklist.service.d.ts +14 -2
  96. package/dist/backend/backend/src/services/onboarding/onboarding-checklist.service.d.ts.map +1 -1
  97. package/dist/backend/backend/src/services/onboarding/onboarding-checklist.service.js +37 -1
  98. package/dist/backend/backend/src/services/onboarding/onboarding-checklist.service.js.map +1 -1
  99. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  100. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +9 -1
  101. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  102. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  103. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +8 -0
  104. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  105. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +21 -0
  106. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  107. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +85 -0
  108. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  109. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +32 -0
  110. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  111. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +60 -1
  112. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  113. package/dist/backend/backend/src/services/template/template.service.d.ts.map +1 -1
  114. package/dist/backend/backend/src/services/template/template.service.js +5 -2
  115. package/dist/backend/backend/src/services/template/template.service.js.map +1 -1
  116. package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts.map +1 -1
  117. package/dist/backend/backend/src/services/workflow/cron-task.service.js +4 -2
  118. package/dist/backend/backend/src/services/workflow/cron-task.service.js.map +1 -1
  119. package/dist/backend/backend/src/types/solution-bundle.types.d.ts +367 -0
  120. package/dist/backend/backend/src/types/solution-bundle.types.d.ts.map +1 -0
  121. package/dist/backend/backend/src/types/solution-bundle.types.js +17 -0
  122. package/dist/backend/backend/src/types/solution-bundle.types.js.map +1 -0
  123. package/dist/backend/backend/src/types/team-template.types.d.ts +8 -0
  124. package/dist/backend/backend/src/types/team-template.types.d.ts.map +1 -1
  125. package/dist/backend/backend/src/types/team-template.types.js.map +1 -1
  126. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +37 -0
  127. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  128. package/dist/backend/backend/src/types/v2/work-item.types.js +33 -0
  129. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  130. package/dist/backend/build-info.json +2 -2
  131. package/dist/cli/backend/src/constants.d.ts +82 -0
  132. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  133. package/dist/cli/backend/src/constants.js +87 -0
  134. package/dist/cli/backend/src/constants.js.map +1 -1
  135. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +43 -7
  136. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  137. package/dist/cli/backend/src/services/agent/agent-registration.service.js +144 -51
  138. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  139. package/dist/cli/backend/src/services/agent/registration-flow-registry.d.ts +92 -0
  140. package/dist/cli/backend/src/services/agent/registration-flow-registry.d.ts.map +1 -0
  141. package/dist/cli/backend/src/services/agent/registration-flow-registry.js +121 -0
  142. package/dist/cli/backend/src/services/agent/registration-flow-registry.js.map +1 -0
  143. package/dist/cli/backend/src/services/agent/resumed-kickoff.d.ts +66 -0
  144. package/dist/cli/backend/src/services/agent/resumed-kickoff.d.ts.map +1 -0
  145. package/dist/cli/backend/src/services/agent/resumed-kickoff.js +72 -0
  146. package/dist/cli/backend/src/services/agent/resumed-kickoff.js.map +1 -0
  147. package/dist/cli/backend/src/services/bundle/bundle-apply.service.d.ts +359 -0
  148. package/dist/cli/backend/src/services/bundle/bundle-apply.service.d.ts.map +1 -0
  149. package/dist/cli/backend/src/services/bundle/bundle-apply.service.js +888 -0
  150. package/dist/cli/backend/src/services/bundle/bundle-apply.service.js.map +1 -0
  151. package/dist/cli/backend/src/services/bundle/bundle-catalog.d.ts +167 -0
  152. package/dist/cli/backend/src/services/bundle/bundle-catalog.d.ts.map +1 -0
  153. package/dist/cli/backend/src/services/bundle/bundle-catalog.js +248 -0
  154. package/dist/cli/backend/src/services/bundle/bundle-catalog.js.map +1 -0
  155. package/dist/cli/backend/src/services/bundle/bundle-deps.d.ts +37 -0
  156. package/dist/cli/backend/src/services/bundle/bundle-deps.d.ts.map +1 -0
  157. package/dist/cli/backend/src/services/bundle/bundle-deps.js +60 -0
  158. package/dist/cli/backend/src/services/bundle/bundle-deps.js.map +1 -0
  159. package/dist/cli/backend/src/services/bundle/bundle-manifest.d.ts +93 -0
  160. package/dist/cli/backend/src/services/bundle/bundle-manifest.d.ts.map +1 -0
  161. package/dist/cli/backend/src/services/bundle/bundle-manifest.js +532 -0
  162. package/dist/cli/backend/src/services/bundle/bundle-manifest.js.map +1 -0
  163. package/dist/cli/backend/src/services/bundle/bundle-placeholders.d.ts +100 -0
  164. package/dist/cli/backend/src/services/bundle/bundle-placeholders.d.ts.map +1 -0
  165. package/dist/cli/backend/src/services/bundle/bundle-placeholders.js +183 -0
  166. package/dist/cli/backend/src/services/bundle/bundle-placeholders.js.map +1 -0
  167. package/dist/cli/backend/src/services/bundle/bundle-runtime.d.ts +36 -0
  168. package/dist/cli/backend/src/services/bundle/bundle-runtime.d.ts.map +1 -0
  169. package/dist/cli/backend/src/services/bundle/bundle-runtime.js +38 -0
  170. package/dist/cli/backend/src/services/bundle/bundle-runtime.js.map +1 -0
  171. package/dist/cli/backend/src/services/bundle/bundle-skill-installer.d.ts +105 -0
  172. package/dist/cli/backend/src/services/bundle/bundle-skill-installer.d.ts.map +1 -0
  173. package/dist/cli/backend/src/services/bundle/bundle-skill-installer.js +144 -0
  174. package/dist/cli/backend/src/services/bundle/bundle-skill-installer.js.map +1 -0
  175. package/dist/cli/backend/src/services/bundle/bundle-state.store.d.ts +48 -0
  176. package/dist/cli/backend/src/services/bundle/bundle-state.store.d.ts.map +1 -0
  177. package/dist/cli/backend/src/services/bundle/bundle-state.store.js +90 -0
  178. package/dist/cli/backend/src/services/bundle/bundle-state.store.js.map +1 -0
  179. package/dist/cli/backend/src/services/bundle/bundle-team.builder.d.ts +81 -0
  180. package/dist/cli/backend/src/services/bundle/bundle-team.builder.d.ts.map +1 -0
  181. package/dist/cli/backend/src/services/bundle/bundle-team.builder.js +172 -0
  182. package/dist/cli/backend/src/services/bundle/bundle-team.builder.js.map +1 -0
  183. package/dist/cli/backend/src/services/bundle/bundle-time.d.ts +59 -0
  184. package/dist/cli/backend/src/services/bundle/bundle-time.d.ts.map +1 -0
  185. package/dist/cli/backend/src/services/bundle/bundle-time.js +98 -0
  186. package/dist/cli/backend/src/services/bundle/bundle-time.js.map +1 -0
  187. package/dist/cli/backend/src/services/core/storage.service.js +1 -1
  188. package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
  189. package/dist/cli/backend/src/services/core/teams-backup.service.d.ts.map +1 -1
  190. package/dist/cli/backend/src/services/core/teams-backup.service.js +4 -2
  191. package/dist/cli/backend/src/services/core/teams-backup.service.js.map +1 -1
  192. package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.d.ts +72 -0
  193. package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -0
  194. package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.js +389 -0
  195. package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -0
  196. package/dist/cli/backend/src/services/messaging/index.d.ts +15 -0
  197. package/dist/cli/backend/src/services/messaging/index.d.ts.map +1 -0
  198. package/dist/cli/backend/src/services/messaging/index.js +20 -0
  199. package/dist/cli/backend/src/services/messaging/index.js.map +1 -0
  200. package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts +224 -0
  201. package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -0
  202. package/dist/cli/backend/src/services/messaging/queue-processor.service.js +969 -0
  203. package/dist/cli/backend/src/services/messaging/queue-processor.service.js.map +1 -0
  204. package/dist/cli/backend/src/services/messaging/response-router.service.d.ts +110 -0
  205. package/dist/cli/backend/src/services/messaging/response-router.service.d.ts.map +1 -0
  206. package/dist/cli/backend/src/services/messaging/response-router.service.js +268 -0
  207. package/dist/cli/backend/src/services/messaging/response-router.service.js.map +1 -0
  208. package/dist/cli/backend/src/services/onboarding/onboarding-checklist.service.d.ts +14 -2
  209. package/dist/cli/backend/src/services/onboarding/onboarding-checklist.service.d.ts.map +1 -1
  210. package/dist/cli/backend/src/services/onboarding/onboarding-checklist.service.js +37 -1
  211. package/dist/cli/backend/src/services/onboarding/onboarding-checklist.service.js.map +1 -1
  212. package/dist/cli/backend/src/services/orchestrator/commitment-approval-guard.d.ts +133 -0
  213. package/dist/cli/backend/src/services/orchestrator/commitment-approval-guard.d.ts.map +1 -0
  214. package/dist/cli/backend/src/services/orchestrator/commitment-approval-guard.js +232 -0
  215. package/dist/cli/backend/src/services/orchestrator/commitment-approval-guard.js.map +1 -0
  216. package/dist/cli/backend/src/services/skill/skill-catalog.service.d.ts +277 -0
  217. package/dist/cli/backend/src/services/skill/skill-catalog.service.d.ts.map +1 -0
  218. package/dist/cli/backend/src/services/skill/skill-catalog.service.js +708 -0
  219. package/dist/cli/backend/src/services/skill/skill-catalog.service.js.map +1 -0
  220. package/dist/cli/backend/src/services/skill-setup/skill-install-job.service.d.ts +243 -0
  221. package/dist/cli/backend/src/services/skill-setup/skill-install-job.service.d.ts.map +1 -0
  222. package/dist/cli/backend/src/services/skill-setup/skill-install-job.service.js +439 -0
  223. package/dist/cli/backend/src/services/skill-setup/skill-install-job.service.js.map +1 -0
  224. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +21 -0
  225. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  226. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +85 -0
  227. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  228. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +32 -0
  229. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  230. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +60 -1
  231. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  232. package/dist/cli/backend/src/services/template/template.service.d.ts.map +1 -1
  233. package/dist/cli/backend/src/services/template/template.service.js +5 -2
  234. package/dist/cli/backend/src/services/template/template.service.js.map +1 -1
  235. package/dist/cli/backend/src/services/workflow/cron-task.service.d.ts +316 -0
  236. package/dist/cli/backend/src/services/workflow/cron-task.service.d.ts.map +1 -0
  237. package/dist/cli/backend/src/services/workflow/cron-task.service.js +1043 -0
  238. package/dist/cli/backend/src/services/workflow/cron-task.service.js.map +1 -0
  239. package/dist/cli/backend/src/types/cron-task.types.d.ts +95 -0
  240. package/dist/cli/backend/src/types/cron-task.types.d.ts.map +1 -0
  241. package/dist/cli/backend/src/types/cron-task.types.js +10 -0
  242. package/dist/cli/backend/src/types/cron-task.types.js.map +1 -0
  243. package/dist/cli/backend/src/types/solution-bundle.types.d.ts +367 -0
  244. package/dist/cli/backend/src/types/solution-bundle.types.d.ts.map +1 -0
  245. package/dist/cli/backend/src/types/solution-bundle.types.js +17 -0
  246. package/dist/cli/backend/src/types/solution-bundle.types.js.map +1 -0
  247. package/dist/cli/backend/src/types/team-template.types.d.ts +8 -0
  248. package/dist/cli/backend/src/types/team-template.types.d.ts.map +1 -1
  249. package/dist/cli/backend/src/types/team-template.types.js.map +1 -1
  250. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +37 -0
  251. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  252. package/dist/cli/backend/src/types/v2/work-item.types.js +33 -0
  253. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  254. package/dist/cli/cli/src/commands/deploy-bundle.d.ts +160 -0
  255. package/dist/cli/cli/src/commands/deploy-bundle.d.ts.map +1 -0
  256. package/dist/cli/cli/src/commands/deploy-bundle.js +386 -0
  257. package/dist/cli/cli/src/commands/deploy-bundle.js.map +1 -0
  258. package/dist/cli/cli/src/commands/onboard.d.ts +32 -1
  259. package/dist/cli/cli/src/commands/onboard.d.ts.map +1 -1
  260. package/dist/cli/cli/src/commands/onboard.js +80 -3
  261. package/dist/cli/cli/src/commands/onboard.js.map +1 -1
  262. package/dist/cli/cli/src/constants.d.ts +5 -0
  263. package/dist/cli/cli/src/constants.d.ts.map +1 -1
  264. package/dist/cli/cli/src/constants.js +5 -0
  265. package/dist/cli/cli/src/constants.js.map +1 -1
  266. package/dist/cli/cli/src/index.js +15 -0
  267. package/dist/cli/cli/src/index.js.map +1 -1
  268. package/frontend/dist/assets/{index-e6c403b6.js → index-2c7ee4a6.js} +276 -276
  269. package/frontend/dist/index.html +1 -1
  270. package/package.json +1 -1
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Registration flow registry: at most one live registration/kickoff flow per
3
+ * agent session, bound to the PTY it was started for.
4
+ *
5
+ * Background (2026-09-25 startup-prompt loop): two launchers brought the same
6
+ * agent up at boot. The second one killed the first one's PTY and built a new
7
+ * one under the same session name, but the first one's background
8
+ * registration flow was never cancelled. It kept polling the session by name,
9
+ * found the replacement PTY, and typed its own kickoff into it, so the agent
10
+ * saw two kickoffs in one resumed conversation.
11
+ *
12
+ * A flow is therefore cancelled when:
13
+ * - a newer flow starts for the same session (it supersedes the old one),
14
+ * - the session is killed or recreated ({@link RegistrationFlowRegistry.cancel}), or
15
+ * - the PTY now registered under the session name is not the one the flow was
16
+ * started for. This catches kills from any code path, including ones that
17
+ * never call `cancel`.
18
+ *
19
+ * Senders must check {@link RegistrationFlowRegistry.isCancelled} right before
20
+ * every write to the terminal.
21
+ *
22
+ * @module services/agent/registration-flow-registry
23
+ */
24
+ /** A live registration flow for one session incarnation. */
25
+ export interface RegistrationFlow {
26
+ /** Session name the flow delivers into. */
27
+ readonly sessionName: string;
28
+ /** Monotonic per-session generation; a newer flow has a higher number. */
29
+ readonly generation: number;
30
+ /** Aborted when the flow is superseded, cancelled or its PTY is replaced. */
31
+ readonly signal: AbortSignal;
32
+ }
33
+ /** Why a flow was cancelled (logged by the caller). */
34
+ export type RegistrationFlowCancelReason = 'superseded' | 'session-killed' | 'session-replaced' | 'runtime-exited';
35
+ /**
36
+ * Tracks the single live registration flow per session.
37
+ *
38
+ * @typeParam TSession - Identity object of a live PTY (compared by reference)
39
+ */
40
+ export declare class RegistrationFlowRegistry<TSession extends object = object> {
41
+ private readonly current;
42
+ private readonly bySignal;
43
+ private readonly generations;
44
+ /**
45
+ * Start a flow for a session. Any earlier flow for the same session is
46
+ * aborted first: only the newest incarnation may deliver a kickoff.
47
+ *
48
+ * @param sessionName - Session the flow delivers into
49
+ * @param boundSession - The PTY currently registered under that name (undefined for in-process runtimes)
50
+ * @returns The new flow and whether an older one was superseded
51
+ */
52
+ begin(sessionName: string, boundSession: TSession | undefined): {
53
+ flow: RegistrationFlow;
54
+ superseded: boolean;
55
+ };
56
+ /**
57
+ * Abort the live flow for a session, if any.
58
+ *
59
+ * @param sessionName - Session whose flow to abort
60
+ * @param reason - Why (recorded on the abort signal)
61
+ * @returns True when a live flow was aborted
62
+ */
63
+ cancel(sessionName: string, reason: RegistrationFlowCancelReason): boolean;
64
+ /**
65
+ * Decide whether a flow may still write to its session. Aborts the flow
66
+ * (and says so) when the session's PTY has been replaced or removed since
67
+ * the flow started, or a newer flow took over.
68
+ *
69
+ * Signals the registry does not know are judged by `aborted` alone, so
70
+ * callers can pass any AbortSignal.
71
+ *
72
+ * @param signal - The flow's abort signal (undefined = not a guarded flow)
73
+ * @param currentSession - The PTY registered under the session name right now
74
+ * @returns True when the flow must not write anything further
75
+ */
76
+ isCancelled(signal: AbortSignal | undefined, currentSession: TSession | undefined): boolean;
77
+ /**
78
+ * Mark a flow finished. Only removes it while it is still the live flow,
79
+ * so a finishing old flow can never drop its successor's entry.
80
+ *
81
+ * @param flow - The finished flow
82
+ */
83
+ end(flow: RegistrationFlow): void;
84
+ /**
85
+ * Whether a session has a live (not yet finished or aborted) flow.
86
+ *
87
+ * @param sessionName - Session to check
88
+ * @returns True when a flow is in progress
89
+ */
90
+ has(sessionName: string): boolean;
91
+ }
92
+ //# sourceMappingURL=registration-flow-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registration-flow-registry.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/registration-flow-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,4DAA4D;AAC5D,MAAM,WAAW,gBAAgB;IAChC,2CAA2C;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC7B;AAUD,uDAAuD;AACvD,MAAM,MAAM,4BAA4B,GACrC,YAAY,GACZ,gBAAgB,GAChB,kBAAkB,GAClB,gBAAgB,CAAC;AAEpB;;;;GAIG;AACH,qBAAa,wBAAwB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM;IACrE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;IACnE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoD;IAC7E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IAEzD;;;;;;;OAOG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,GAAG,SAAS,GAAG;QAAE,IAAI,EAAE,gBAAgB,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE;IAY/G;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,4BAA4B,GAAG,OAAO;IAQ1E;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,EAAE,cAAc,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO;IAkB3F;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAKjC;;;;;OAKG;IACH,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;CAGjC"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Registration flow registry: at most one live registration/kickoff flow per
3
+ * agent session, bound to the PTY it was started for.
4
+ *
5
+ * Background (2026-09-25 startup-prompt loop): two launchers brought the same
6
+ * agent up at boot. The second one killed the first one's PTY and built a new
7
+ * one under the same session name, but the first one's background
8
+ * registration flow was never cancelled. It kept polling the session by name,
9
+ * found the replacement PTY, and typed its own kickoff into it, so the agent
10
+ * saw two kickoffs in one resumed conversation.
11
+ *
12
+ * A flow is therefore cancelled when:
13
+ * - a newer flow starts for the same session (it supersedes the old one),
14
+ * - the session is killed or recreated ({@link RegistrationFlowRegistry.cancel}), or
15
+ * - the PTY now registered under the session name is not the one the flow was
16
+ * started for. This catches kills from any code path, including ones that
17
+ * never call `cancel`.
18
+ *
19
+ * Senders must check {@link RegistrationFlowRegistry.isCancelled} right before
20
+ * every write to the terminal.
21
+ *
22
+ * @module services/agent/registration-flow-registry
23
+ */
24
+ /**
25
+ * Tracks the single live registration flow per session.
26
+ *
27
+ * @typeParam TSession - Identity object of a live PTY (compared by reference)
28
+ */
29
+ export class RegistrationFlowRegistry {
30
+ current = new Map();
31
+ bySignal = new WeakMap();
32
+ generations = new Map();
33
+ /**
34
+ * Start a flow for a session. Any earlier flow for the same session is
35
+ * aborted first: only the newest incarnation may deliver a kickoff.
36
+ *
37
+ * @param sessionName - Session the flow delivers into
38
+ * @param boundSession - The PTY currently registered under that name (undefined for in-process runtimes)
39
+ * @returns The new flow and whether an older one was superseded
40
+ */
41
+ begin(sessionName, boundSession) {
42
+ const superseded = this.cancel(sessionName, 'superseded');
43
+ const generation = (this.generations.get(sessionName) ?? 0) + 1;
44
+ this.generations.set(sessionName, generation);
45
+ const controller = new AbortController();
46
+ const flow = { sessionName, generation, signal: controller.signal };
47
+ const record = { flow, controller, boundSession };
48
+ this.current.set(sessionName, record);
49
+ this.bySignal.set(controller.signal, record);
50
+ return { flow, superseded };
51
+ }
52
+ /**
53
+ * Abort the live flow for a session, if any.
54
+ *
55
+ * @param sessionName - Session whose flow to abort
56
+ * @param reason - Why (recorded on the abort signal)
57
+ * @returns True when a live flow was aborted
58
+ */
59
+ cancel(sessionName, reason) {
60
+ const record = this.current.get(sessionName);
61
+ if (!record)
62
+ return false;
63
+ this.current.delete(sessionName);
64
+ if (!record.controller.signal.aborted)
65
+ record.controller.abort(reason);
66
+ return true;
67
+ }
68
+ /**
69
+ * Decide whether a flow may still write to its session. Aborts the flow
70
+ * (and says so) when the session's PTY has been replaced or removed since
71
+ * the flow started, or a newer flow took over.
72
+ *
73
+ * Signals the registry does not know are judged by `aborted` alone, so
74
+ * callers can pass any AbortSignal.
75
+ *
76
+ * @param signal - The flow's abort signal (undefined = not a guarded flow)
77
+ * @param currentSession - The PTY registered under the session name right now
78
+ * @returns True when the flow must not write anything further
79
+ */
80
+ isCancelled(signal, currentSession) {
81
+ if (!signal)
82
+ return false;
83
+ if (signal.aborted)
84
+ return true;
85
+ const record = this.bySignal.get(signal);
86
+ if (!record)
87
+ return false;
88
+ const { sessionName } = record.flow;
89
+ if (this.current.get(sessionName) !== record) {
90
+ record.controller.abort('superseded');
91
+ return true;
92
+ }
93
+ if (record.boundSession !== undefined && currentSession !== record.boundSession) {
94
+ this.current.delete(sessionName);
95
+ record.controller.abort('session-replaced');
96
+ return true;
97
+ }
98
+ return false;
99
+ }
100
+ /**
101
+ * Mark a flow finished. Only removes it while it is still the live flow,
102
+ * so a finishing old flow can never drop its successor's entry.
103
+ *
104
+ * @param flow - The finished flow
105
+ */
106
+ end(flow) {
107
+ const record = this.current.get(flow.sessionName);
108
+ if (record && record.flow === flow)
109
+ this.current.delete(flow.sessionName);
110
+ }
111
+ /**
112
+ * Whether a session has a live (not yet finished or aborted) flow.
113
+ *
114
+ * @param sessionName - Session to check
115
+ * @returns True when a flow is in progress
116
+ */
117
+ has(sessionName) {
118
+ return this.current.has(sessionName);
119
+ }
120
+ }
121
+ //# sourceMappingURL=registration-flow-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registration-flow-registry.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/registration-flow-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Kickoff text for an agent whose runtime conversation was resumed
3
+ * (Claude Code `--resume`, Codex `resume`) at a Crewly restart.
4
+ *
5
+ * The full kickoff ("Begin your work now… Step 1, Step 2, Step 3
6
+ * (register-self)") typed into a resumed conversation reads, to the agent, as
7
+ * being started over from scratch. Every release restart used to do that, and
8
+ * agents re-announced themselves and redid their startup steps (2026-09-25
9
+ * startup-prompt loop). A resumed agent only needs to register again, since
10
+ * the backend's registration state did not survive the restart, and then carry on.
11
+ *
12
+ * @module services/agent/resumed-kickoff
13
+ */
14
+ /** Where the register-self skill lives, relative to the Crewly project root. */
15
+ export declare const REGISTER_SELF_SKILL_PATHS: {
16
+ /** Team members: config/skills/agent/core/register-self */
17
+ readonly AGENT: readonly ["config", "skills", "agent", "core", "register-self", "execute.sh"];
18
+ /** Orchestrator: config/skills/orchestrator/register-self */
19
+ readonly ORCHESTRATOR: readonly ["config", "skills", "orchestrator", "register-self", "execute.sh"];
20
+ };
21
+ /** Fixed wording of the resumed kickoff. */
22
+ export declare const RESUMED_KICKOFF_TEXT: {
23
+ readonly OPENING: "[Crewly restarted — this is your same conversation, resumed.";
24
+ readonly REGISTER: "Run register-self now (only that step):";
25
+ readonly CONTINUE: "— then continue exactly where you left off. Do not redo your startup steps or re-announce yourself.";
26
+ /** Only for runtimes whose instructions are not loaded as a system prompt. */
27
+ readonly CONTEXT_REFRESH: "If your instructions are no longer in your context, re-read";
28
+ readonly CLOSING: "]";
29
+ };
30
+ /**
31
+ * Marker that identifies a resumed kickoff, for tests and log checks.
32
+ */
33
+ export declare const RESUMED_KICKOFF_MARKER: "[Crewly restarted — this is your same conversation, resumed.";
34
+ /**
35
+ * Build the exact register-self command the agent's full prompt tells it to
36
+ * run, so a resumed agent registers the same way a fresh one does.
37
+ *
38
+ * @param projectRoot - Crewly project root (where `config/skills` lives)
39
+ * @param sessionName - The agent's session name
40
+ * @param role - The agent's role
41
+ * @returns A shell command line
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * buildRegisterSelfCommand('/opt/crewly', 'team-sam-1', 'developer');
46
+ * // bash /opt/crewly/config/skills/agent/core/register-self/execute.sh '{"role":"developer","sessionName":"team-sam-1"}'
47
+ * ```
48
+ */
49
+ export declare function buildRegisterSelfCommand(projectRoot: string, sessionName: string, role: string): string;
50
+ /**
51
+ * Build the short kickoff for a resumed conversation.
52
+ *
53
+ * @param args.projectRoot - Crewly project root
54
+ * @param args.sessionName - The agent's session name
55
+ * @param args.role - The agent's role
56
+ * @param args.promptFilePath - Init prompt file to point at for a context refresh.
57
+ * Omit for Claude Code, whose prompt is loaded as its agent definition.
58
+ * @returns The single-line message to type into the runtime
59
+ */
60
+ export declare function buildResumedKickoff(args: {
61
+ projectRoot: string;
62
+ sessionName: string;
63
+ role: string;
64
+ promptFilePath?: string;
65
+ }): string;
66
+ //# sourceMappingURL=resumed-kickoff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resumed-kickoff.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/resumed-kickoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,gFAAgF;AAChF,eAAO,MAAM,yBAAyB;IACrC,2DAA2D;;IAE3D,6DAA6D;;CAEpD,CAAC;AAEX,4CAA4C;AAC5C,eAAO,MAAM,oBAAoB;;;;IAIhC,8EAA8E;;;CAGrE,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,sBAAsB,gEAA+B,CAAC;AAEnE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIvG;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,MAAM,CAOT"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Kickoff text for an agent whose runtime conversation was resumed
3
+ * (Claude Code `--resume`, Codex `resume`) at a Crewly restart.
4
+ *
5
+ * The full kickoff ("Begin your work now… Step 1, Step 2, Step 3
6
+ * (register-self)") typed into a resumed conversation reads, to the agent, as
7
+ * being started over from scratch. Every release restart used to do that, and
8
+ * agents re-announced themselves and redid their startup steps (2026-09-25
9
+ * startup-prompt loop). A resumed agent only needs to register again, since
10
+ * the backend's registration state did not survive the restart, and then carry on.
11
+ *
12
+ * @module services/agent/resumed-kickoff
13
+ */
14
+ import path from 'path';
15
+ import { ORCHESTRATOR_ROLE } from '../../constants.js';
16
+ /** Where the register-self skill lives, relative to the Crewly project root. */
17
+ export const REGISTER_SELF_SKILL_PATHS = {
18
+ /** Team members: config/skills/agent/core/register-self */
19
+ AGENT: ['config', 'skills', 'agent', 'core', 'register-self', 'execute.sh'],
20
+ /** Orchestrator: config/skills/orchestrator/register-self */
21
+ ORCHESTRATOR: ['config', 'skills', 'orchestrator', 'register-self', 'execute.sh'],
22
+ };
23
+ /** Fixed wording of the resumed kickoff. */
24
+ export const RESUMED_KICKOFF_TEXT = {
25
+ OPENING: '[Crewly restarted — this is your same conversation, resumed.',
26
+ REGISTER: 'Run register-self now (only that step):',
27
+ CONTINUE: '— then continue exactly where you left off. Do not redo your startup steps or re-announce yourself.',
28
+ /** Only for runtimes whose instructions are not loaded as a system prompt. */
29
+ CONTEXT_REFRESH: 'If your instructions are no longer in your context, re-read',
30
+ CLOSING: ']',
31
+ };
32
+ /**
33
+ * Marker that identifies a resumed kickoff, for tests and log checks.
34
+ */
35
+ export const RESUMED_KICKOFF_MARKER = RESUMED_KICKOFF_TEXT.OPENING;
36
+ /**
37
+ * Build the exact register-self command the agent's full prompt tells it to
38
+ * run, so a resumed agent registers the same way a fresh one does.
39
+ *
40
+ * @param projectRoot - Crewly project root (where `config/skills` lives)
41
+ * @param sessionName - The agent's session name
42
+ * @param role - The agent's role
43
+ * @returns A shell command line
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * buildRegisterSelfCommand('/opt/crewly', 'team-sam-1', 'developer');
48
+ * // bash /opt/crewly/config/skills/agent/core/register-self/execute.sh '{"role":"developer","sessionName":"team-sam-1"}'
49
+ * ```
50
+ */
51
+ export function buildRegisterSelfCommand(projectRoot, sessionName, role) {
52
+ const segments = role === ORCHESTRATOR_ROLE ? REGISTER_SELF_SKILL_PATHS.ORCHESTRATOR : REGISTER_SELF_SKILL_PATHS.AGENT;
53
+ const script = path.join(projectRoot, ...segments);
54
+ return `bash ${script} '${JSON.stringify({ role, sessionName })}'`;
55
+ }
56
+ /**
57
+ * Build the short kickoff for a resumed conversation.
58
+ *
59
+ * @param args.projectRoot - Crewly project root
60
+ * @param args.sessionName - The agent's session name
61
+ * @param args.role - The agent's role
62
+ * @param args.promptFilePath - Init prompt file to point at for a context refresh.
63
+ * Omit for Claude Code, whose prompt is loaded as its agent definition.
64
+ * @returns The single-line message to type into the runtime
65
+ */
66
+ export function buildResumedKickoff(args) {
67
+ const command = buildRegisterSelfCommand(args.projectRoot, args.sessionName, args.role);
68
+ const refresh = args.promptFilePath ? ` ${RESUMED_KICKOFF_TEXT.CONTEXT_REFRESH} ${args.promptFilePath}.` : '';
69
+ return (`${RESUMED_KICKOFF_TEXT.OPENING} ${RESUMED_KICKOFF_TEXT.REGISTER} ${command} ` +
70
+ `${RESUMED_KICKOFF_TEXT.CONTINUE}${refresh}${RESUMED_KICKOFF_TEXT.CLOSING}`);
71
+ }
72
+ //# sourceMappingURL=resumed-kickoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resumed-kickoff.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/resumed-kickoff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,gFAAgF;AAChF,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACxC,2DAA2D;IAC3D,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,CAAC;IAC3E,6DAA6D;IAC7D,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,CAAC;CACxE,CAAC;AAEX,4CAA4C;AAC5C,MAAM,CAAC,MAAM,oBAAoB,GAAG;IACnC,OAAO,EAAE,8DAA8D;IACvE,QAAQ,EAAE,yCAAyC;IACnD,QAAQ,EAAE,qGAAqG;IAC/G,8EAA8E;IAC9E,eAAe,EAAE,6DAA6D;IAC9E,OAAO,EAAE,GAAG;CACH,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC,OAAO,CAAC;AAEnE;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,wBAAwB,CAAC,WAAmB,EAAE,WAAmB,EAAE,IAAY;IAC9F,MAAM,QAAQ,GAAG,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC,CAAC,yBAAyB,CAAC,KAAK,CAAC;IACvH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,CAAC;IACnD,OAAO,QAAQ,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,GAAG,CAAC;AACpE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAKnC;IACA,MAAM,OAAO,GAAG,wBAAwB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,oBAAoB,CAAC,eAAe,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9G,OAAO,CACN,GAAG,oBAAoB,CAAC,OAAO,IAAI,oBAAoB,CAAC,QAAQ,IAAI,OAAO,GAAG;QAC9E,GAAG,oBAAoB,CAAC,QAAQ,GAAG,OAAO,GAAG,oBAAoB,CAAC,OAAO,EAAE,CAC3E,CAAC;AACH,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Real wiring of the bundle apply engine inside the backend.
3
+ *
4
+ * Adds the live collaborators to the base set (`bundle-deps.ts`): Slack
5
+ * through SlackTeamChannelService, the orchestrator through the chat path
6
+ * the onboarding first task uses, connector probes through the Cloud token
7
+ * services, and the running CronTaskService. Also runs the timer that
8
+ * delivers due first-week tasks and resumes deployments that were waiting
9
+ * (on the backend, or on Slack).
10
+ *
11
+ * @module services/bundle/bundle-apply.factory
12
+ */
13
+ import { BundleApplyService, type BundleApplyDeps, type BundleSlackApi } from './bundle-apply.service.js';
14
+ import type { BundleCatalog } from './bundle-catalog.js';
15
+ /**
16
+ * Slack through the team-channel service; reads as not connected when the
17
+ * service is not up (Slack never configured on this machine).
18
+ *
19
+ * @returns Slack collaborator
20
+ */
21
+ export declare function createSlackBundleApi(): BundleSlackApi;
22
+ /**
23
+ * Backend collaborators.
24
+ *
25
+ * @returns Dependencies backed by the backend's services
26
+ */
27
+ export declare function createBackendBundleDeps(): BundleApplyDeps & {
28
+ catalog: BundleCatalog;
29
+ };
30
+ /**
31
+ * The backend's apply engine.
32
+ *
33
+ * @returns The singleton
34
+ */
35
+ export declare function getBundleApplyService(): BundleApplyService;
36
+ /**
37
+ * The backend's bundle catalog (OSS templates + CREWLY_TEMPLATE_DIRS).
38
+ *
39
+ * @returns The catalog
40
+ */
41
+ export declare function getBundleCatalog(): BundleCatalog;
42
+ /**
43
+ * Replace or clear the singleton (tests).
44
+ *
45
+ * @param service - Service to use, or null to clear
46
+ */
47
+ export declare function setBundleApplyServiceForTesting(service: BundleApplyService | null): void;
48
+ /**
49
+ * One maintenance pass: resume waiting deployments, deliver due tasks.
50
+ *
51
+ * @param service - Engine
52
+ */
53
+ export declare function runBundleMaintenance(service?: BundleApplyService): Promise<void>;
54
+ /**
55
+ * Start the maintenance timer (runs once right away). Idempotent.
56
+ */
57
+ export declare function startBundleMaintenance(): void;
58
+ /**
59
+ * Stop the maintenance timer.
60
+ */
61
+ export declare function stopBundleMaintenance(): void;
62
+ //# sourceMappingURL=bundle-apply.factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle-apply.factory.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/bundle/bundle-apply.factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAcH,OAAO,EAAE,kBAAkB,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE1G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKzD;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAsBrD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,eAAe,GAAG;IAAE,OAAO,EAAE,aAAa,CAAA;CAAE,CA8BtF;AAgBD;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,kBAAkB,CAG1D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAGxF;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,kBAA4C,GAAG,OAAO,CAAC,IAAI,CAAC,CAS/G;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAK7C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C"}
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Real wiring of the bundle apply engine inside the backend.
3
+ *
4
+ * Adds the live collaborators to the base set (`bundle-deps.ts`): Slack
5
+ * through SlackTeamChannelService, the orchestrator through the chat path
6
+ * the onboarding first task uses, connector probes through the Cloud token
7
+ * services, and the running CronTaskService. Also runs the timer that
8
+ * delivers due first-week tasks and resumes deployments that were waiting
9
+ * (on the backend, or on Slack).
10
+ *
11
+ * @module services/bundle/bundle-apply.factory
12
+ */
13
+ import { BUNDLE_CONSTANTS } from '../../constants.js';
14
+ import { getCrewlyHomePath } from '../core/crewly-home.utils.js';
15
+ import { LoggerService } from '../core/logger.service.js';
16
+ import { CronTaskService } from '../workflow/cron-task.service.js';
17
+ import { getHarnessService } from '../harness/harness.service.js';
18
+ import { getSlackService } from '../slack/slack.service.js';
19
+ import { getSlackTeamChannelService } from '../slack/slack-team-channel.service.js';
20
+ import { GoogleWorkspaceTokenService } from '../google/google-workspace-token.service.js';
21
+ import { CanvaTokenService } from '../canva/canva-token.service.js';
22
+ import { MicrosoftTokenService } from '../microsoft/microsoft-token.service.js';
23
+ import { getWhatsAppService } from '../whatsapp/whatsapp.service.js';
24
+ import { BundleApplyService } from './bundle-apply.service.js';
25
+ import { createConnectorChecker } from './bundle-connectors.js';
26
+ import { createBaseBundleDeps } from './bundle-deps.js';
27
+ const logger = LoggerService.getInstance().createComponentLogger('BundleApply');
28
+ /**
29
+ * Slack through the team-channel service; reads as not connected when the
30
+ * service is not up (Slack never configured on this machine).
31
+ *
32
+ * @returns Slack collaborator
33
+ */
34
+ export function createSlackBundleApi() {
35
+ return {
36
+ isConnected: () => {
37
+ try {
38
+ return !!getSlackTeamChannelService() && getSlackService().isConnected();
39
+ }
40
+ catch {
41
+ return false;
42
+ }
43
+ },
44
+ async ensureTeamChannel(team) {
45
+ const service = getSlackTeamChannelService();
46
+ if (!service)
47
+ throw new Error('Slack team channels are not running');
48
+ const mapping = await service.ensureTeamChannel(team);
49
+ return { slackChannelId: mapping.slackChannelId, slackChannelName: mapping.slackChannelName };
50
+ },
51
+ async ensureAgentChannel(input) {
52
+ const service = getSlackTeamChannelService();
53
+ if (!service)
54
+ throw new Error('Slack team channels are not running');
55
+ const mapping = await service.ensureAgentChannel(input);
56
+ return { slackChannelId: mapping.slackChannelId, slackChannelName: mapping.slackChannelName };
57
+ },
58
+ };
59
+ }
60
+ /**
61
+ * Backend collaborators.
62
+ *
63
+ * @returns Dependencies backed by the backend's services
64
+ */
65
+ export function createBackendBundleDeps() {
66
+ const base = createBaseBundleDeps({
67
+ crewlyHome: getCrewlyHomePath(),
68
+ // The backend runs with the package root as its working directory
69
+ // (`crewly start`), the same assumption TemplateService makes.
70
+ packageRoot: process.cwd(),
71
+ getOrcHarness: () => getHarnessService().orc.get(),
72
+ });
73
+ return {
74
+ ...base,
75
+ slack: createSlackBundleApi(),
76
+ schedules: { create: (request) => CronTaskService.getInstance().create(request) },
77
+ orchestrator: {
78
+ async send(content, metadata) {
79
+ // Loaded lazily: the chat path pulls in the chat controller.
80
+ const { sendViaChat } = await import('../onboarding/onboarding-checklist.factory.js');
81
+ return sendViaChat(content, metadata);
82
+ },
83
+ },
84
+ connectors: createConnectorChecker({
85
+ 'google-workspace': async () => {
86
+ const status = await GoogleWorkspaceTokenService.getInstance().status();
87
+ return { connected: status.connected, connections: status.connections.map((c) => ({ products: [...c.products] })) };
88
+ },
89
+ canva: async () => (await CanvaTokenService.getInstance().status()).connected,
90
+ 'microsoft-todo': async () => (await MicrosoftTokenService.getInstance().status()).connected,
91
+ whatsapp: async () => getWhatsAppService().isConnected(),
92
+ slack: async () => getSlackService().isConnected(),
93
+ }),
94
+ };
95
+ }
96
+ let deps = null;
97
+ let instance = null;
98
+ let timer = null;
99
+ /**
100
+ * The backend collaborators, built once.
101
+ *
102
+ * @returns Dependencies
103
+ */
104
+ function backendDeps() {
105
+ if (!deps)
106
+ deps = createBackendBundleDeps();
107
+ return deps;
108
+ }
109
+ /**
110
+ * The backend's apply engine.
111
+ *
112
+ * @returns The singleton
113
+ */
114
+ export function getBundleApplyService() {
115
+ if (!instance)
116
+ instance = new BundleApplyService(backendDeps());
117
+ return instance;
118
+ }
119
+ /**
120
+ * The backend's bundle catalog (OSS templates + CREWLY_TEMPLATE_DIRS).
121
+ *
122
+ * @returns The catalog
123
+ */
124
+ export function getBundleCatalog() {
125
+ return backendDeps().catalog;
126
+ }
127
+ /**
128
+ * Replace or clear the singleton (tests).
129
+ *
130
+ * @param service - Service to use, or null to clear
131
+ */
132
+ export function setBundleApplyServiceForTesting(service) {
133
+ instance = service;
134
+ if (!service)
135
+ deps = null;
136
+ }
137
+ /**
138
+ * One maintenance pass: resume waiting deployments, deliver due tasks.
139
+ *
140
+ * @param service - Engine
141
+ */
142
+ export async function runBundleMaintenance(service = getBundleApplyService()) {
143
+ try {
144
+ const resumed = await service.resumeWaiting();
145
+ if (resumed.length > 0)
146
+ logger.info('Resumed bundle deployments', { templates: resumed });
147
+ const sent = await service.deliverDue();
148
+ if (sent > 0)
149
+ logger.info('Delivered first-week tasks', { count: sent });
150
+ }
151
+ catch (error) {
152
+ logger.warn('Bundle maintenance failed (non-critical)', { error: error instanceof Error ? error.message : String(error) });
153
+ }
154
+ }
155
+ /**
156
+ * Start the maintenance timer (runs once right away). Idempotent.
157
+ */
158
+ export function startBundleMaintenance() {
159
+ if (timer)
160
+ return;
161
+ void runBundleMaintenance();
162
+ timer = setInterval(() => void runBundleMaintenance(), BUNDLE_CONSTANTS.TICK_INTERVAL_MS);
163
+ timer.unref();
164
+ }
165
+ /**
166
+ * Stop the maintenance timer.
167
+ */
168
+ export function stopBundleMaintenance() {
169
+ if (timer)
170
+ clearInterval(timer);
171
+ timer = null;
172
+ }
173
+ //# sourceMappingURL=bundle-apply.factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle-apply.factory.js","sourceRoot":"","sources":["../../../../../../backend/src/services/bundle/bundle-apply.factory.ts"],"names":[],"mappings":"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"}