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,386 @@
1
+ /**
2
+ * CLI: deploy a solution bundle (specs/solution-bundles.md).
3
+ *
4
+ * crewly deploy-bundle <template-id> --answers answers.json [--runtime crewly-agent]
5
+ * [--templates-dir <dir>] [--dry-run] [--allow-draft] [--json]
6
+ *
7
+ * Scripted deploys (hosted servers run it from cloud-init) and
8
+ * `crewly onboard --template <bundle>` both come here. When this user's
9
+ * backend is running, the deploy goes through `POST /api/bundles/apply` and
10
+ * the job is followed until it finishes, so Slack, connector checks and the
11
+ * first-week hand-offs happen right away. Otherwise the same engine runs
12
+ * in-process: the team, norms, SOPs, skills and schedules are written, and
13
+ * the steps that need a running Crewly are left pending — the backend
14
+ * finishes them when it starts.
15
+ *
16
+ * @module cli/commands/deploy-bundle
17
+ */
18
+ import { readFileSync } from 'fs';
19
+ import * as path from 'path';
20
+ import chalk from 'chalk';
21
+ import { BUNDLE_CONSTANTS } from '../../../backend/src/constants.js';
22
+ import { getCrewlyHomePath } from '../../../backend/src/services/core/crewly-home.utils.js';
23
+ import { BundleApplyService, BundleError } from '../../../backend/src/services/bundle/bundle-apply.service.js';
24
+ import { BundleCatalog, bundleTemplateDirs, toBundleDetail } from '../../../backend/src/services/bundle/bundle-catalog.js';
25
+ import { BundleAnswersError, resolveAnswers } from '../../../backend/src/services/bundle/bundle-placeholders.js';
26
+ import { CLI_CONSTANTS } from '../constants.js';
27
+ import { defaultHttpJson, isBackendRunning, localBackendUrl } from '../utils/harness-engine.js';
28
+ import { getTemplatesDir } from '../utils/templates.js';
29
+ /**
30
+ * The Crewly package root the CLI runs from.
31
+ *
32
+ * @returns Absolute path (parent of `config/templates`)
33
+ */
34
+ export function cliPackageRoot() {
35
+ return path.dirname(path.dirname(getTemplatesDir()));
36
+ }
37
+ /**
38
+ * Read a JSON answers file.
39
+ *
40
+ * @param file - Path
41
+ * @param readFile - File reader
42
+ * @returns Answers object
43
+ * @throws Error with an owner-readable message when missing or not a JSON object
44
+ */
45
+ export function loadAnswersFile(file, readFile = (f) => readFileSync(f, 'utf-8')) {
46
+ let text;
47
+ try {
48
+ text = readFile(file);
49
+ }
50
+ catch {
51
+ throw new Error(`Cannot read the answers file: ${file}`);
52
+ }
53
+ let parsed;
54
+ try {
55
+ parsed = JSON.parse(text);
56
+ }
57
+ catch (error) {
58
+ throw new Error(`The answers file is not valid JSON (${file}): ${error instanceof Error ? error.message : String(error)}`);
59
+ }
60
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
61
+ throw new Error(`The answers file must be a JSON object like {"business_name": "…"} (${file})`);
62
+ }
63
+ return parsed;
64
+ }
65
+ /**
66
+ * An answers-file skeleton for a bundle (printed when answers are missing).
67
+ *
68
+ * @param questions - Bundle questions
69
+ * @returns Pretty JSON with every question id
70
+ */
71
+ export function answersSkeleton(questions) {
72
+ const skeleton = {};
73
+ for (const q of questions) {
74
+ skeleton[q.id] = q.type === 'multiselect' ? (Array.isArray(q.default) ? q.default : []) : typeof q.default === 'string' ? q.default : '';
75
+ }
76
+ return JSON.stringify(skeleton, null, 2);
77
+ }
78
+ /**
79
+ * The running backend as a deploy target.
80
+ *
81
+ * @param baseUrl - Loopback URL
82
+ * @param http - HTTP helper
83
+ * @returns Target
84
+ */
85
+ export function createRemoteTarget(baseUrl = localBackendUrl(), http = defaultHttpJson) {
86
+ /** Unwrap `{ success, data }`, turning errors into BundleError-like errors. */
87
+ const unwrap = (status, body) => {
88
+ const b = body;
89
+ if (status < 300 && b?.success && b.data !== undefined)
90
+ return b.data;
91
+ const code = (b?.code ?? 'unknown_bundle');
92
+ const details = Array.isArray(b?.missing) || Array.isArray(b?.invalid)
93
+ ? { missing: (b?.missing ?? []), invalid: (b?.invalid ?? []) }
94
+ : undefined;
95
+ throw new BundleError(code, b?.error ?? `HTTP ${status}`, details);
96
+ };
97
+ return {
98
+ where: 'backend',
99
+ async start(request) {
100
+ const { status, body } = await http('POST', `${baseUrl}${CLI_CONSTANTS.BUNDLE.APPLY_ENDPOINT}`, request);
101
+ return unwrap(status, body).deployment;
102
+ },
103
+ async getJob(jobId) {
104
+ const { status, body } = await http('GET', `${baseUrl}${CLI_CONSTANTS.BUNDLE.APPLY_ENDPOINT}/${encodeURIComponent(jobId)}`);
105
+ return unwrap(status, body);
106
+ },
107
+ };
108
+ }
109
+ /**
110
+ * The in-process engine as a deploy target (no Slack, connector checks or
111
+ * orchestrator: those steps stay pending until the backend starts).
112
+ *
113
+ * Loaded lazily: the engine's collaborators pull in the marketplace
114
+ * installer and the harness store, which `crewly onboard` / `crewly doctor`
115
+ * should not load unless a bundle is actually deployed.
116
+ *
117
+ * @param templateDirs - Extra template directories
118
+ * @returns Target
119
+ */
120
+ export async function createLocalTarget(templateDirs) {
121
+ const [{ createBaseBundleDeps }, { OrcHarnessStore }] = await Promise.all([
122
+ import('../../../backend/src/services/bundle/bundle-deps.js'),
123
+ import('../../../backend/src/services/harness/orc-harness.store.js'),
124
+ ]);
125
+ const store = new OrcHarnessStore();
126
+ const service = new BundleApplyService(createBaseBundleDeps({
127
+ crewlyHome: getCrewlyHomePath(),
128
+ packageRoot: cliPackageRoot(),
129
+ extraTemplateDirs: templateDirs,
130
+ getOrcHarness: () => store.get(),
131
+ }));
132
+ return {
133
+ where: 'in-process',
134
+ start: (request) => service.start(request),
135
+ getJob: (jobId) => service.getJob(jobId),
136
+ wait: (request) => service.applyAndWait(request),
137
+ };
138
+ }
139
+ /** Status marks for the step list. */
140
+ const STEP_MARKS = {
141
+ done: chalk.green('✓'),
142
+ skipped: chalk.gray('–'),
143
+ pending: chalk.yellow('…'),
144
+ failed: chalk.red('✗'),
145
+ running: chalk.cyan('→'),
146
+ queued: chalk.gray('·'),
147
+ };
148
+ /**
149
+ * Human-readable lines for a deployment.
150
+ *
151
+ * @param deployment - Deployment
152
+ * @returns Lines (no trailing newline)
153
+ */
154
+ export function formatDeployment(deployment) {
155
+ const lines = [];
156
+ for (const step of deployment.steps) {
157
+ const detail = step.error ?? step.message ?? '';
158
+ lines.push(` ${STEP_MARKS[step.status] ?? '·'} ${step.label}${detail ? chalk.gray(` — ${detail}`) : ''}`);
159
+ for (const item of step.items ?? []) {
160
+ if (item.status === 'done' && step.status === 'done')
161
+ continue;
162
+ lines.push(chalk.gray(` ${STEP_MARKS[item.status] ?? '·'} ${item.label}${item.message ? `: ${item.message}` : ''}`));
163
+ }
164
+ }
165
+ const missing = deployment.connectors.filter((c) => c.status !== 'connected');
166
+ if (missing.length > 0) {
167
+ lines.push('');
168
+ lines.push(chalk.bold(' Connect these (on the Connections page, works from a phone):'));
169
+ for (const c of missing) {
170
+ lines.push(` ${c.required ? '•' : '◦'} ${c.id}${c.products.length ? ` (${c.products.join(', ')})` : ''} — ${c.why} → ${c.connectPath}`);
171
+ }
172
+ }
173
+ return lines;
174
+ }
175
+ /**
176
+ * Whether a finished deployment should fail the command.
177
+ *
178
+ * @param deployment - Deployment
179
+ * @returns True when the team failed or any step failed
180
+ */
181
+ export function deploymentFailed(deployment) {
182
+ return deployment.status === 'failed' || deployment.steps.some((s) => s.status === 'failed');
183
+ }
184
+ /**
185
+ * Explain a refused deploy.
186
+ *
187
+ * @param error - BundleError
188
+ * @param template - The bundle (for the answers skeleton), if known
189
+ * @param log - Output
190
+ */
191
+ function reportBundleError(error, template, log) {
192
+ log(chalk.red(` ✗ ${error.message}`));
193
+ if (error.code === 'invalid_answers' && template) {
194
+ log(chalk.gray(' Answers file template (fill in and pass with --answers):'));
195
+ for (const line of answersSkeleton(template.bundle.questions ?? []).split('\n'))
196
+ log(chalk.gray(` ${line}`));
197
+ }
198
+ }
199
+ /**
200
+ * Deploy a bundle (shared by `crewly deploy-bundle` and `crewly onboard`).
201
+ *
202
+ * @param templateId - Bundle template id
203
+ * @param options - Answers (object or file), runtime, flags
204
+ * @param deps - Injectable pieces
205
+ * @returns Process exit code (0 = deployed, possibly with pending steps; 1 = refused or failed)
206
+ */
207
+ export async function deployBundle(templateId, options, deps = {}) {
208
+ const log = deps.log ?? ((line) => console.log(line));
209
+ const templateDirs = (options.templatesDir ?? []).map((d) => path.resolve(d));
210
+ const catalog = deps.catalog ?? new BundleCatalog(() => bundleTemplateDirs(cliPackageRoot(), templateDirs));
211
+ const entry = catalog.get(templateId);
212
+ const template = entry?.template ?? null;
213
+ // Validate locally first for a clear message (the backend checks again).
214
+ // A dry run without answers only validates the template itself.
215
+ if (template && !(options.dryRun && !options.answers)) {
216
+ try {
217
+ resolveAnswers(template.bundle.questions ?? [], options.answers ?? {});
218
+ }
219
+ catch (error) {
220
+ if (error instanceof BundleAnswersError) {
221
+ reportBundleError(new BundleError('invalid_answers', error.message), template, log);
222
+ return CLI_CONSTANTS.EXIT_CODES.ERROR;
223
+ }
224
+ throw error;
225
+ }
226
+ }
227
+ if (options.dryRun) {
228
+ if (!template) {
229
+ log(chalk.red(` ✗ No bundle "${templateId}" in ${bundleTemplateDirs(cliPackageRoot(), templateDirs).join(', ')}`));
230
+ return CLI_CONSTANTS.EXIT_CODES.ERROR;
231
+ }
232
+ const detail = toBundleDetail(template);
233
+ log(chalk.bold(` ${detail.label} (${detail.id}) — ${detail.status}`));
234
+ log(` ${detail.tagline}`);
235
+ for (const team of detail.teams)
236
+ log(` Team ${team.name}: ${team.members.map((m) => `${m.name} (${m.title})`).join(', ')}`);
237
+ log(` Runtime: ${detail.recommendedRuntime} · Server: ${detail.serverTier}`);
238
+ log(` Skills: ${detail.skills.join(', ') || '—'}`);
239
+ log(` Connectors: ${detail.connectors.map((c) => c.id).join(', ') || '—'}`);
240
+ log(` Schedules: ${detail.schedules.map((s) => `${s.title} (${s.cron})`).join(', ') || '—'}`);
241
+ log(` First week: ${detail.firstWeek.map((t) => `day ${t.day + 1} ${t.title}`).join(', ') || '—'}`);
242
+ log(chalk.green(' ✓ Valid. Nothing was deployed (--dry-run).'));
243
+ return CLI_CONSTANTS.EXIT_CODES.SUCCESS;
244
+ }
245
+ const running = await (deps.isRunning ?? (() => isBackendRunning()))();
246
+ const target = running ? (deps.remote ?? (() => createRemoteTarget()))() : await (deps.local ?? createLocalTarget)(templateDirs);
247
+ if (running && templateDirs.length > 0) {
248
+ log(chalk.yellow(' ⚠ Crewly is running: --templates-dir is not seen by it. Start it with CREWLY_TEMPLATE_DIRS set instead.'));
249
+ }
250
+ const request = {
251
+ templateId,
252
+ ...(options.answers ? { answers: options.answers } : {}),
253
+ ...(options.runtime ? { runtime: options.runtime } : {}),
254
+ ...(options.allowDraft ? { allowDraft: true } : {}),
255
+ };
256
+ log(chalk.blue(` Deploying ${template?.bundle.label ?? templateId} ${running ? 'through the running Crewly' : '(Crewly is not running; finishing the rest when it starts)'}…`));
257
+ let final;
258
+ try {
259
+ if (target.wait) {
260
+ final = await target.wait(request);
261
+ }
262
+ else {
263
+ const started = await target.start(request);
264
+ const sleep = deps.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
265
+ const now = deps.now ?? (() => Date.now());
266
+ const deadline = now() + BUNDLE_CONSTANTS.CLI_JOB_TIMEOUT_MS;
267
+ final = started;
268
+ while (final.status === 'running' && now() < deadline) {
269
+ await sleep(BUNDLE_CONSTANTS.CLI_POLL_INTERVAL_MS);
270
+ final = await target.getJob(started.jobId);
271
+ }
272
+ if (final.status === 'running') {
273
+ log(chalk.yellow(` ⚠ Still running after ${BUNDLE_CONSTANTS.CLI_JOB_TIMEOUT_MS / 60000} min; follow it at /api/bundles/apply/${started.jobId}`));
274
+ }
275
+ }
276
+ }
277
+ catch (error) {
278
+ if (error instanceof BundleError) {
279
+ reportBundleError(error, template, log);
280
+ return CLI_CONSTANTS.EXIT_CODES.ERROR;
281
+ }
282
+ log(chalk.red(` ✗ ${error instanceof Error ? error.message : String(error)}`));
283
+ return CLI_CONSTANTS.EXIT_CODES.ERROR;
284
+ }
285
+ if (options.json) {
286
+ log(JSON.stringify(final, null, 2));
287
+ }
288
+ else {
289
+ for (const line of formatDeployment(final))
290
+ log(line);
291
+ log('');
292
+ if (final.status === 'done')
293
+ log(chalk.green(' ✓ Deployed.'));
294
+ else if (!deploymentFailed(final))
295
+ log(chalk.green(' ✓ Deployed; the steps marked … finish by themselves once they can.'));
296
+ else
297
+ log(chalk.red(' ✗ Some steps failed. Run the same command again to retry them; finished steps are kept.'));
298
+ }
299
+ return deploymentFailed(final) ? CLI_CONSTANTS.EXIT_CODES.ERROR : CLI_CONSTANTS.EXIT_CODES.SUCCESS;
300
+ }
301
+ /**
302
+ * `crewly deploy-bundle <id>` action.
303
+ *
304
+ * @param templateId - Bundle template id
305
+ * @param options - Commander options
306
+ * @param deps - Injectable pieces
307
+ */
308
+ export async function deployBundleCommand(templateId, options = {}, deps = {}) {
309
+ const log = deps.log ?? ((line) => console.log(line));
310
+ let answers;
311
+ if (options.answers) {
312
+ try {
313
+ answers = loadAnswersFile(options.answers, deps.readFile);
314
+ }
315
+ catch (error) {
316
+ log(chalk.red(` ✗ ${error instanceof Error ? error.message : String(error)}`));
317
+ process.exitCode = CLI_CONSTANTS.EXIT_CODES.ERROR;
318
+ return;
319
+ }
320
+ }
321
+ const code = await deployBundle(templateId, { ...options, answers }, deps);
322
+ if (code !== CLI_CONSTANTS.EXIT_CODES.SUCCESS)
323
+ process.exitCode = code;
324
+ }
325
+ /**
326
+ * Ask a bundle's questions in the terminal. An answer from `preset` is
327
+ * kept; Enter takes the default; a select takes a number or a value; a
328
+ * multiselect takes comma-separated numbers or values.
329
+ *
330
+ * @param ask - Prompt function
331
+ * @param questions - Bundle questions
332
+ * @param preset - Answers already given (e.g. from --answers)
333
+ * @param log - Output
334
+ * @returns Answers
335
+ */
336
+ export async function askBundleQuestions(ask, questions, preset = {}, log = (line) => console.log(line)) {
337
+ const answers = { ...preset };
338
+ for (const q of questions) {
339
+ if (answers[q.id] !== undefined && answers[q.id] !== '')
340
+ continue;
341
+ const options = q.options ?? [];
342
+ for (;;) {
343
+ log(chalk.bold(` ${q.label}${q.required ? '' : chalk.gray('(可选)')}`));
344
+ if (q.help)
345
+ log(chalk.gray(` ${q.help}`));
346
+ options.forEach((o, i) => log(` ${i + 1}. ${o.label ?? o.value}`));
347
+ const fallback = Array.isArray(q.default) ? q.default.join(', ') : q.default ?? '';
348
+ const raw = (await ask(` > ${fallback ? chalk.gray(`[${fallback}] `) : ''}`)).trim();
349
+ if (raw === '') {
350
+ if (q.required) {
351
+ log(chalk.yellow(' 这一项必填。'));
352
+ continue;
353
+ }
354
+ break; // default applies
355
+ }
356
+ const pick = (token) => {
357
+ const n = Number.parseInt(token, 10);
358
+ if (String(n) === token && n >= 1 && n <= options.length)
359
+ return options[n - 1].value;
360
+ return options.some((o) => o.value === token) ? token : null;
361
+ };
362
+ if (q.type === 'select') {
363
+ const value = pick(raw);
364
+ if (!value) {
365
+ log(chalk.yellow(` 请输入 1-${options.length}。`));
366
+ continue;
367
+ }
368
+ answers[q.id] = value;
369
+ }
370
+ else if (q.type === 'multiselect') {
371
+ const values = raw.split(/[,,、\s]+/).filter(Boolean).map(pick);
372
+ if (values.some((v) => v === null)) {
373
+ log(chalk.yellow(` 用逗号分开,比如 1,3。`));
374
+ continue;
375
+ }
376
+ answers[q.id] = values;
377
+ }
378
+ else {
379
+ answers[q.id] = raw;
380
+ }
381
+ break;
382
+ }
383
+ }
384
+ return answers;
385
+ }
386
+ //# sourceMappingURL=deploy-bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-bundle.js","sourceRoot":"","sources":["../../../../../cli/src/commands/deploy-bundle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yDAAyD,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,8DAA8D,CAAC;AAC/G,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,wDAAwD,CAAC;AAC3H,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AAEjH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAiB,MAAM,4BAA4B,CAAC;AAC/G,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AA+CxD;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,WAAkC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC;IAC7G,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7H,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,uEAAuE,IAAI,GAAG,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,MAAiC,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,SAA2B;IACzD,MAAM,QAAQ,GAAsC,EAAE,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3I,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAkB,eAAe,EAAE,EAAE,OAAiB,eAAe;IACtG,+EAA+E;IAC/E,MAAM,MAAM,GAAG,CAAI,MAAc,EAAE,IAAa,EAAK,EAAE;QACrD,MAAM,CAAC,GAAG,IAAmH,CAAC;QAC9H,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC;QACtE,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,gBAAgB,CAAiD,CAAC;QAC3F,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC;YACpE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAY,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAY,EAAE;YACpF,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,QAAQ,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC,CAAC;IACF,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,KAAK,CAAC,KAAK,CAAC,OAAO;YACjB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;YACzG,OAAO,MAAM,CAAmC,MAAM,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC;QAC3E,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,KAAK;YAChB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,cAAc,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5H,OAAO,MAAM,CAAmB,MAAM,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,YAAsB;IAC5D,MAAM,CAAC,EAAE,oBAAoB,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACxE,MAAM,CAAC,qDAAqD,CAAC;QAC7D,MAAM,CAAC,4DAA4D,CAAC;KACrE,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,kBAAkB,CACpC,oBAAoB,CAAC;QACnB,UAAU,EAAE,iBAAiB,EAAE;QAC/B,WAAW,EAAE,cAAc,EAAE;QAC7B,iBAAiB,EAAE,YAAY;QAC/B,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;KACjC,CAAC,CACH,CAAC;IACF,OAAO;QACL,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;QAC1C,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QACxC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,GAA2B;IACzC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IACtB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACxB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IAC1B,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IACtB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACxB,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;CACxB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAA4B;IAC3D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3G,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;gBAAE,SAAS;YAC/D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5H,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;IAC9E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC,CAAC;QACzF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7I,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAA4B;IAC3D,OAAO,UAAU,CAAC,MAAM,KAAK,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;AAC/F,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,KAAkB,EAAE,QAA+B,EAAE,GAAQ;IACtF,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,IAAI,QAAQ,EAAE,CAAC;QACjD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC,CAAC;QAChF,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IAClH,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAkB,EAClB,OAAqF,EACrF,OAAyB,EAAE;IAE3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,aAAa,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,cAAc,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;IAC5G,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAQ,IAAI,IAAI,CAAC;IAEzC,yEAAyE;IACzE,gEAAgE;IAChE,IAAI,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC;YACH,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;gBACxC,iBAAiB,CAAC,IAAI,WAAW,CAAC,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;gBACpF,OAAO,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC;YACxC,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,UAAU,QAAQ,kBAAkB,CAAC,cAAc,EAAE,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACpH,OAAO,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC;QACxC,CAAC;QACD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACxC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,EAAE,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACvE,GAAG,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK;YAAE,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7H,GAAG,CAAC,cAAc,MAAM,CAAC,kBAAkB,cAAc,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9E,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACpD,GAAG,CAAC,iBAAiB,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7E,GAAG,CAAC,gBAAgB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAC/F,GAAG,CAAC,iBAAiB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACrG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACjE,OAAO,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;IAC1C,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC;IACvE,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC;IACjI,IAAI,OAAO,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2GAA2G,CAAC,CAAC,CAAC;IACjI,CAAC;IACD,MAAM,OAAO,GAAG;QACd,UAAU;QACV,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,CAAC;IACF,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,QAAQ,EAAE,MAAM,CAAC,KAAK,IAAI,UAAU,IAAI,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,4DAA4D,GAAG,CAAC,CAAC,CAAC;IAEjL,IAAI,KAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1F,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAG,gBAAgB,CAAC,kBAAkB,CAAC;YAC7D,KAAK,GAAG,OAAO,CAAC;YAChB,OAAO,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;gBACtD,MAAM,KAAK,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;gBACnD,KAAK,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC/B,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,gBAAgB,CAAC,kBAAkB,GAAG,KAAK,yCAAyC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACpJ,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;YACxC,OAAO,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC;QACxC,CAAC;QACD,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAChF,OAAO,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC;IACxC,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,KAAK,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACtD,GAAG,CAAC,EAAE,CAAC,CAAC;QACR,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;YAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;aAC1D,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC,CAAC;;YACvH,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2FAA2F,CAAC,CAAC,CAAC;IACnH,CAAC;IACD,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;AACrG,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,UAAkB,EAAE,UAA+B,EAAE,EAAE,OAAyB,EAAE;IAC1H,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,IAAI,OAA4C,CAAC;IACjD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC;YAClD,OAAO;QACT,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3E,IAAI,IAAI,KAAK,aAAa,CAAC,UAAU,CAAC,OAAO;QAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AACzE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAA0C,EAC1C,SAA2B,EAC3B,SAAkC,EAAE,EACpC,MAAW,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAEtC,MAAM,OAAO,GAA4B,EAAE,GAAG,MAAM,EAAE,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE;YAAE,SAAS;QAClE,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;QAChC,SAAS,CAAC;YACR,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC,CAAC,IAAI;gBAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;YACnF,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACtF,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;oBACf,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;oBAChC,SAAS;gBACX,CAAC;gBACD,MAAM,CAAC,kBAAkB;YAC3B,CAAC;YACD,MAAM,IAAI,GAAG,CAAC,KAAa,EAAiB,EAAE;gBAC5C,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACrC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM;oBAAE,OAAO,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;gBACtF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YAC/D,CAAC,CAAC;YACF,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAClD,SAAS;gBACX,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;YACxB,CAAC;iBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBACpC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC/D,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;oBACnC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;oBACvC,SAAS;gBACX,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAkB,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;YACtB,CAAC;YACD,MAAM;QACR,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -26,7 +26,10 @@
26
26
  *
