crewly 1.6.0 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. package/config/roles/orchestrator/fragments/role-boundary.md +4 -1
  2. package/config/roles/orchestrator/prompt.md +53 -0
  3. package/config/roles/orchestrator/soul.md +47 -10
  4. package/config/skills/_common/lib.sh +28 -0
  5. package/config/skills/agent/core/cancel-followup/execute.sh +0 -19
  6. package/config/skills/agent/core/get-my-active-work/SKILL.md +101 -0
  7. package/config/skills/agent/core/get-my-active-work/execute.sh +122 -0
  8. package/config/skills/agent/core/list-my-followups/execute.sh +0 -19
  9. package/config/skills/agent/core/record-learning/SKILL.md +29 -0
  10. package/config/skills/agent/core/reply-channel/SKILL.md +41 -0
  11. package/config/skills/agent/core/reply-channel/execute.sh +165 -0
  12. package/config/skills/agent/core/reply-channel/execute.test.sh +148 -0
  13. package/config/skills/agent/core/schedule-followup/execute.sh +0 -19
  14. package/config/skills/agent/core/watch-for-event/execute.sh +0 -19
  15. package/config/skills/agent/remote-browser/execute.sh +296 -14
  16. package/config/skills/agent/remote-browser/execute.test.sh +482 -0
  17. package/config/skills/orchestrator/credential-manager/execute.test.sh +88 -0
  18. package/config/skills/orchestrator/send-message/SKILL.md +30 -7
  19. package/config/skills/orchestrator/team-health-scan/SKILL.md +98 -0
  20. package/config/skills/orchestrator/team-health-scan/execute.sh +44 -0
  21. package/config/skills/registry.json +62 -1
  22. package/config/sops/developer/git-workflow.md +38 -3
  23. package/dist/backend/backend/src/config/oauth.config.d.ts +33 -0
  24. package/dist/backend/backend/src/config/oauth.config.d.ts.map +1 -0
  25. package/dist/backend/backend/src/config/oauth.config.js +45 -0
  26. package/dist/backend/backend/src/config/oauth.config.js.map +1 -0
  27. package/dist/backend/backend/src/constants.d.ts +69 -1
  28. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  29. package/dist/backend/backend/src/constants.js +69 -2
  30. package/dist/backend/backend/src/constants.js.map +1 -1
  31. package/dist/backend/backend/src/controllers/active-work/active-work.controller.d.ts +53 -0
  32. package/dist/backend/backend/src/controllers/active-work/active-work.controller.d.ts.map +1 -0
  33. package/dist/backend/backend/src/controllers/active-work/active-work.controller.js +92 -0
  34. package/dist/backend/backend/src/controllers/active-work/active-work.controller.js.map +1 -0
  35. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.d.ts.map +1 -1
  36. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.js +18 -1
  37. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.js.map +1 -1
  38. package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts +68 -0
  39. package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts.map +1 -1
  40. package/dist/backend/backend/src/controllers/browser/browser.controller.js +233 -5
  41. package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
  42. package/dist/backend/backend/src/controllers/browser/browser.routes.d.ts.map +1 -1
  43. package/dist/backend/backend/src/controllers/browser/browser.routes.js +10 -1
  44. package/dist/backend/backend/src/controllers/browser/browser.routes.js.map +1 -1
  45. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  46. package/dist/backend/backend/src/controllers/chat/chat.controller.js +8 -3
  47. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  48. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts +132 -0
  49. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -0
  50. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +401 -0
  51. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -0
  52. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts +29 -0
  53. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts.map +1 -0
  54. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js +39 -0
  55. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js.map +1 -0
  56. package/dist/backend/backend/src/controllers/chat-v2/index.d.ts +8 -0
  57. package/dist/backend/backend/src/controllers/chat-v2/index.d.ts.map +1 -0
  58. package/dist/backend/backend/src/controllers/chat-v2/index.js +8 -0
  59. package/dist/backend/backend/src/controllers/chat-v2/index.js.map +1 -0
  60. package/dist/backend/backend/src/controllers/credentials/credentials.controller.d.ts +0 -26
  61. package/dist/backend/backend/src/controllers/credentials/credentials.controller.d.ts.map +1 -1
  62. package/dist/backend/backend/src/controllers/credentials/credentials.controller.js +47 -184
  63. package/dist/backend/backend/src/controllers/credentials/credentials.controller.js.map +1 -1
  64. package/dist/backend/backend/src/controllers/credentials/credentials.routes.d.ts.map +1 -1
  65. package/dist/backend/backend/src/controllers/credentials/credentials.routes.js +2 -1
  66. package/dist/backend/backend/src/controllers/credentials/credentials.routes.js.map +1 -1
  67. package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.d.ts +40 -0
  68. package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.d.ts.map +1 -0
  69. package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.js +162 -0
  70. package/dist/backend/backend/src/controllers/credentials/google-oauth.controller.js.map +1 -0
  71. package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.d.ts +13 -13
  72. package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.d.ts.map +1 -1
  73. package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.js +74 -234
  74. package/dist/backend/backend/src/controllers/onboarding/onboarding.routes.js.map +1 -1
  75. package/dist/backend/backend/src/controllers/request/request.controller.d.ts.map +1 -1
  76. package/dist/backend/backend/src/controllers/request/request.controller.js +4 -6
  77. package/dist/backend/backend/src/controllers/request/request.controller.js.map +1 -1
  78. package/dist/backend/backend/src/controllers/skill/skill.controller.d.ts.map +1 -1
  79. package/dist/backend/backend/src/controllers/skill/skill.controller.js +1 -0
  80. package/dist/backend/backend/src/controllers/skill/skill.controller.js.map +1 -1
  81. package/dist/backend/backend/src/controllers/task-management/tasks.controller.d.ts +43 -0
  82. package/dist/backend/backend/src/controllers/task-management/tasks.controller.d.ts.map +1 -1
  83. package/dist/backend/backend/src/controllers/task-management/tasks.controller.js +200 -72
  84. package/dist/backend/backend/src/controllers/task-management/tasks.controller.js.map +1 -1
  85. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  86. package/dist/backend/backend/src/controllers/team/team.controller.js +46 -0
  87. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  88. package/dist/backend/backend/src/controllers/team-health/team-health.controller.d.ts +59 -0
  89. package/dist/backend/backend/src/controllers/team-health/team-health.controller.d.ts.map +1 -0
  90. package/dist/backend/backend/src/controllers/team-health/team-health.controller.js +127 -0
  91. package/dist/backend/backend/src/controllers/team-health/team-health.controller.js.map +1 -0
  92. package/dist/backend/backend/src/controllers/team-health/team-health.routes.d.ts +13 -0
  93. package/dist/backend/backend/src/controllers/team-health/team-health.routes.d.ts.map +1 -0
  94. package/dist/backend/backend/src/controllers/team-health/team-health.routes.js +20 -0
  95. package/dist/backend/backend/src/controllers/team-health/team-health.routes.js.map +1 -0
  96. package/dist/backend/backend/src/index.d.ts +9 -0
  97. package/dist/backend/backend/src/index.d.ts.map +1 -1
  98. package/dist/backend/backend/src/index.js +256 -4
  99. package/dist/backend/backend/src/index.js.map +1 -1
  100. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  101. package/dist/backend/backend/src/routes/api.routes.js +43 -6
  102. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  103. package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts +498 -0
  104. package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -0
  105. package/dist/backend/backend/src/services/agent/active-work-briefing.service.js +759 -0
  106. package/dist/backend/backend/src/services/agent/active-work-briefing.service.js.map +1 -0
  107. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +25 -0
  108. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  109. package/dist/backend/backend/src/services/agent/agent-registration.service.js +193 -57
  110. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  111. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +9 -2
  112. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +1 -1
  113. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +35 -2
  114. package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +1 -1
  115. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +8 -2
  116. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
  117. package/dist/backend/backend/src/services/agent/crewly-agent/types.js +1 -0
  118. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
  119. package/dist/backend/backend/src/services/agent/tmux-command.service.d.ts.map +1 -1
  120. package/dist/backend/backend/src/services/agent/tmux-command.service.js +2 -1
  121. package/dist/backend/backend/src/services/agent/tmux-command.service.js.map +1 -1
  122. package/dist/backend/backend/src/services/agent/tmux.service.d.ts.map +1 -1
  123. package/dist/backend/backend/src/services/agent/tmux.service.js +2 -1
  124. package/dist/backend/backend/src/services/agent/tmux.service.js.map +1 -1
  125. package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts +148 -3
  126. package/dist/backend/backend/src/services/ai/prompt-builder.service.d.ts.map +1 -1
  127. package/dist/backend/backend/src/services/ai/prompt-builder.service.js +241 -2
  128. package/dist/backend/backend/src/services/ai/prompt-builder.service.js.map +1 -1
  129. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
  130. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js +13 -0
  131. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
  132. package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts.map +1 -1
  133. package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.js +30 -2
  134. package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.js.map +1 -1
  135. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  136. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +17 -0
  137. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  138. package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +79 -0
  139. package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +1 -0
  140. package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +118 -0
  141. package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +1 -0
  142. package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts +161 -0
  143. package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts.map +1 -1
  144. package/dist/backend/backend/src/services/browser/browser-bridge.service.js +382 -2
  145. package/dist/backend/backend/src/services/browser/browser-bridge.service.js.map +1 -1
  146. package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts +105 -0
  147. package/dist/backend/backend/src/services/browser/browser-proxy.service.d.ts.map +1 -1
  148. package/dist/backend/backend/src/services/browser/browser-proxy.service.js +232 -13
  149. package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -1
  150. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +178 -0
  151. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -0
  152. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +254 -0
  153. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -0
  154. package/dist/backend/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts +134 -0
  155. package/dist/backend/backend/src/services/chat-v2/chat-v2.mention-resolver.d.ts.map +1 -0
  156. package/dist/backend/backend/src/services/chat-v2/chat-v2.mention-resolver.js +232 -0
  157. package/dist/backend/backend/src/services/chat-v2/chat-v2.mention-resolver.js.map +1 -0
  158. package/dist/backend/backend/src/services/chat-v2/chat-v2.realtime-holder.d.ts +25 -0
  159. package/dist/backend/backend/src/services/chat-v2/chat-v2.realtime-holder.d.ts.map +1 -0
  160. package/dist/backend/backend/src/services/chat-v2/chat-v2.realtime-holder.js +23 -0
  161. package/dist/backend/backend/src/services/chat-v2/chat-v2.realtime-holder.js.map +1 -0
  162. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +254 -0
  163. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -0
  164. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +467 -0
  165. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -0
  166. package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.d.ts +27 -0
  167. package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.d.ts.map +1 -0
  168. package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.js +57 -0
  169. package/dist/backend/backend/src/services/chat-v2/chat-v2.singleton.js.map +1 -0
  170. package/dist/backend/backend/src/services/chat-v2/chat-v2.team-membership.d.ts +43 -0
  171. package/dist/backend/backend/src/services/chat-v2/chat-v2.team-membership.d.ts.map +1 -0
  172. package/dist/backend/backend/src/services/chat-v2/chat-v2.team-membership.js +54 -0
  173. package/dist/backend/backend/src/services/chat-v2/chat-v2.team-membership.js.map +1 -0
  174. package/dist/backend/backend/src/services/chat-v2/config.d.ts +100 -0
  175. package/dist/backend/backend/src/services/chat-v2/config.d.ts.map +1 -0
  176. package/dist/backend/backend/src/services/chat-v2/config.js +174 -0
  177. package/dist/backend/backend/src/services/chat-v2/config.js.map +1 -0
  178. package/dist/backend/backend/src/services/chat-v2/index.d.ts +11 -0
  179. package/dist/backend/backend/src/services/chat-v2/index.d.ts.map +1 -0
  180. package/dist/backend/backend/src/services/chat-v2/index.js +12 -0
  181. package/dist/backend/backend/src/services/chat-v2/index.js.map +1 -0
  182. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts +114 -0
  183. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -0
  184. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js +194 -0
  185. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -0
  186. package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.d.ts +100 -0
  187. package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.d.ts.map +1 -0
  188. package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.js +351 -0
  189. package/dist/backend/backend/src/services/chat-v2/sqlite/chat-db.js.map +1 -0
  190. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +132 -0
  191. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -0
  192. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +281 -0
  193. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -0
  194. package/dist/backend/backend/src/services/chat-v2/types.d.ts +295 -0
  195. package/dist/backend/backend/src/services/chat-v2/types.d.ts.map +1 -0
  196. package/dist/backend/backend/src/services/chat-v2/types.js +61 -0
  197. package/dist/backend/backend/src/services/chat-v2/types.js.map +1 -0
  198. package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.d.ts +113 -0
  199. package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.d.ts.map +1 -0
  200. package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.js +179 -0
  201. package/dist/backend/backend/src/services/cloud/cloud-event-bridge.service.js.map +1 -0
  202. package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.d.ts +131 -0
  203. package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.d.ts.map +1 -0
  204. package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.js +227 -0
  205. package/dist/backend/backend/src/services/cloud/cloud-event-forwarder.service.js.map +1 -0
  206. package/dist/backend/backend/src/services/core/config.service.js +3 -3
  207. package/dist/backend/backend/src/services/core/config.service.js.map +1 -1
  208. package/dist/backend/backend/src/services/core/storage.service.d.ts +7 -0
  209. package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
  210. package/dist/backend/backend/src/services/core/storage.service.js +15 -0
  211. package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
  212. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts +4 -16
  213. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -1
  214. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +7 -28
  215. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -1
  216. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts +69 -1
  217. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  218. package/dist/backend/backend/src/services/event-bus/event-bus.service.js +118 -0
  219. package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  220. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +275 -0
  221. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -0
  222. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +736 -0
  223. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -0
  224. package/dist/backend/backend/src/services/knowledge/fts5-index.service.d.ts.map +1 -1
  225. package/dist/backend/backend/src/services/knowledge/fts5-index.service.js +18 -2
  226. package/dist/backend/backend/src/services/knowledge/fts5-index.service.js.map +1 -1
  227. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts +49 -13
  228. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -1
  229. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js +123 -29
  230. package/dist/backend/backend/src/services/knowledge/knowledge-search.service.js.map +1 -1
  231. package/dist/backend/backend/src/services/knowledge/learnings-index.service.d.ts +159 -0
  232. package/dist/backend/backend/src/services/knowledge/learnings-index.service.d.ts.map +1 -0
  233. package/dist/backend/backend/src/services/knowledge/learnings-index.service.js +304 -0
  234. package/dist/backend/backend/src/services/knowledge/learnings-index.service.js.map +1 -0
  235. package/dist/backend/backend/src/services/knowledge/vector-store.service.d.ts.map +1 -1
  236. package/dist/backend/backend/src/services/knowledge/vector-store.service.js +24 -4
  237. package/dist/backend/backend/src/services/knowledge/vector-store.service.js.map +1 -1
  238. package/dist/backend/backend/src/services/mcp-server.d.ts +46 -2
  239. package/dist/backend/backend/src/services/mcp-server.d.ts.map +1 -1
  240. package/dist/backend/backend/src/services/mcp-server.js +216 -211
  241. package/dist/backend/backend/src/services/mcp-server.js.map +1 -1
  242. package/dist/backend/backend/src/services/mcp-tool-definitions.d.ts +254 -0
  243. package/dist/backend/backend/src/services/mcp-tool-definitions.d.ts.map +1 -0
  244. package/dist/backend/backend/src/services/mcp-tool-definitions.js +285 -0
  245. package/dist/backend/backend/src/services/mcp-tool-definitions.js.map +1 -0
  246. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.d.ts +174 -0
  247. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.d.ts.map +1 -0
  248. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.js +375 -0
  249. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.js.map +1 -0
  250. package/dist/backend/backend/src/services/memory/learning-format.validator.d.ts +97 -0
  251. package/dist/backend/backend/src/services/memory/learning-format.validator.d.ts.map +1 -0
  252. package/dist/backend/backend/src/services/memory/learning-format.validator.js +209 -0
  253. package/dist/backend/backend/src/services/memory/learning-format.validator.js.map +1 -0
  254. package/dist/backend/backend/src/services/memory/vector-store.service.d.ts.map +1 -1
  255. package/dist/backend/backend/src/services/memory/vector-store.service.js +19 -4
  256. package/dist/backend/backend/src/services/memory/vector-store.service.js.map +1 -1
  257. package/dist/backend/backend/src/services/onboarding/onboarding-provision.service.d.ts +16 -5
  258. package/dist/backend/backend/src/services/onboarding/onboarding-provision.service.d.ts.map +1 -1
  259. package/dist/backend/backend/src/services/onboarding/onboarding-provision.service.js +32 -5
  260. package/dist/backend/backend/src/services/onboarding/onboarding-provision.service.js.map +1 -1
  261. package/dist/backend/backend/src/services/onboarding/onboarding.service.d.ts +157 -0
  262. package/dist/backend/backend/src/services/onboarding/onboarding.service.d.ts.map +1 -0
  263. package/dist/backend/backend/src/services/onboarding/onboarding.service.js +229 -0
  264. package/dist/backend/backend/src/services/onboarding/onboarding.service.js.map +1 -0
  265. package/dist/backend/backend/src/services/onboarding/onboarding.types.d.ts +141 -0
  266. package/dist/backend/backend/src/services/onboarding/onboarding.types.d.ts.map +1 -0
  267. package/dist/backend/backend/src/services/onboarding/onboarding.types.js +18 -0
  268. package/dist/backend/backend/src/services/onboarding/onboarding.types.js.map +1 -0
  269. package/dist/backend/backend/src/services/pr-review/pr-review.service.d.ts.map +1 -1
  270. package/dist/backend/backend/src/services/pr-review/pr-review.service.js +1 -1
  271. package/dist/backend/backend/src/services/pr-review/pr-review.service.js.map +1 -1
  272. package/dist/backend/backend/src/services/project/task.service.d.ts.map +1 -1
  273. package/dist/backend/backend/src/services/project/task.service.js +5 -0
  274. package/dist/backend/backend/src/services/project/task.service.js.map +1 -1
  275. package/dist/backend/backend/src/services/skill/skill-executor.service.d.ts +41 -0
  276. package/dist/backend/backend/src/services/skill/skill-executor.service.d.ts.map +1 -1
  277. package/dist/backend/backend/src/services/skill/skill-executor.service.js +136 -7
  278. package/dist/backend/backend/src/services/skill/skill-executor.service.js.map +1 -1
  279. package/dist/backend/backend/src/services/skill/skill.service.d.ts.map +1 -1
  280. package/dist/backend/backend/src/services/skill/skill.service.js +1 -0
  281. package/dist/backend/backend/src/services/skill/skill.service.js.map +1 -1
  282. package/dist/backend/backend/src/services/slack/cross-machine-message.service.d.ts.map +1 -1
  283. package/dist/backend/backend/src/services/slack/cross-machine-message.service.js +17 -1
  284. package/dist/backend/backend/src/services/slack/cross-machine-message.service.js.map +1 -1
  285. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +39 -1
  286. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  287. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +158 -26
  288. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  289. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +248 -6
  290. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  291. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +531 -51
  292. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  293. package/dist/backend/backend/src/services/team-health/index.d.ts +16 -0
  294. package/dist/backend/backend/src/services/team-health/index.d.ts.map +1 -0
  295. package/dist/backend/backend/src/services/team-health/index.js +16 -0
  296. package/dist/backend/backend/src/services/team-health/index.js.map +1 -0
  297. package/dist/backend/backend/src/services/team-health/live-team-health-data-provider.d.ts +52 -0
  298. package/dist/backend/backend/src/services/team-health/live-team-health-data-provider.d.ts.map +1 -0
  299. package/dist/backend/backend/src/services/team-health/live-team-health-data-provider.js +161 -0
  300. package/dist/backend/backend/src/services/team-health/live-team-health-data-provider.js.map +1 -0
  301. package/dist/backend/backend/src/services/team-health/lost-dispatch-detector.d.ts +53 -0
  302. package/dist/backend/backend/src/services/team-health/lost-dispatch-detector.d.ts.map +1 -0
  303. package/dist/backend/backend/src/services/team-health/lost-dispatch-detector.js +88 -0
  304. package/dist/backend/backend/src/services/team-health/lost-dispatch-detector.js.map +1 -0
  305. package/dist/backend/backend/src/services/team-health/stale-trigger-detector.d.ts +44 -0
  306. package/dist/backend/backend/src/services/team-health/stale-trigger-detector.d.ts.map +1 -0
  307. package/dist/backend/backend/src/services/team-health/stale-trigger-detector.js +83 -0
  308. package/dist/backend/backend/src/services/team-health/stale-trigger-detector.js.map +1 -0
  309. package/dist/backend/backend/src/services/team-health/team-health-alert-router.d.ts +92 -0
  310. package/dist/backend/backend/src/services/team-health/team-health-alert-router.d.ts.map +1 -0
  311. package/dist/backend/backend/src/services/team-health/team-health-alert-router.js +328 -0
  312. package/dist/backend/backend/src/services/team-health/team-health-alert-router.js.map +1 -0
  313. package/dist/backend/backend/src/services/team-health/team-health-config.d.ts +41 -0
  314. package/dist/backend/backend/src/services/team-health/team-health-config.d.ts.map +1 -0
  315. package/dist/backend/backend/src/services/team-health/team-health-config.js +213 -0
  316. package/dist/backend/backend/src/services/team-health/team-health-config.js.map +1 -0
  317. package/dist/backend/backend/src/services/team-health/team-health-detector.d.ts +46 -0
  318. package/dist/backend/backend/src/services/team-health/team-health-detector.d.ts.map +1 -0
  319. package/dist/backend/backend/src/services/team-health/team-health-detector.js +347 -0
  320. package/dist/backend/backend/src/services/team-health/team-health-detector.js.map +1 -0
  321. package/dist/backend/backend/src/services/team-health/team-health-types.d.ts +154 -0
  322. package/dist/backend/backend/src/services/team-health/team-health-types.d.ts.map +1 -0
  323. package/dist/backend/backend/src/services/team-health/team-health-types.js +94 -0
  324. package/dist/backend/backend/src/services/team-health/team-health-types.js.map +1 -0
  325. package/dist/backend/backend/src/services/team-health/team-health-watchdog.service.d.ts +111 -0
  326. package/dist/backend/backend/src/services/team-health/team-health-watchdog.service.d.ts.map +1 -0
  327. package/dist/backend/backend/src/services/team-health/team-health-watchdog.service.js +226 -0
  328. package/dist/backend/backend/src/services/team-health/team-health-watchdog.service.js.map +1 -0
  329. package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts +148 -0
  330. package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts.map +1 -0
  331. package/dist/backend/backend/src/services/v3/mission-reminder.service.js +545 -0
  332. package/dist/backend/backend/src/services/v3/mission-reminder.service.js.map +1 -0
  333. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts +499 -0
  334. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -0
  335. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +1105 -0
  336. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -0
  337. package/dist/backend/backend/src/services/v3/request.service.d.ts +22 -0
  338. package/dist/backend/backend/src/services/v3/request.service.d.ts.map +1 -1
  339. package/dist/backend/backend/src/services/v3/request.service.js +71 -0
  340. package/dist/backend/backend/src/services/v3/request.service.js.map +1 -1
  341. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts +1 -0
  342. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  343. package/dist/backend/backend/src/services/v3/v3-data.service.js +22 -6
  344. package/dist/backend/backend/src/services/v3/v3-data.service.js.map +1 -1
  345. package/dist/backend/backend/src/types/event-bus.types.d.ts +19 -1
  346. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  347. package/dist/backend/backend/src/types/event-bus.types.js +43 -0
  348. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  349. package/dist/backend/backend/src/types/index.d.ts +22 -1
  350. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  351. package/dist/backend/backend/src/types/index.js.map +1 -1
  352. package/dist/backend/backend/src/types/review-reason.types.d.ts +63 -0
  353. package/dist/backend/backend/src/types/review-reason.types.d.ts.map +1 -0
  354. package/dist/backend/backend/src/types/review-reason.types.js +50 -0
  355. package/dist/backend/backend/src/types/review-reason.types.js.map +1 -0
  356. package/dist/backend/backend/src/types/skill.types.d.ts +9 -0
  357. package/dist/backend/backend/src/types/skill.types.d.ts.map +1 -1
  358. package/dist/backend/backend/src/types/skill.types.js.map +1 -1
  359. package/dist/backend/backend/src/types/slack.types.d.ts +4 -1
  360. package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
  361. package/dist/backend/backend/src/types/slack.types.js.map +1 -1
  362. package/dist/backend/backend/src/types/v2/mission.types.d.ts +18 -0
  363. package/dist/backend/backend/src/types/v2/mission.types.d.ts.map +1 -1
  364. package/dist/backend/backend/src/types/v2/mission.types.js +1 -0
  365. package/dist/backend/backend/src/types/v2/mission.types.js.map +1 -1
  366. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  367. package/dist/backend/backend/src/types/v2/work-item.types.js +25 -1
  368. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  369. package/dist/backend/backend/src/utils/google-userinfo.utils.d.ts +41 -0
  370. package/dist/backend/backend/src/utils/google-userinfo.utils.d.ts.map +1 -0
  371. package/dist/backend/backend/src/utils/google-userinfo.utils.js +44 -0
  372. package/dist/backend/backend/src/utils/google-userinfo.utils.js.map +1 -0
  373. package/dist/backend/backend/src/utils/team.utils.d.ts +38 -0
  374. package/dist/backend/backend/src/utils/team.utils.d.ts.map +1 -0
  375. package/dist/backend/backend/src/utils/team.utils.js +45 -0
  376. package/dist/backend/backend/src/utils/team.utils.js.map +1 -0
  377. package/dist/backend/backend/src/websocket/chat-v2.gateway.d.ts +195 -0
  378. package/dist/backend/backend/src/websocket/chat-v2.gateway.d.ts.map +1 -0
  379. package/dist/backend/backend/src/websocket/chat-v2.gateway.js +401 -0
  380. package/dist/backend/backend/src/websocket/chat-v2.gateway.js.map +1 -0
  381. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts +37 -2
  382. package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
  383. package/dist/backend/backend/src/websocket/terminal.gateway.js +106 -5
  384. package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
  385. package/dist/cli/backend/src/config/oauth.config.d.ts +33 -0
  386. package/dist/cli/backend/src/config/oauth.config.d.ts.map +1 -0
  387. package/dist/cli/backend/src/config/oauth.config.js +45 -0
  388. package/dist/cli/backend/src/config/oauth.config.js.map +1 -0
  389. package/dist/cli/backend/src/constants.d.ts +69 -1
  390. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  391. package/dist/cli/backend/src/constants.js +69 -2
  392. package/dist/cli/backend/src/constants.js.map +1 -1
  393. package/dist/cli/backend/src/services/core/config.service.js +3 -3
  394. package/dist/cli/backend/src/services/core/config.service.js.map +1 -1
  395. package/dist/cli/backend/src/services/core/storage.service.d.ts +7 -0
  396. package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
  397. package/dist/cli/backend/src/services/core/storage.service.js +15 -0
  398. package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
  399. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts +4 -16
  400. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -1
  401. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +7 -28
  402. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -1
  403. package/dist/cli/backend/src/services/knowledge/fts5-index.service.d.ts.map +1 -1
  404. package/dist/cli/backend/src/services/knowledge/fts5-index.service.js +18 -2
  405. package/dist/cli/backend/src/services/knowledge/fts5-index.service.js.map +1 -1
  406. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts +49 -13
  407. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.d.ts.map +1 -1
  408. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js +123 -29
  409. package/dist/cli/backend/src/services/knowledge/knowledge-search.service.js.map +1 -1
  410. package/dist/cli/backend/src/services/knowledge/vector-store.service.d.ts.map +1 -1
  411. package/dist/cli/backend/src/services/knowledge/vector-store.service.js +24 -4
  412. package/dist/cli/backend/src/services/knowledge/vector-store.service.js.map +1 -1
  413. package/dist/cli/backend/src/services/mcp-server.d.ts +46 -2
  414. package/dist/cli/backend/src/services/mcp-server.d.ts.map +1 -1
  415. package/dist/cli/backend/src/services/mcp-server.js +216 -211
  416. package/dist/cli/backend/src/services/mcp-server.js.map +1 -1
  417. package/dist/cli/backend/src/services/mcp-tool-definitions.d.ts +254 -0
  418. package/dist/cli/backend/src/services/mcp-tool-definitions.d.ts.map +1 -0
  419. package/dist/cli/backend/src/services/mcp-tool-definitions.js +285 -0
  420. package/dist/cli/backend/src/services/mcp-tool-definitions.js.map +1 -0
  421. package/dist/cli/backend/src/services/skill/skill-executor.service.d.ts +18 -0
  422. package/dist/cli/backend/src/services/skill/skill-executor.service.d.ts.map +1 -1
  423. package/dist/cli/backend/src/services/skill/skill-executor.service.js +7 -9
  424. package/dist/cli/backend/src/services/skill/skill-executor.service.js.map +1 -1
  425. package/dist/cli/backend/src/types/index.d.ts +22 -1
  426. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  427. package/dist/cli/backend/src/types/index.js.map +1 -1
  428. package/dist/cli/backend/src/types/skill.types.d.ts +9 -0
  429. package/dist/cli/backend/src/types/skill.types.d.ts.map +1 -1
  430. package/dist/cli/backend/src/types/skill.types.js.map +1 -1
  431. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  432. package/dist/cli/backend/src/types/v2/work-item.types.js +25 -1
  433. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  434. package/dist/cli/backend/src/utils/google-userinfo.utils.d.ts +41 -0
  435. package/dist/cli/backend/src/utils/google-userinfo.utils.d.ts.map +1 -0
  436. package/dist/cli/backend/src/utils/google-userinfo.utils.js +44 -0
  437. package/dist/cli/backend/src/utils/google-userinfo.utils.js.map +1 -0
  438. package/frontend/dist/assets/{index-9e6d97d1.js → index-7a4e7df5.js} +328 -326
  439. package/frontend/dist/assets/index-b7e59b2b.css +33 -0
  440. package/frontend/dist/index.html +2 -2
  441. package/package.json +2 -1
  442. package/config/skills/orchestrator/recall/SKILL.md +0 -47
  443. package/config/skills/orchestrator/recall/execute.sh +0 -13
  444. package/config/skills/orchestrator/record-learning/SKILL.md +0 -47
  445. package/config/skills/orchestrator/record-learning/execute.sh +0 -13
  446. package/config/skills/orchestrator/remember/SKILL.md +0 -55
  447. package/config/skills/orchestrator/remember/execute.sh +0 -15
  448. package/frontend/dist/assets/index-6aaa0630.css +0 -33