27
27
  * Used directly via `crewly onboard`, by the curl install script, and by the
28
28
  * desktop app. Flags: `--yes`, `--template <id>`, `--harness <id>`, `--task <text>`,
29
- * `--web`, `--cli`.
29
+ * `--web`, `--cli`, and for a solution bundle (`--template <bundle id>`)
30
+ * `--answers <file>` / `--runtime <id>`: the bundle's questions are asked
31
+ * (or read from the file) and it is deployed in one step
32
+ * (specs/solution-bundles.md).
30
33
  *
31
34
  * @module cli/commands/onboard
32
35
  */
@@ -35,6 +38,7 @@ import { type TeamTemplate } from '../utils/templates.js';
35
38
  import type { HarnessService } from '../../../backend/src/services/harness/harness.service.js';
36
39
  import { type LoginDriver } from '../utils/harness-engine.js';
37
40
  import { type HarnessSetupResult, type SetupIO } from './harness-setup.js';
41
+ import type { BundleTemplate } from '../../../backend/src/types/solution-bundle.types.js';
38
42
  import { type ConnectLinks, type ConnectState, type FirstTaskOutcome, type StarterChoice } from './onboard-checklist.js';
39
43
  /** Options passed from Commander.js for the onboard command */
40
44
  export interface OnboardOptions {
@@ -50,6 +54,10 @@ export interface OnboardOptions {
50
54
  cli?: boolean;
51
55
  /** First task for the new team (with --yes; otherwise it is asked) */
52
56
  task?: string;
57
+ /** Answers file (JSON) for a solution bundle's questions */
58
+ answers?: string;
59
+ /** Runtime for a solution bundle's members */
60
+ runtime?: string;
53
61
  }
54
62
  /** Where the rest of setup happens. */
55
63
  export type SetupMode = 'web' | 'cli';
@@ -71,6 +79,10 @@ export interface OnboardDeps {
71
79
  connectLinks?: () => ConnectLinks;
72
80
  /** Cloud / Slack state from the running backend (null when unknown) */
73
81
  readConnectState?: () => Promise<ConnectState | null>;
82
+ /** Find a solution bundle by template id (null when the id is not a bundle) */
83
+ findBundle?: (templateId: string) => BundleTemplate | null;
84
+ /** Deploy a solution bundle; returns the exit code */
85
+ deployBundle?: (templateId: string, answers: Record<string, unknown>, runtime: string | undefined) => Promise<number>;
74
86
  }
75
87
  /**
76
88
  * Prints the Crewly ASCII art banner to stdout.
@@ -345,6 +357,25 @@ export declare function runConnectStep(links: () => ConnectLinks, readState: ()
345
357
  * @param projectDir - The project directory path for next-steps output
346
358
  */
347
359
  export declare function printSummary(selectedTemplate?: TeamTemplate | null, projectDir?: string): void;
360
+ /**
361
+ * A solution bundle by template id, from the OSS templates and
362
+ * CREWLY_TEMPLATE_DIRS (e.g. Crewly Pro's templates).
363
+ *
364
+ * @param templateId - Template id
365
+ * @returns The bundle, or null when the id is not a bundle
366
+ */
367
+ export declare function findBundleTemplate(templateId: string): BundleTemplate | null;
368
+ /**
369
+ * Step 4 for a solution bundle: its questions (unless `--answers` covers
370
+ * them, or `--yes` forbids asking), then the one-step deploy.
371
+ *
372
+ * @param bundle - Bundle template
373
+ * @param options - `--answers`, `--runtime`
374
+ * @param ask - Prompt function, or null in non-interactive mode
375
+ * @param deploy - Deploy function (exit code)
376
+ * @returns Whether the bundle deployed (possibly with pending steps)
377
+ */
378
+ export declare function runBundleStep(bundle: BundleTemplate, options: Pick<OnboardOptions, 'answers' | 'runtime'>, ask: ((question: string) => Promise<string>) | null, deploy: (templateId: string, answers: Record<string, unknown>, runtime: string | undefined) => Promise<number>): Promise<boolean>;
348
379
  /**
349
380
  * Runs the onboarding wizard.
350
381
  *
@@ -1 +1 @@
1
- {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../../../../cli/src/commands/onboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../../../../cli/src/commands/onboard.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,10 @@
26
26
  *
27
27
  * Used directly via `crewly onboard`, by the curl install script, and by the
28
28
  * desktop app. Flags: `--yes`, `--template <id>`, `--harness <id>`, `--task <text>`,
29
- * `--web`, `--cli`.
29
+ * `--web`, `--cli`, and for a solution bundle (`--template <bundle id>`)
30
+ * `--answers <file>` / `--runtime <id>`: the bundle's questions are asked
31
+ * (or read from the file) and it is deployed in one step
32
+ * (specs/solution-bundles.md).
30
33
  *
31
34
  * @module cli/commands/onboard
32
35
  */
@@ -43,6 +46,8 @@ import { HARNESS_CONSTANTS } from '../../../backend/src/constants.js';
43
46
  import { createCliHarnessService, getBackendPort, isBackendRunning, localBackendUrl, pickLoginDriver, } from '../utils/harness-engine.js';
44
47
  import { createReadlineIO } from '../utils/prompt-io.js';
45
48
  import { runHarnessSetup } from './harness-setup.js';
49
+ import { askBundleQuestions, cliPackageRoot, deployBundle, loadAnswersFile } from './deploy-bundle.js';
50
+ import { BundleCatalog, bundleTemplateDirs } from '../../../backend/src/services/bundle/bundle-catalog.js';
46
51
  import { getCrewlyHomePath } from '../../../backend/src/services/core/crewly-home.utils.js';
47
52
  import { resolveApiToken } from '../../../backend/src/services/core/api-token.service.js';
48
53
  import { pickAdvertisedHost } from './token.js';
@@ -727,6 +732,53 @@ export function printSummary(selectedTemplate = null, projectDir) {
727
732
  console.log(' and start your agents.\n');
728
733
  }
729
734
  }
735
+ // ========================= Solution bundles =========================
736
+ /**
737
+ * A solution bundle by template id, from the OSS templates and
738
+ * CREWLY_TEMPLATE_DIRS (e.g. Crewly Pro's templates).
739
+ *
740
+ * @param templateId - Template id
741
+ * @returns The bundle, or null when the id is not a bundle
742
+ */
743
+ export function findBundleTemplate(templateId) {
744
+ try {
745
+ return new BundleCatalog(() => bundleTemplateDirs(cliPackageRoot())).get(templateId)?.template ?? null;
746
+ }
747
+ catch {
748
+ return null;
749
+ }
750
+ }
751
+ /**
752
+ * Step 4 for a solution bundle: its questions (unless `--answers` covers
753
+ * them, or `--yes` forbids asking), then the one-step deploy.
754
+ *
755
+ * @param bundle - Bundle template
756
+ * @param options - `--answers`, `--runtime`
757
+ * @param ask - Prompt function, or null in non-interactive mode
758
+ * @param deploy - Deploy function (exit code)
759
+ * @returns Whether the bundle deployed (possibly with pending steps)
760
+ */
761
+ export async function runBundleStep(bundle, options, ask, deploy) {
762
+ console.log(stepHeader(4, `First team: ${bundle.bundle.label}`));
763
+ console.log(chalk.gray(` ${bundle.bundle.tagline}\n`));
764
+ let answers = {};
765
+ if (options.answers) {
766
+ try {
767
+ answers = loadAnswersFile(options.answers);
768
+ }
769
+ catch (error) {
770
+ console.log(chalk.red(` ✗ ${error instanceof Error ? error.message : String(error)}`));
771
+ return false;
772
+ }
773
+ }
774
+ if (ask) {
775
+ console.log(chalk.bold(' 先回答几个问题,团队会按你的情况来做事:\n'));
776
+ answers = await askBundleQuestions(ask, bundle.bundle.questions ?? [], answers);
777
+ }
778
+ const code = await deploy(bundle.id, answers, options.runtime);
779
+ console.log('');
780
+ return code === CLI_EXIT_CODES.SUCCESS;
781
+ }
730
782
  // ========================= Main command =========================