@@ -0,0 +1,54 @@
1
+ /**
2
+ * OSS team-membership validator for `ChatV2Service.validateTeamMembership`.
3
+ *
4
+ * Phase C F2b (issue #333) — outer-ring tenant defense for type='channel'
5
+ * channel creation. The chat service's optional `validateTeamMembership`
6
+ * dependency is invoked when a caller binds a channel to a `teamId`; if
7
+ * the principal is not authorized for that team, the service throws
8
+ * `forbidden_team` (HTTP 403) before persisting the row.
9
+ *
10
+ * In OSS single-user mode there is no per-user tenant binding — the
11
+ * single user owns every team in their workspace. The right semantic is
12
+ * therefore "the team must exist" (you cannot bind a channel to a team
13
+ * id you fabricated). Cloud Portal Phase E swaps in a tenant-aware
14
+ * validator that checks the user's tenant membership against the team's
15
+ * tenant.
16
+ *
17
+ * Implementation: `existsSync` of `<teamsDir>/<teamId>/config.json`. Sync
18
+ * by design — `ChatV2Service.createChannel` runs inside the synchronous
19
+ * `runHandler` controller wrapper. Async refactors are a Phase E concern.
20
+ *
21
+ * @module services/chat-v2/chat-v2.team-membership
22
+ */
23
+ import { existsSync } from 'fs';
24
+ import * as path from 'path';
25
+ import { StorageService } from '../core/storage.service.js';
26
+ /**
27
+ * Build the OSS validator. Captures the StorageService instance lazily so
28
+ * the singleton resolves correctly even when `getInstance()` lands later
29
+ * in module-init order (matches the existing `loadTeams` injection
30
+ * pattern in chat-v2 wiring).
31
+ *
32
+ * @param deps - Optional dependency overrides for tests.
33
+ * @returns A sync validator suitable for `ChatV2ServiceOptions.validateTeamMembership`.
34
+ *
35
+ * @example
36
+ * const validator = createOssTeamMembershipValidator();
37
+ * const service = getChatV2Service({ validateTeamMembership: validator });
38
+ */
39
+ export function createOssTeamMembershipValidator(deps = {}) {
40
+ const getTeamDir = deps.getTeamDir ??
41
+ ((teamId) => StorageService.getInstance().getTeamDir(teamId));
42
+ const fileExists = deps.fileExists ?? existsSync;
43
+ return (_principal, teamId) => {
44
+ // Defensive: a blank teamId never points to a real team. The service
45
+ // already rejects with VALIDATION before reaching the validator, so
46
+ // this is belt-and-suspenders.
47
+ if (typeof teamId !== 'string' || teamId.trim().length === 0) {
48
+ return false;
49
+ }
50
+ const configPath = path.join(getTeamDir(teamId), 'config.json');
51
+ return fileExists(configPath);
52
+ };
53
+ }
54
+ //# sourceMappingURL=chat-v2.team-membership.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-v2.team-membership.js","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/chat-v2.team-membership.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG5D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gCAAgC,CAC9C,OAKI,EAAE;IAEN,MAAM,UAAU,GACd,IAAI,CAAC,UAAU;QACf,CAAC,CAAC,MAAc,EAAE,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC;IAEjD,OAAO,CAAC,UAAyB,EAAE,MAAc,EAAW,EAAE;QAC5D,qEAAqE;QACrE,oEAAoE;QACpE,+BAA+B;QAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC;QAChE,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Chat V2 — Configuration constants.
3
+ *
4
+ * Loads Phase 1 defaults (from spec §15) and honors
5
+ * `CREWLY_CHAT_*` environment overrides. Pure functions;
6
+ * no disk I/O here.
7
+ *
8
+ * @module services/chat-v2/config
9
+ */
10
+ /** Full Chat V2 runtime config. All durations in ms, sizes in bytes. */
11
+ export interface ChatV2Config {
12
+ enabled: boolean;
13
+ /** Hard cap on message body size in UTF-8 bytes after NFC normalization. */
14
+ maxMessageBytes: number;
15
+ maxAttachmentBytes: number;
16
+ maxAttachmentsPerMessage: number;
17
+ allowedAttachmentMimes: readonly string[];
18
+ /** Max chars on channel name (validated at controller). */
19
+ maxChannelNameChars: number;
20
+ /** Max chars on optional channel purpose. */
21
+ maxPurposeChars: number;
22
+ /** Max bytes in message metadata JSON blob. */
23
+ maxMetadataBytes: number;
24
+ rateLimits: {
25
+ messagesPerSec: number;
26
+ messagesPerMin: number;
27
+ uploadsPerSec: number;
28
+ uploadsPerMin: number;
29
+ wsFramesPerSec: number;
30
+ };
31
+ websocket: {
32
+ heartbeatIntervalMs: number;
33
+ idleTimeoutMs: number;
34
+ pongTimeoutMs: number;
35
+ replayCap: number;
36
+ maxFrameBytes: number;
37
+ };
38
+ offlineQueue: {
39
+ maxPendingPerAgent: number;
40
+ maxAgeMs: number;
41
+ drainBatchSize: number;
42
+ drainPauseMs: number;
43
+ };
44
+ presence: {
45
+ pollIntervalMs: number;
46
+ };
47
+ portal: {
48
+ /** Name of the env var holding the Cloud-OSS shared service token. */
49
+ sharedSecretEnv: string;
50
+ };
51
+ storage: {
52
+ dbPath: string;
53
+ attachmentsDir: string;
54
+ uploadsStagingDir: string;
55
+ };
56
+ }
57
+ /**
58
+ * Resolve a path containing a leading `~` or `~/` to the user's home directory.
59
+ *
60
+ * @param input - Path possibly prefixed with `~` or `~/`
61
+ * @returns Absolute path with `~` expanded
62
+ */
63
+ export declare function expandHomePath(input: string): string;
64
+ /** Phase 1 defaults — source of truth is the tech spec §15. */
65
+ export declare const CHAT_V2_DEFAULTS: ChatV2Config;
66
+ /**
67
+ * Parse a positive integer from an env-string, falling back to a default.
68
+ *
69
+ * @param raw - Raw env-var value or undefined
70
+ * @param fallback - Default if raw is missing/invalid/non-positive
71
+ * @returns The parsed positive integer
72
+ */
73
+ export declare function parsePositiveInt(raw: string | undefined, fallback: number): number;
74
+ /**
75
+ * Parse a boolean env-var supporting `true`/`false`/`1`/`0` (case-insensitive).
76
+ *
77
+ * @param raw - Raw env-var value or undefined
78
+ * @param fallback - Default if raw is missing
79
+ * @returns The parsed boolean
80
+ */
81
+ export declare function parseBoolean(raw: string | undefined, fallback: boolean): boolean;
82
+ /**
83
+ * Build a fully-resolved config from defaults + environment overrides.
84
+ *
85
+ * Env vars honored (all optional):
86
+ * - `CREWLY_CHAT_ENABLED` — master switch
87
+ * - `CREWLY_CHAT_MAX_MESSAGE_BYTES` — per-message byte cap
88
+ * - `CREWLY_CHAT_MAX_ATTACHMENT_BYTES` — per-attachment byte cap
89
+ * - `CREWLY_CHAT_WS_HEARTBEAT_MS` — client-ping interval
90
+ * - `CREWLY_CHAT_WS_IDLE_TIMEOUT_MS` — server idle close
91
+ * - `CREWLY_CHAT_DB_PATH` — SQLite DB path (expands `~`)
92
+ * - `CREWLY_CHAT_ATTACHMENTS_DIR` — committed attachment dir (expands `~`)
93
+ * - `CREWLY_CHAT_UPLOADS_STAGING_DIR` — pre-commit upload dir (expands `~`)
94
+ * - `CREWLY_HOME` — when set and DB/path env vars are not, rebases storage under this dir
95
+ *
96
+ * @param env - The environment object to read from (defaults to `process.env`)
97
+ * @returns A fully-resolved, immutable ChatV2Config
98
+ */
99
+ export declare function loadChatV2Config(env?: NodeJS.ProcessEnv): ChatV2Config;
100
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,4EAA4E;IAC5E,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,wBAAwB,EAAE,MAAM,CAAC;IACjC,sBAAsB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,2DAA2D;IAC3D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,6CAA6C;IAC7C,eAAe,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,SAAS,EAAE;QACT,mBAAmB,EAAE,MAAM,CAAC;QAC5B,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,YAAY,EAAE;QACZ,kBAAkB,EAAE,MAAM,CAAC;QAC3B,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,EAAE;QACR,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,MAAM,EAAE;QACN,sEAAsE;QACtE,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAMD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,EAAE,YA6Cb,CAAC;AAMnB;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKlF;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAMhF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,YAAY,CA6DnF"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Chat V2 — Configuration constants.
3
+ *
4
+ * Loads Phase 1 defaults (from spec §15) and honors
5
+ * `CREWLY_CHAT_*` environment overrides. Pure functions;
6
+ * no disk I/O here.
7
+ *
8
+ * @module services/chat-v2/config
9
+ */
10
+ import * as os from 'os';
11
+ import * as path from 'path';
12
+ // ---------------------------------------------------------------------------
13
+ // Defaults (spec §15)
14
+ // ---------------------------------------------------------------------------
15
+ /**
16
+ * Resolve a path containing a leading `~` or `~/` to the user's home directory.
17
+ *
18
+ * @param input - Path possibly prefixed with `~` or `~/`
19
+ * @returns Absolute path with `~` expanded
20
+ */
21
+ export function expandHomePath(input) {
22
+ if (input === '~')
23
+ return os.homedir();
24
+ if (input.startsWith('~/'))
25
+ return path.join(os.homedir(), input.slice(2));
26
+ return input;
27
+ }
28
+ /** Phase 1 defaults — source of truth is the tech spec §15. */
29
+ export const CHAT_V2_DEFAULTS = Object.freeze({
30
+ enabled: true,
31
+ maxMessageBytes: 32768,
32
+ maxAttachmentBytes: 10 * 1024 * 1024,
33
+ maxAttachmentsPerMessage: 4,
34
+ allowedAttachmentMimes: Object.freeze([
35
+ 'image/png',
36
+ 'image/jpeg',
37
+ 'image/gif',
38
+ 'image/webp',
39
+ ]),
40
+ maxChannelNameChars: 128,
41
+ maxPurposeChars: 512,
42
+ maxMetadataBytes: 2048,
43
+ rateLimits: Object.freeze({
44
+ messagesPerSec: 10,
45
+ messagesPerMin: 60,
46
+ uploadsPerSec: 3,
47
+ uploadsPerMin: 20,
48
+ wsFramesPerSec: 20,
49
+ }),
50
+ websocket: Object.freeze({
51
+ heartbeatIntervalMs: 30000,
52
+ idleTimeoutMs: 60000,
53
+ pongTimeoutMs: 5000,
54
+ replayCap: 200,
55
+ maxFrameBytes: 65536,
56
+ }),
57
+ offlineQueue: Object.freeze({
58
+ maxPendingPerAgent: 100,
59
+ maxAgeMs: 24 * 60 * 60 * 1000,
60
+ drainBatchSize: 50,
61
+ drainPauseMs: 2000,
62
+ }),
63
+ presence: Object.freeze({
64
+ pollIntervalMs: 10000,
65
+ }),
66
+ portal: Object.freeze({
67
+ sharedSecretEnv: 'CREWLY_CLOUD_OSS_SERVICE_TOKEN',
68
+ }),
69
+ storage: Object.freeze({
70
+ dbPath: '~/.crewly/chat.db',
71
+ attachmentsDir: '~/.crewly/chat-attachments',
72
+ uploadsStagingDir: '~/.crewly/chat-uploads-staging',
73
+ }),
74
+ });
75
+ // ---------------------------------------------------------------------------
76
+ // Env-override loader
77
+ // ---------------------------------------------------------------------------
78
+ /**
79
+ * Parse a positive integer from an env-string, falling back to a default.
80
+ *
81
+ * @param raw - Raw env-var value or undefined
82
+ * @param fallback - Default if raw is missing/invalid/non-positive
83
+ * @returns The parsed positive integer
84
+ */
85
+ export function parsePositiveInt(raw, fallback) {
86
+ if (raw === undefined || raw === '')
87
+ return fallback;
88
+ const n = Number.parseInt(raw, 10);
89
+ if (!Number.isFinite(n) || n <= 0)
90
+ return fallback;
91
+ return n;
92
+ }
93
+ /**
94
+ * Parse a boolean env-var supporting `true`/`false`/`1`/`0` (case-insensitive).
95
+ *
96
+ * @param raw - Raw env-var value or undefined
97
+ * @param fallback - Default if raw is missing
98
+ * @returns The parsed boolean
99
+ */
100
+ export function parseBoolean(raw, fallback) {
101
+ if (raw === undefined)
102
+ return fallback;
103
+ const trimmed = raw.trim().toLowerCase();
104
+ if (trimmed === 'true' || trimmed === '1')
105
+ return true;
106
+ if (trimmed === 'false' || trimmed === '0')
107
+ return false;
108
+ return fallback;
109
+ }
110
+ /**
111
+ * Build a fully-resolved config from defaults + environment overrides.
112
+ *
113
+ * Env vars honored (all optional):
114
+ * - `CREWLY_CHAT_ENABLED` — master switch
115
+ * - `CREWLY_CHAT_MAX_MESSAGE_BYTES` — per-message byte cap
116
+ * - `CREWLY_CHAT_MAX_ATTACHMENT_BYTES` — per-attachment byte cap
117
+ * - `CREWLY_CHAT_WS_HEARTBEAT_MS` — client-ping interval
118
+ * - `CREWLY_CHAT_WS_IDLE_TIMEOUT_MS` — server idle close
119
+ * - `CREWLY_CHAT_DB_PATH` — SQLite DB path (expands `~`)
120
+ * - `CREWLY_CHAT_ATTACHMENTS_DIR` — committed attachment dir (expands `~`)
121
+ * - `CREWLY_CHAT_UPLOADS_STAGING_DIR` — pre-commit upload dir (expands `~`)
122
+ * - `CREWLY_HOME` — when set and DB/path env vars are not, rebases storage under this dir
123
+ *
124
+ * @param env - The environment object to read from (defaults to `process.env`)
125
+ * @returns A fully-resolved, immutable ChatV2Config
126
+ */
127
+ export function loadChatV2Config(env = process.env) {
128
+ const defaults = CHAT_V2_DEFAULTS;
129
+ // Optionally rebase storage paths under CREWLY_HOME when explicit storage envs are absent.
130
+ const crewlyHome = env['CREWLY_HOME'];
131
+ const crewlyHomeResolved = crewlyHome ? expandHomePath(crewlyHome) : null;
132
+ const rebase = (defaultRelative) => {
133
+ // `defaults.storage.*` are `~/.crewly/...` style; strip `~/.crewly/` → relative.
134
+ if (!crewlyHomeResolved)
135
+ return expandHomePath(defaultRelative);
136
+ const marker = '~/.crewly/';
137
+ if (defaultRelative.startsWith(marker)) {
138
+ return path.join(crewlyHomeResolved, defaultRelative.slice(marker.length));
139
+ }
140
+ return expandHomePath(defaultRelative);
141
+ };
142
+ const dbPathEnv = env['CREWLY_CHAT_DB_PATH'];
143
+ const attachmentsDirEnv = env['CREWLY_CHAT_ATTACHMENTS_DIR'];
144
+ const stagingDirEnv = env['CREWLY_CHAT_UPLOADS_STAGING_DIR'];
145
+ return Object.freeze({
146
+ enabled: parseBoolean(env['CREWLY_CHAT_ENABLED'], defaults.enabled),
147
+ maxMessageBytes: parsePositiveInt(env['CREWLY_CHAT_MAX_MESSAGE_BYTES'], defaults.maxMessageBytes),
148
+ maxAttachmentBytes: parsePositiveInt(env['CREWLY_CHAT_MAX_ATTACHMENT_BYTES'], defaults.maxAttachmentBytes),
149
+ maxAttachmentsPerMessage: defaults.maxAttachmentsPerMessage,
150
+ allowedAttachmentMimes: defaults.allowedAttachmentMimes,
151
+ maxChannelNameChars: defaults.maxChannelNameChars,
152
+ maxPurposeChars: defaults.maxPurposeChars,
153
+ maxMetadataBytes: defaults.maxMetadataBytes,
154
+ rateLimits: defaults.rateLimits,
155
+ websocket: Object.freeze({
156
+ ...defaults.websocket,
157
+ heartbeatIntervalMs: parsePositiveInt(env['CREWLY_CHAT_WS_HEARTBEAT_MS'], defaults.websocket.heartbeatIntervalMs),
158
+ idleTimeoutMs: parsePositiveInt(env['CREWLY_CHAT_WS_IDLE_TIMEOUT_MS'], defaults.websocket.idleTimeoutMs),
159
+ }),
160
+ offlineQueue: defaults.offlineQueue,
161
+ presence: defaults.presence,
162
+ portal: defaults.portal,
163
+ storage: Object.freeze({
164
+ dbPath: dbPathEnv ? expandHomePath(dbPathEnv) : rebase(defaults.storage.dbPath),
165
+ attachmentsDir: attachmentsDirEnv
166
+ ? expandHomePath(attachmentsDirEnv)
167
+ : rebase(defaults.storage.attachmentsDir),
168
+ uploadsStagingDir: stagingDirEnv
169
+ ? expandHomePath(stagingDirEnv)
170
+ : rebase(defaults.storage.uploadsStagingDir),
171
+ }),
172
+ });
173
+ }
174
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Chat V2 service module barrel.
3
+ *
4
+ * @module services/chat-v2
5
+ */
6
+ export { ChatV2Service, type ChatV2ServiceOptions } from './chat-v2.service.js';
7
+ export { loadChatV2Config, CHAT_V2_DEFAULTS, type ChatV2Config } from './config.js';
8
+ export { openChatDatabase, type ChatDatabase } from './sqlite/chat-db.js';
9
+ export { CHAT_ERROR_CODES, CHAT_CONTENT_TYPES, CHAT_SENDER_TYPES, ChatError, type ChatChannelDTO, type ChatMessageDTO, type ChatAttachmentDTO, type ChatPrincipal, type ChatContentType, type ChatSenderType, type ChatAgentPresenceStatus, type ChatErrorCode, } from './types.js';
10
+ export { ChatV2MentionResolver, type MentionTarget, type MentionTargetKind, type MentionResolverContext, type MentionResolverDeps, } from './chat-v2.mention-resolver.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,GACzB,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Chat V2 service module barrel.
3
+ *
4
+ * @module services/chat-v2
5
+ */
6
+ export { ChatV2Service } from './chat-v2.service.js';
7
+ export { loadChatV2Config, CHAT_V2_DEFAULTS } from './config.js';
8
+ export { openChatDatabase } from './sqlite/chat-db.js';
9
+ export { CHAT_ERROR_CODES, CHAT_CONTENT_TYPES, CHAT_SENDER_TYPES, ChatError, } from './types.js';
10
+ // Phase C BE.2 — mention dispatch routing scaffolding.
11
+ export { ChatV2MentionResolver, } from './chat-v2.mention-resolver.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../backend/src/services/chat-v2/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAA6B,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAqB,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAqB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,GASV,MAAM,YAAY,CAAC;AACpB,uDAAuD;AACvD,OAAO,EACL,qBAAqB,GAKtB,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * ChannelStore — CRUD for `chat_channels`.
3
+ *
4
+ * All authorization is handled at a higher layer (`ChatV2Service`);
5
+ * this store only enforces DB-level invariants (FKs, unique indexes).
6
+ *
7
+ * @module services/chat-v2/sqlite/channel.store
8
+ */
9
+ import { type ChatChannelRow, type ChatChannelType } from '../types.js';
10
+ import type { ChatDatabase } from './chat-db.js';
11
+ /** Payload for `ChannelStore.create`. */
12
+ export interface ChannelCreateInput {
13
+ /**
14
+ * Wire-level session binding. For `type='dm'` (default), this is the
15
+ * agent's session ID and the partial unique index enforces 1:1 binding.
16
+ * For `type='channel'`, callers should pass the empty string `''` —
17
+ * channel rows are excluded from the dm-binding unique index by design.
18
+ */
19
+ agentSession: string;
20
+ ownerUserId: string;
21
+ name: string;
22
+ purpose?: string | null;
23
+ /**
24
+ * Phase A (SEALED §3.1) — channel type. Defaults to `'dm'` to preserve
25
+ * the Phase 1 / Week 2 contract for callers that omit this field.
26
+ */
27
+ type?: ChatChannelType;
28
+ /** Phase A — required when `type='channel'`; null/empty for DMs. */
29
+ teamId?: string | null;
30
+ /** Phase A — optional project link for project-scoped channels. */
31
+ projectId?: string | null;
32
+ /** Phase A — for `type='dm'`, the resolved member-ID being DM'd. */
33
+ targetMemberId?: string | null;
34
+ /** Override the clock (tests). */
35
+ nowMs?: number;
36
+ /** Override the generated id (tests / deterministic callers). */
37
+ id?: string;
38
+ }
39
+ /** SQLite-backed store for chat channels. */
40
+ export declare class ChannelStore {
41
+ private readonly db;
42
+ constructor(db: ChatDatabase);
43
+ /**
44
+ * Create a new channel. Enforces the 1:1 agent-binding by catching
45
+ * the SQLite unique-constraint error and surfacing it as a
46
+ * `ChatError(agent_already_bound, 409)`.
47
+ *
48
+ * @param input - The channel creation payload
49
+ * @returns The inserted channel row
50
+ * @throws {ChatError} `agent_already_bound` (409) if the agent is already bound
51
+ * to another active channel.
52
+ */
53
+ create(input: ChannelCreateInput): ChatChannelRow;
54
+ /**
55
+ * Look up a channel by its id (active or archived).
56
+ *
57
+ * @param id - The channel id
58
+ * @returns The row, or null if not found
59
+ */
60
+ getById(id: string): ChatChannelRow | null;
61
+ /**
62
+ * Find the single active channel bound to an agent session, if any.
63
+ * Uses the partial unique index, so at most one row is returned.
64
+ *
65
+ * @param agentSession - The agent session id
66
+ * @returns The active channel row, or null
67
+ */
68
+ findActiveByAgentSession(agentSession: string): ChatChannelRow | null;
69
+ /**
70
+ * List channels owned by a user.
71
+ *
72
+ * Phase C — extended with `type` + `teamId` filter options so the
73
+ * `GET /api/chat/channels` endpoint can serve the channel-rail's
74
+ * grouped/workspace-scoped views without shipping every row to the
75
+ * client. Filters compose with AND; passing `undefined` for either is
76
+ * a no-op (the existing all-channels behavior).
77
+ *
78
+ * @param ownerUserId - The user_id whose channels to return
79
+ * @param options - Listing options
80
+ * @param options.includeArchived - When false (default), filter out archived rows
81
+ * @param options.limit - Max rows to return (capped at 100)
82
+ * @param options.type - Phase C: when set, filter rows to this channel type
83
+ * (`'dm'` or `'channel'`). Useful for the channel-rail's "DMs only" /
84
+ * "Channels only" views.
85
+ * @param options.teamId - Phase C: when set, filter rows whose `team_id`
86
+ * matches. Used by the workspace-scoped Channels group; empty / null
87
+ * `team_id` rows are excluded by this filter on purpose (DMs and
88
+ * workspace-less rows belong to no team).
89
+ * @returns Channel rows sorted by `last_message_at DESC, created_at DESC`
90
+ */
91
+ listByOwner(ownerUserId: string, options?: {
92
+ includeArchived?: boolean;
93
+ limit?: number;
94
+ type?: ChatChannelType;
95
+ teamId?: string;
96
+ }): ChatChannelRow[];
97
+ /**
98
+ * Mark a channel as archived (soft-delete). No-op if already archived.
99
+ *
100
+ * @param id - The channel id
101
+ * @param nowMs - Optional override for the archive timestamp
102
+ * @returns True if a row was updated (was active), false otherwise
103
+ */
104
+ archive(id: string, nowMs?: number): boolean;
105
+ /**
106
+ * Bump `last_message_at` to a provided timestamp if it is greater than
107
+ * the current value. Safe to call many times.
108
+ *
109
+ * @param id - The channel id
110
+ * @param timestampMs - The timestamp to record
111
+ */
112
+ touchLastMessageAt(id: string, timestampMs: number): void;
113
+ }
114
+ //# sourceMappingURL=channel.store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.store.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/chat-v2/sqlite/channel.store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAqBjD,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;OAGG;IACH,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAMD,6CAA6C;AAC7C,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,YAAY;IAE7C;;;;;;;;;OASG;IACH,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,cAAc;IA6DjD;;;;;OAKG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAW1C;;;;;;OAMG;IACH,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAgBrE;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,WAAW,CACT,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QACR,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,eAAe,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GACA,cAAc,EAAE;IAgCnB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAW5C;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;CAU1D"}