731
783
  /**
732
784
  * Runs the onboarding wizard.
@@ -760,9 +812,12 @@ export function printSummary(selectedTemplate = null, projectDir) {
760
812
  export async function onboardCommand(options = {}, deps = {}) {
761
813
  printBanner();
762
814
  const autoYes = options.yes === true;
763
- // Handle --template flag: look up template by ID
815
+ // Handle --template flag: a solution bundle, else a template by ID
764
816
  let preselectedTemplate = null;
765
- if (options.template) {
817
+ const findBundle = deps.findBundle ?? findBundleTemplate;
818
+ const preselectedBundle = options.template ? findBundle(options.template) : null;
819
+ const runBundleDeploy = deps.deployBundle ?? ((templateId, answers, runtime) => deployBundle(templateId, { answers, ...(runtime ? { runtime } : {}) }));
820
+ if (options.template && !preselectedBundle) {
766
821
  const found = getTemplate(options.template);
767
822
  if (found) {
768
823
  preselectedTemplate = found;
@@ -832,6 +887,17 @@ export async function onboardCommand(options = {}, deps = {}) {
832
887
  const harness = await runHarnessStep(noPrompt, getService(), getDriver, { interactive: false, harness: options.harness });
833
888
  // Step 3: Skills
834
889
  await ensureSkills();
890
+ // Step 4 for a solution bundle: deploy it with --answers; its
891
+ // first-week tasks replace the first-task step.
892
+ if (preselectedBundle) {
893
+ await runBundleStep(preselectedBundle, options, null, runBundleDeploy);
894
+ scaffoldCrewlyDirectory(process.cwd(), null);
895
+ if (options.task)
896
+ await runFirstTaskStep(null, preselectedBundle.id, { task: options.task }, deliver);
897
+ await runConnectStep(links, readState);
898
+ printSummary(null);
899
+ return;
900
+ }
835
901
  // Step 4: First team — --template, else the recommended starter
836
902
  // (Personal Assistant), never simply the first template by name.
837
903
  console.log(stepHeader(4, 'First team'));
@@ -874,6 +940,17 @@ export async function onboardCommand(options = {}, deps = {}) {
874
940
  const harness = await runHarnessStep(io, getService(), getDriver, { interactive: true, harness: options.harness });
875
941
  // Step 3: Skills
876
942
  await ensureSkills();
943
+ // Step 4 for a solution bundle: ask its questions and deploy it; its
944
+ // first-week tasks replace the first-task step.
945
+ if (preselectedBundle) {
946
+ await runBundleStep(preselectedBundle, options, io.ask, runBundleDeploy);
947
+ scaffoldCrewlyDirectory(process.cwd(), null);
948
+ if (options.task)
949
+ await runFirstTaskStep(null, preselectedBundle.id, { task: options.task }, deliver);
950
+ await runConnectStep(links, readState);
951
+ printSummary(null);
952
+ return;
953
+ }
877
954
  // Step 4: First team — preselected or chosen (Enter = Personal Assistant)
878
955
  let choice;
879
956
  if (preselectedTemplate) {