crewly 1.20.356 → 1.20.359

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 (277) hide show
  1. package/config/constants.ts +11 -0
  2. package/dist/backend/backend/src/constants.d.ts +313 -17
  3. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  4. package/dist/backend/backend/src/constants.js +316 -17
  5. package/dist/backend/backend/src/constants.js.map +1 -1
  6. package/dist/backend/backend/src/index.d.ts +21 -0
  7. package/dist/backend/backend/src/index.d.ts.map +1 -1
  8. package/dist/backend/backend/src/index.js +232 -15
  9. package/dist/backend/backend/src/index.js.map +1 -1
  10. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +10 -2
  11. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  12. package/dist/backend/backend/src/services/agent/agent-registration.service.js +27 -2
  13. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  14. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts +34 -1
  15. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
  16. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js +69 -13
  17. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
  18. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts +8 -0
  19. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
  20. package/dist/backend/backend/src/services/agent/idle-detection.service.js +26 -2
  21. package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
  22. package/dist/backend/backend/src/services/agent/resource-mode.service.d.ts +9 -0
  23. package/dist/backend/backend/src/services/agent/resource-mode.service.d.ts.map +1 -1
  24. package/dist/backend/backend/src/services/agent/resource-mode.service.js +16 -0
  25. package/dist/backend/backend/src/services/agent/resource-mode.service.js.map +1 -1
  26. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +44 -3
  27. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  28. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +126 -11
  29. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  30. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +2 -0
  31. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  32. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +9 -1
  33. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  34. package/dist/backend/backend/src/services/memory/agent-memory-refresh.service.d.ts +150 -0
  35. package/dist/backend/backend/src/services/memory/agent-memory-refresh.service.d.ts.map +1 -0
  36. package/dist/backend/backend/src/services/memory/agent-memory-refresh.service.js +324 -0
  37. package/dist/backend/backend/src/services/memory/agent-memory-refresh.service.js.map +1 -0
  38. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.d.ts +9 -7
  39. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.d.ts.map +1 -1
  40. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.js +19 -17
  41. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.js.map +1 -1
  42. package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
  43. package/dist/backend/backend/src/services/memory/memory.service.js +11 -0
  44. package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
  45. package/dist/backend/backend/src/services/memory/startup-briefing.service.d.ts +114 -0
  46. package/dist/backend/backend/src/services/memory/startup-briefing.service.d.ts.map +1 -0
  47. package/dist/backend/backend/src/services/memory/startup-briefing.service.js +345 -0
  48. package/dist/backend/backend/src/services/memory/startup-briefing.service.js.map +1 -0
  49. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.d.ts +33 -1
  50. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.d.ts.map +1 -1
  51. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.js +69 -4
  52. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.js.map +1 -1
  53. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.d.ts +24 -1
  54. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.js +54 -3
  56. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.js.map +1 -1
  57. package/dist/backend/backend/src/services/orc/owner-completion-report.service.d.ts +9 -0
  58. package/dist/backend/backend/src/services/orc/owner-completion-report.service.d.ts.map +1 -1
  59. package/dist/backend/backend/src/services/orc/owner-completion-report.service.js +16 -2
  60. package/dist/backend/backend/src/services/orc/owner-completion-report.service.js.map +1 -1
  61. package/dist/backend/backend/src/services/project-tickets/ticket-prefixes.d.ts +30 -0
  62. package/dist/backend/backend/src/services/project-tickets/ticket-prefixes.d.ts.map +1 -0
  63. package/dist/backend/backend/src/services/project-tickets/ticket-prefixes.js +48 -0
  64. package/dist/backend/backend/src/services/project-tickets/ticket-prefixes.js.map +1 -0
  65. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +8 -0
  66. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  67. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +29 -8
  68. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  69. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts +27 -0
  70. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -1
  71. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +78 -24
  72. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -1
  73. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts +23 -0
  74. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts.map +1 -1
  75. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js +38 -1
  76. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -1
  77. package/dist/backend/backend/src/services/session/session-binding.d.ts +25 -2
  78. package/dist/backend/backend/src/services/session/session-binding.d.ts.map +1 -1
  79. package/dist/backend/backend/src/services/session/session-binding.js +32 -4
  80. package/dist/backend/backend/src/services/session/session-binding.js.map +1 -1
  81. package/dist/backend/backend/src/services/slack/agent-coordination.d.ts +119 -0
  82. package/dist/backend/backend/src/services/slack/agent-coordination.d.ts.map +1 -0
  83. package/dist/backend/backend/src/services/slack/agent-coordination.js +174 -0
  84. package/dist/backend/backend/src/services/slack/agent-coordination.js.map +1 -0
  85. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  86. package/dist/backend/backend/src/services/slack/slack-initializer.js +7 -0
  87. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  88. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +167 -0
  89. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  90. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +619 -9
  91. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  92. package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts +22 -0
  93. package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -1
  94. package/dist/backend/backend/src/services/slack/slack-thread-context.service.js +49 -12
  95. package/dist/backend/backend/src/services/slack/slack-thread-context.service.js.map +1 -1
  96. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts +7 -0
  97. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  98. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js +25 -4
  99. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  100. package/dist/backend/backend/src/services/team-move/team-move-chat.d.ts +21 -1
  101. package/dist/backend/backend/src/services/team-move/team-move-chat.d.ts.map +1 -1
  102. package/dist/backend/backend/src/services/team-move/team-move-chat.js +54 -2
  103. package/dist/backend/backend/src/services/team-move/team-move-chat.js.map +1 -1
  104. package/dist/backend/backend/src/services/team-move/team-move-exporter.d.ts +9 -4
  105. package/dist/backend/backend/src/services/team-move/team-move-exporter.d.ts.map +1 -1
  106. package/dist/backend/backend/src/services/team-move/team-move-exporter.js +32 -10
  107. package/dist/backend/backend/src/services/team-move/team-move-exporter.js.map +1 -1
  108. package/dist/backend/backend/src/services/team-move/team-move-importer.d.ts +19 -0
  109. package/dist/backend/backend/src/services/team-move/team-move-importer.d.ts.map +1 -1
  110. package/dist/backend/backend/src/services/team-move/team-move-importer.js +78 -3
  111. package/dist/backend/backend/src/services/team-move/team-move-importer.js.map +1 -1
  112. package/dist/backend/backend/src/services/team-move/team-move-runtime.d.ts.map +1 -1
  113. package/dist/backend/backend/src/services/team-move/team-move-runtime.js +8 -0
  114. package/dist/backend/backend/src/services/team-move/team-move-runtime.js.map +1 -1
  115. package/dist/backend/backend/src/services/team-move/team-move-transcripts.d.ts +106 -0
  116. package/dist/backend/backend/src/services/team-move/team-move-transcripts.d.ts.map +1 -0
  117. package/dist/backend/backend/src/services/team-move/team-move-transcripts.js +212 -0
  118. package/dist/backend/backend/src/services/team-move/team-move-transcripts.js.map +1 -0
  119. package/dist/backend/backend/src/services/team-move/team-move.types.d.ts +20 -0
  120. package/dist/backend/backend/src/services/team-move/team-move.types.d.ts.map +1 -1
  121. package/dist/backend/backend/src/services/team-move/team-move.types.js.map +1 -1
  122. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts +2 -2
  123. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
  124. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +11 -4
  125. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
  126. package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.d.ts.map +1 -1
  127. package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.js +3 -0
  128. package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.js.map +1 -1
  129. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.d.ts.map +1 -1
  130. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js +4 -1
  131. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js.map +1 -1
  132. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts.map +1 -1
  133. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js +4 -0
  134. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js.map +1 -1
  135. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts +36 -5
  136. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
  137. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js +75 -7
  138. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
  139. package/dist/backend/backend/src/services/wiki/wiki-lint.service.d.ts.map +1 -1
  140. package/dist/backend/backend/src/services/wiki/wiki-lint.service.js +3 -1
  141. package/dist/backend/backend/src/services/wiki/wiki-lint.service.js.map +1 -1
  142. package/dist/backend/backend/src/services/wiki/wiki-log-compile.service.d.ts +141 -0
  143. package/dist/backend/backend/src/services/wiki/wiki-log-compile.service.d.ts.map +1 -0
  144. package/dist/backend/backend/src/services/wiki/wiki-log-compile.service.js +324 -0
  145. package/dist/backend/backend/src/services/wiki/wiki-log-compile.service.js.map +1 -0
  146. package/dist/backend/backend/src/services/wiki/wiki-log-entries.d.ts +142 -0
  147. package/dist/backend/backend/src/services/wiki/wiki-log-entries.d.ts.map +1 -0
  148. package/dist/backend/backend/src/services/wiki/wiki-log-entries.js +222 -0
  149. package/dist/backend/backend/src/services/wiki/wiki-log-entries.js.map +1 -0
  150. package/dist/backend/backend/src/services/wiki/wiki-log-rotation.service.d.ts +93 -0
  151. package/dist/backend/backend/src/services/wiki/wiki-log-rotation.service.d.ts.map +1 -0
  152. package/dist/backend/backend/src/services/wiki/wiki-log-rotation.service.js +142 -0
  153. package/dist/backend/backend/src/services/wiki/wiki-log-rotation.service.js.map +1 -0
  154. package/dist/backend/backend/src/services/wiki/wiki-maintenance.service.d.ts +104 -0
  155. package/dist/backend/backend/src/services/wiki/wiki-maintenance.service.d.ts.map +1 -0
  156. package/dist/backend/backend/src/services/wiki/wiki-maintenance.service.js +192 -0
  157. package/dist/backend/backend/src/services/wiki/wiki-maintenance.service.js.map +1 -0
  158. package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts +3 -2
  159. package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts.map +1 -1
  160. package/dist/backend/backend/src/services/wiki/wiki-query.service.js +23 -39
  161. package/dist/backend/backend/src/services/wiki/wiki-query.service.js.map +1 -1
  162. package/dist/backend/backend/src/services/wiki/wiki-queue-drain.service.d.ts +105 -0
  163. package/dist/backend/backend/src/services/wiki/wiki-queue-drain.service.d.ts.map +1 -0
  164. package/dist/backend/backend/src/services/wiki/wiki-queue-drain.service.js +195 -0
  165. package/dist/backend/backend/src/services/wiki/wiki-queue-drain.service.js.map +1 -0
  166. package/dist/backend/backend/src/services/wiki/wiki-recent.service.d.ts.map +1 -1
  167. package/dist/backend/backend/src/services/wiki/wiki-recent.service.js +3 -0
  168. package/dist/backend/backend/src/services/wiki/wiki-recent.service.js.map +1 -1
  169. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts +28 -5
  170. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
  171. package/dist/backend/backend/src/services/wiki/wiki-search.service.js +96 -25
  172. package/dist/backend/backend/src/services/wiki/wiki-search.service.js.map +1 -1
  173. package/dist/backend/backend/src/services/wiki/wiki-vault-walk.d.ts +11 -0
  174. package/dist/backend/backend/src/services/wiki/wiki-vault-walk.d.ts.map +1 -1
  175. package/dist/backend/backend/src/services/wiki/wiki-vault-walk.js +17 -1
  176. package/dist/backend/backend/src/services/wiki/wiki-vault-walk.js.map +1 -1
  177. package/dist/backend/backend/src/services/wiki/work-record-transcript.d.ts +64 -0
  178. package/dist/backend/backend/src/services/wiki/work-record-transcript.d.ts.map +1 -0
  179. package/dist/backend/backend/src/services/wiki/work-record-transcript.js +194 -0
  180. package/dist/backend/backend/src/services/wiki/work-record-transcript.js.map +1 -0
  181. package/dist/backend/backend/src/services/wiki/work-record.d.ts +239 -0
  182. package/dist/backend/backend/src/services/wiki/work-record.d.ts.map +1 -0
  183. package/dist/backend/backend/src/services/wiki/work-record.js +631 -0
  184. package/dist/backend/backend/src/services/wiki/work-record.js.map +1 -0
  185. package/dist/backend/backend/src/services/wiki/work-record.service.d.ts +209 -0
  186. package/dist/backend/backend/src/services/wiki/work-record.service.d.ts.map +1 -0
  187. package/dist/backend/backend/src/services/wiki/work-record.service.js +514 -0
  188. package/dist/backend/backend/src/services/wiki/work-record.service.js.map +1 -0
  189. package/dist/backend/build-info.json +2 -2
  190. package/dist/backend/config/constants.d.ts +11 -0
  191. package/dist/backend/config/constants.d.ts.map +1 -1
  192. package/dist/backend/config/constants.js +11 -0
  193. package/dist/backend/config/constants.js.map +1 -1
  194. package/dist/cli/backend/src/constants.d.ts +313 -17
  195. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  196. package/dist/cli/backend/src/constants.js +316 -17
  197. package/dist/cli/backend/src/constants.js.map +1 -1
  198. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +10 -2
  199. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  200. package/dist/cli/backend/src/services/agent/agent-registration.service.js +27 -2
  201. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  202. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts +34 -1
  203. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
  204. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js +69 -13
  205. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
  206. package/dist/cli/backend/src/services/agent/resource-mode.service.d.ts +9 -0
  207. package/dist/cli/backend/src/services/agent/resource-mode.service.d.ts.map +1 -1
  208. package/dist/cli/backend/src/services/agent/resource-mode.service.js +16 -0
  209. package/dist/cli/backend/src/services/agent/resource-mode.service.js.map +1 -1
  210. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +44 -3
  211. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  212. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +126 -11
  213. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  214. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +2 -0
  215. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  216. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +9 -1
  217. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  218. package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
  219. package/dist/cli/backend/src/services/memory/memory.service.js +11 -0
  220. package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
  221. package/dist/cli/backend/src/services/memory/startup-briefing.service.d.ts +114 -0
  222. package/dist/cli/backend/src/services/memory/startup-briefing.service.d.ts.map +1 -0
  223. package/dist/cli/backend/src/services/memory/startup-briefing.service.js +345 -0
  224. package/dist/cli/backend/src/services/memory/startup-briefing.service.js.map +1 -0
  225. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.d.ts +33 -1
  226. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.d.ts.map +1 -1
  227. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.js +69 -4
  228. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.js.map +1 -1
  229. package/dist/cli/backend/src/services/slack/agent-coordination.d.ts +119 -0
  230. package/dist/cli/backend/src/services/slack/agent-coordination.d.ts.map +1 -0
  231. package/dist/cli/backend/src/services/slack/agent-coordination.js +174 -0
  232. package/dist/cli/backend/src/services/slack/agent-coordination.js.map +1 -0
  233. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +167 -0
  234. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  235. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +619 -9
  236. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  237. package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts +22 -0
  238. package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -1
  239. package/dist/cli/backend/src/services/slack/slack-thread-context.service.js +49 -12
  240. package/dist/cli/backend/src/services/slack/slack-thread-context.service.js.map +1 -1
  241. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts +7 -0
  242. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  243. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js +25 -4
  244. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  245. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts +36 -5
  246. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
  247. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js +75 -7
  248. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
  249. package/dist/cli/backend/src/services/wiki/wiki-log-entries.d.ts +142 -0
  250. package/dist/cli/backend/src/services/wiki/wiki-log-entries.d.ts.map +1 -0
  251. package/dist/cli/backend/src/services/wiki/wiki-log-entries.js +222 -0
  252. package/dist/cli/backend/src/services/wiki/wiki-log-entries.js.map +1 -0
  253. package/dist/cli/backend/src/services/wiki/wiki-recent.service.d.ts +51 -0
  254. package/dist/cli/backend/src/services/wiki/wiki-recent.service.d.ts.map +1 -0
  255. package/dist/cli/backend/src/services/wiki/wiki-recent.service.js +105 -0
  256. package/dist/cli/backend/src/services/wiki/wiki-recent.service.js.map +1 -0
  257. package/dist/cli/backend/src/services/wiki/wiki-search.service.d.ts +28 -5
  258. package/dist/cli/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
  259. package/dist/cli/backend/src/services/wiki/wiki-search.service.js +96 -25
  260. package/dist/cli/backend/src/services/wiki/wiki-search.service.js.map +1 -1
  261. package/dist/cli/backend/src/services/wiki/wiki-vault-walk.d.ts +11 -0
  262. package/dist/cli/backend/src/services/wiki/wiki-vault-walk.d.ts.map +1 -1
  263. package/dist/cli/backend/src/services/wiki/wiki-vault-walk.js +17 -1
  264. package/dist/cli/backend/src/services/wiki/wiki-vault-walk.js.map +1 -1
  265. package/dist/cli/backend/src/services/wiki/work-record-transcript.d.ts +64 -0
  266. package/dist/cli/backend/src/services/wiki/work-record-transcript.d.ts.map +1 -0
  267. package/dist/cli/backend/src/services/wiki/work-record-transcript.js +194 -0
  268. package/dist/cli/backend/src/services/wiki/work-record-transcript.js.map +1 -0
  269. package/dist/cli/backend/src/services/wiki/work-record.d.ts +239 -0
  270. package/dist/cli/backend/src/services/wiki/work-record.d.ts.map +1 -0
  271. package/dist/cli/backend/src/services/wiki/work-record.js +631 -0
  272. package/dist/cli/backend/src/services/wiki/work-record.js.map +1 -0
  273. package/dist/cli/config/constants.d.ts +11 -0
  274. package/dist/cli/config/constants.d.ts.map +1 -1
  275. package/dist/cli/config/constants.js +11 -0
  276. package/dist/cli/config/constants.js.map +1 -1
  277. package/package.json +1 -1
@@ -143,6 +143,27 @@ export declare class CrewlyServer {
143
143
  * Runs after orchestrator auto-start so the orchestrator is available.
144
144
  */
145
145
  private autoRestoreAgentSessionsIfEnabled;
146
+ /**
147
+ * Restore entries for owed agents that have no persisted session: built from
148
+ * the team config the way a team start would (member role and runtime, the
149
+ * team's first project as the working directory). A binding whose member is
150
+ * gone from the config by now is skipped.
151
+ *
152
+ * @param teams - Teams from storage
153
+ * @param bindings - Targets resolved to members (see selectAutoRestoreSessions)
154
+ * @returns Session entries in the shape the restore queue runs
155
+ */
156
+ private persistedSessionsForBindings;
157
+ /**
158
+ * A boot restore was deferred by the running-agent cap. The agent is owed
159
+ * something that does not expire on its own (an owner thread, a promise,
160
+ * queued messages), so keep trying until a slot frees (crewly#1337's retry;
161
+ * the queue check is replaced because not every debt is a queued message).
162
+ * Never throws.
163
+ *
164
+ * @param sessionName - The agent whose restore was deferred
165
+ */
166
+ private retryRestoreWhileOwed;
146
167
  /**
147
168
  * Check for and handle pending self-improvement from hot-reload.
148
169
  * This runs at startup to validate or rollback any changes made
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":"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"}
@@ -1039,6 +1039,98 @@ export class CrewlyServer {
1039
1039
  error: consolidationErr.message,
1040
1040
  });
1041
1041
  }
1042
+ // Wiki maintenance (#1345): hourly queue drain into the vault logs
1043
+ // (the bridge below is the LLM path and is usually switched off),
1044
+ // daily log rotation into llm-curated/log-archive/ and a weekly
1045
+ // digest page compiled from the log. No LLM. Non-fatal.
1046
+ try {
1047
+ const { WikiMaintenanceService } = await import('./services/wiki/wiki-maintenance.service.js');
1048
+ const maintenance = new WikiMaintenanceService();
1049
+ WikiMaintenanceService.setInstance(maintenance);
1050
+ maintenance.start();
1051
+ }
1052
+ catch (maintenanceErr) {
1053
+ this.logger.warn('Wiki maintenance failed to start (non-fatal)', {
1054
+ error: maintenanceErr.message,
1055
+ });
1056
+ }
1057
+ // Agent memory refresh (#1345): once a day, each active agent's own
1058
+ // recent vault-log entries are reflected into its memory.json and
1059
+ // gotchas/decisions into the project's memory. No LLM. Non-fatal.
1060
+ try {
1061
+ const { AgentMemoryRefreshService } = await import('./services/memory/agent-memory-refresh.service.js');
1062
+ const refresh = new AgentMemoryRefreshService({
1063
+ listAgents: async () => {
1064
+ const projects = await this.storageService.getProjects();
1065
+ const pathById = new Map(projects.map((p) => [p.id, p.path]));
1066
+ const agents = [];
1067
+ const orc = await this.storageService.getOrchestratorStatus();
1068
+ if (orc && orc.agentStatus === CREWLY_CONSTANTS.AGENT_STATUSES.ACTIVE) {
1069
+ agents.push({ sessionName: orc.sessionName, role: ORCHESTRATOR_ROLE });
1070
+ }
1071
+ for (const team of await this.storageService.getTeams()) {
1072
+ const projectPath = (team.projectIds ?? []).map((id) => pathById.get(id)).find((p) => !!p);
1073
+ for (const member of team.members ?? []) {
1074
+ if (member.agentStatus !== CREWLY_CONSTANTS.AGENT_STATUSES.ACTIVE || !member.sessionName)
1075
+ continue;
1076
+ agents.push({ sessionName: member.sessionName, role: member.role, projectPath });
1077
+ }
1078
+ }
1079
+ return agents;
1080
+ },
1081
+ });
1082
+ AgentMemoryRefreshService.setInstance(refresh);
1083
+ refresh.start();
1084
+ }
1085
+ catch (refreshErr) {
1086
+ this.logger.warn('Agent memory refresh failed to start (non-fatal)', {
1087
+ error: refreshErr.message,
1088
+ });
1089
+ }
1090
+ // Work records (#1349): one structured `(record)` entry per finished
1091
+ // (or long-blocked) WorkItem in the project vault log — who asked, who
1092
+ // did it, outputs, errors, helpers, outcome — from the WorkItem, its
1093
+ // ticket, its children, the trace and the doer's transcript tail. The
1094
+ // digest, search and the startup briefing read them. No LLM. Non-fatal.
1095
+ try {
1096
+ const [{ WorkRecordService }, { ProjectTicketService }, { getTraceStore }] = await Promise.all([
1097
+ import('./services/wiki/work-record.service.js'),
1098
+ import('./services/project-tickets/project-ticket.service.js'),
1099
+ import('./services/trace/trace-store.js'),
1100
+ ]);
1101
+ const pool = TaskPoolService.getInstance();
1102
+ const tickets = ProjectTicketService.getInstance();
1103
+ const records = new WorkRecordService({
1104
+ listWorkItems: () => pool.getAllItems(),
1105
+ findWorkItem: (id) => pool.findWorkItem(id),
1106
+ listTeams: () => this.storageService.getTeams(),
1107
+ listProjects: () => this.storageService.getProjects(),
1108
+ getTicket: (projectPath, id) => tickets.get(projectPath, id),
1109
+ getRequest: (id) => RequestService.getInstance().getById(id),
1110
+ readTrace: async (wi) => {
1111
+ const store = getTraceStore();
1112
+ const traceId = wi.traceId ?? store.traceByRef('workItem', wi.id);
1113
+ if (!traceId)
1114
+ return [];
1115
+ const all = await store.readAll(traceId);
1116
+ return all?.events ?? [];
1117
+ },
1118
+ locateTranscript: this.askTranscriptLocator(),
1119
+ eventBus: this.eventBusService,
1120
+ onTicketSettled: (listener) => tickets.onChange((change) => {
1121
+ const settled = change.ticket.status === 'done' || change.ticket.status === 'cancelled';
1122
+ if (settled && change.before.status !== change.ticket.status && change.ticket.workItemId)
1123
+ listener(change.ticket.workItemId);
1124
+ }),
1125
+ });
1126
+ WorkRecordService.setInstance(records);
1127
+ records.start();
1128
+ }
1129
+ catch (recordErr) {
1130
+ this.logger.warn('Work records failed to start (non-fatal)', {
1131
+ error: recordErr.message,
1132
+ });
1133
+ }
1042
1134
  // LLM-wiki → WorkItem bridge (2026-05-27): pending wiki queue
1043
1135
  // items + legacy migration candidates become claimable
1044
1136
  // WorkItems in the V3 pool. Replaces the bookkeep/reflect
@@ -2093,7 +2185,11 @@ export class CrewlyServer {
2093
2185
  // An agent mid-conversation with the owner is the last one stopped
2094
2186
  // for a slot, and its owner thread hears when it is
2095
2187
  // (specs/2026-10-08-owner-thread-sentinel.md).
2096
- owesOwnerThread: (name) => getOwnerThreadSentinel()?.owesOwner(name) === true || getFollowThrough()?.holdsIntent(name) === true,
2188
+ // … and so is an agent the owner spoke to in the last two hours, answered
2189
+ // or not: evicting it loses the conversation the owner is in (crewly#1344).
2190
+ owesOwnerThread: (name) => getOwnerThreadSentinel()?.owesOwner(name) === true ||
2191
+ getOwnerThreadSentinel()?.ownerActiveRecently(name) === true ||
2192
+ getFollowThrough()?.holdsIntent(name) === true,
2097
2193
  onStoppedForSlot: (name) => {
2098
2194
  reportOwnerThreadBlocking(name, { kind: 'stopped', why: 'slot' });
2099
2195
  // Same hook as every other stop path: what it owes goes back to the queue and it is brought back.
@@ -3803,7 +3899,8 @@ export class CrewlyServer {
3803
3899
  // Idle-boundary context cap for Claude Code members: a long single
3804
3900
  // task keeps growing its conversation (sessions at 650k–965k per
3805
3901
  // turn); between turns, save + clear + re-orient it past the cap
3806
- // (CREWLY_MEMBER_CONTEXT_CAP_TOKENS, default 300k, 0 disables).
3902
+ // (CREWLY_MEMBER_CONTEXT_CAP_TOKENS, default 450k — above Claude
3903
+ // Code's own 350k auto-compact, crewly#1344 — 0 disables).
3807
3904
  try {
3808
3905
  const { FreshTaskConversationService } = await import('./services/agent/fresh-task-conversation.service.js');
3809
3906
  FreshTaskConversationService.getInstance().startContextCapSweep();
@@ -4771,33 +4868,67 @@ export class CrewlyServer {
4771
4868
  });
4772
4869
  }
4773
4870
  let targets = null;
4871
+ // Why each target other than a WorkItem is owed something; the reason
4872
+ // is logged in the restore plan for agents that were idle at shutdown.
4873
+ const owedReason = new Map();
4874
+ const noteOwed = (names, reason) => {
4875
+ const out = [];
4876
+ for (const name of names) {
4877
+ if (!owedReason.has(name))
4878
+ owedReason.set(name, reason);
4879
+ out.push(name);
4880
+ }
4881
+ return out;
4882
+ };
4774
4883
  try {
4775
4884
  const allItems = await TaskPoolService.getInstance().getAllItems();
4776
4885
  // Work in hand only: active statuses, touched recently (see restore-filter),
4777
4886
  // plus agents whose turn the last restart cut off.
4778
4887
  const owed = await this.loadOwedWorkAtBoot();
4779
4888
  targets = sessionsToRestore(allItems, [
4780
- ...this.interruptedTurnsAtBoot.map((t) => t.sessionName),
4889
+ ...noteOwed(this.interruptedTurnsAtBoot.map((t) => t.sessionName), 'interrupted turn'),
4781
4890
  // Agents with messages still waiting for them (restored from
4782
4891
  // disk by the queue) — someone is owed an answer.
4783
- ...SubAgentMessageQueue.getInstance().sessionsWithPending(),
4892
+ ...noteOwed(SubAgentMessageQueue.getInstance().sessionsWithPending(), 'queued messages'),
4784
4893
  // Agents whose owner promise is past due and was never
4785
4894
  // nudged: idle or not, they come back to be reminded once
4786
4895
  // (2026-10-02, Eve). Not-yet-due and already-nudged
4787
4896
  // promises are left to the open-items sweep.
4788
- ...owed.map((c) => c.sessionName),
4897
+ ...noteOwed(owed.map((c) => c.sessionName), 'owed promise'),
4789
4898
  // Agents an owner Slack thread waits on: a promised
4790
4899
  // follow-up, an unanswered owner message, or an owner
4791
4900
  // card they asked (2026-10-08: Atlas waited on a browser
4792
4901
  // approval in the owner's thread and was skipped as "no
4793
4902
  // work in hand").
4794
- ...(await this.ownerThreadSessionsAtBoot()),
4903
+ ...noteOwed(await this.ownerThreadSessionsAtBoot(), 'owner thread waits on it'),
4795
4904
  ]);
4796
4905
  }
4797
4906
  catch (poolErr) {
4798
4907
  this.logger.warn('Auto-restore could not query task pool; falling back to restoring every persisted session', { error: poolErr instanceof Error ? poolErr.message : String(poolErr) });
4799
4908
  }
4800
- const selection = selectAutoRestoreSessions({ sessions: baselineSessions, teams, targets });
4909
+ // A target that was not running at shutdown (idle-stopped earlier) is
4910
+ // still owed something and comes back from its team binding — unless
4911
+ // the owner stopped it, its team is paused, or its team moved to
4912
+ // another machine (crewly#1348: Pia, 2026-10-16).
4913
+ const { liveAgentSessions, movedAwayTeamIds } = await import('./services/messaging/owner-thread-sentinel.wiring.js');
4914
+ const live = teams ? liveAgentSessions(teams, movedAwayTeamIds(this.config.crewlyHome)) : new Set();
4915
+ const selection = selectAutoRestoreSessions({
4916
+ sessions: baselineSessions,
4917
+ teams,
4918
+ targets,
4919
+ heldBack: (name) => name === ORCHESTRATOR_SESSION_NAME || !live.has(name) || isOwnerStopped(name) || !!pausedTeamOfSession(name),
4920
+ });
4921
+ if (selection.droppedTargets.length > 0) {
4922
+ this.logger.info('Not restoring owed agents that were idle at shutdown: no live team member is bound to the name, or it is held back', {
4923
+ dropped: selection.droppedTargets,
4924
+ });
4925
+ }
4926
+ const idleAtShutdown = await this.persistedSessionsForBindings(teams ?? [], selection.fromTargets);
4927
+ if (idleAtShutdown.length > 0) {
4928
+ this.logger.info('Restoring owed agents that were idle at shutdown (not in the persisted state)', {
4929
+ sessions: idleAtShutdown.map((s) => `${s.name} (${owedReason.get(s.name) ?? 'work in hand'})`),
4930
+ });
4931
+ }
4801
4932
  if (selection.unbound.length > 0) {
4802
4933
  this.logger.warn('Not auto-restoring sessions whose name no team member is bound to', {
4803
4934
  unbound: selection.unbound,
@@ -4811,7 +4942,7 @@ export class CrewlyServer {
4811
4942
  truncated: selection.skippedNoWork.length > 20,
4812
4943
  });
4813
4944
  }
4814
- const agentSessions = selection.sessions;
4945
+ const agentSessions = [...selection.sessions, ...idleAtShutdown];
4815
4946
  if (agentSessions.length === 0) {
4816
4947
  this.logger.info('No persisted agent sessions to restore (all idle, no pending WorkItems)');
4817
4948
  return;
@@ -4830,6 +4961,7 @@ export class CrewlyServer {
4830
4961
  owedSince.set(c.sessionName, Math.min(owedSince.get(c.sessionName) ?? Infinity, Number.isFinite(due) ? due : 0));
4831
4962
  }
4832
4963
  const leadRoles = TEAM_LEAD_CONSTANTS.LEAD_ROLES;
4964
+ const wasIdle = new Set(idleAtShutdown.map((s) => s.name));
4833
4965
  const entries = agentSessions.map((session) => {
4834
4966
  const ownerTimes = queueMessages.peek(session.name).filter((m) => m.meta?.owner === true).map((m) => m.queuedAt);
4835
4967
  if (owedSince.has(session.name))
@@ -4858,18 +4990,24 @@ export class CrewlyServer {
4858
4990
  });
4859
4991
  if (!result.success)
4860
4992
  this.logger.warn('Failed to restore agent session', { name: session.name, error: result.error });
4993
+ // Every slot was taken: keep trying until one frees instead of
4994
+ // dropping the agent (the owner's thread is still waiting).
4995
+ if (!result.success && result.errorCode === RESOURCE_MODE_CONSTANTS.START_DEFERRED_ERROR_CODE)
4996
+ this.retryRestoreWhileOwed(session.name);
4861
4997
  return { success: result.success };
4862
4998
  },
4863
4999
  onReady: () => this.sendRecoveryFor(session.name),
4864
5000
  };
5001
+ // An agent that was idle at shutdown says in the plan what it is owed.
5002
+ const idle = wasIdle.has(session.name) ? ` (${owedReason.get(session.name) ?? 'work in hand'}; was idle at shutdown)` : '';
4865
5003
  if (ownerTimes.length > 0) {
4866
- return { ...base, tier: RESTORE_TIER.OWNER, ownerSince: Math.min(...ownerTimes), reason: 'owner message waiting' };
5004
+ return { ...base, tier: RESTORE_TIER.OWNER, ownerSince: Math.min(...ownerTimes), reason: `owner message waiting${idle}` };
4867
5005
  }
4868
5006
  if (session.role === ORCHESTRATOR_ROLE)
4869
5007
  return { ...base, tier: RESTORE_TIER.ORCHESTRATOR, reason: 'orchestrator' };
4870
5008
  if (leadRoles.includes(session.role ?? ''))
4871
- return { ...base, tier: RESTORE_TIER.LEAD, reason: 'team lead with work in hand' };
4872
- return { ...base, tier: RESTORE_TIER.OTHER, reason: 'work in hand' };
5009
+ return { ...base, tier: RESTORE_TIER.LEAD, reason: `team lead with work in hand${idle}` };
5010
+ return { ...base, tier: RESTORE_TIER.OTHER, reason: `work in hand${idle}` };
4873
5011
  });
4874
5012
  // Runs in the background; boot continues while agents come back.
4875
5013
  void getRestoreQueue()
@@ -4889,6 +5027,71 @@ export class CrewlyServer {
4889
5027
  // Don't fail startup if auto-restore fails
4890
5028
  }
4891
5029
  }
5030
+ /**
5031
+ * Restore entries for owed agents that have no persisted session: built from
5032
+ * the team config the way a team start would (member role and runtime, the
5033
+ * team's first project as the working directory). A binding whose member is
5034
+ * gone from the config by now is skipped.
5035
+ *
5036
+ * @param teams - Teams from storage
5037
+ * @param bindings - Targets resolved to members (see selectAutoRestoreSessions)
5038
+ * @returns Session entries in the shape the restore queue runs
5039
+ */
5040
+ async persistedSessionsForBindings(teams, bindings) {
5041
+ if (bindings.length === 0)
5042
+ return [];
5043
+ let projectPaths = new Map();
5044
+ try {
5045
+ projectPaths = new Map((await this.storageService.getProjects()).map((p) => [p.id, p.path]));
5046
+ }
5047
+ catch (err) {
5048
+ this.logger.warn('Could not read projects for the owed agents; restoring them in the server directory', {
5049
+ error: err instanceof Error ? err.message : String(err),
5050
+ });
5051
+ }
5052
+ const out = [];
5053
+ for (const binding of bindings) {
5054
+ const team = teams.find((t) => t.id === binding.teamId);
5055
+ const member = team?.members.find((m) => m.id === binding.memberId);
5056
+ if (!team || !member)
5057
+ continue;
5058
+ out.push({
5059
+ name: binding.name,
5060
+ cwd: (team.projectIds[0] && projectPaths.get(team.projectIds[0])) || process.cwd(),
5061
+ command: '',
5062
+ args: [],
5063
+ runtimeType: member.runtimeType,
5064
+ role: member.role,
5065
+ teamId: team.id,
5066
+ memberId: member.id,
5067
+ });
5068
+ }
5069
+ return out;
5070
+ }
5071
+ /**
5072
+ * A boot restore was deferred by the running-agent cap. The agent is owed
5073
+ * something that does not expire on its own (an owner thread, a promise,
5074
+ * queued messages), so keep trying until a slot frees (crewly#1337's retry;
5075
+ * the queue check is replaced because not every debt is a queued message).
5076
+ * Never throws.
5077
+ *
5078
+ * @param sessionName - The agent whose restore was deferred
5079
+ */
5080
+ retryRestoreWhileOwed(sessionName) {
5081
+ void (async () => {
5082
+ const { scheduleDeferredStartRetry } = await import('./services/messaging/deferred-start-retry.js');
5083
+ const { activateAgentBySession } = await import('./controllers/team/team.controller.js');
5084
+ await scheduleDeferredStartRetry(sessionName, {
5085
+ activate: (n) => activateAgentBySession(this.apiController, n),
5086
+ hasPending: (n) => !isOwnerStopped(n),
5087
+ });
5088
+ })().catch((err) => {
5089
+ this.logger.warn('Could not retry a deferred boot restore', {
5090
+ sessionName,
5091
+ error: err instanceof Error ? err.message : String(err),
5092
+ });
5093
+ });
5094
+ }
4892
5095
  /**
4893
5096
  * Check for and handle pending self-improvement from hot-reload.
4894
5097
  * This runs at startup to validate or rollback any changes made
@@ -5910,8 +6113,17 @@ export class CrewlyServer {
5910
6113
  * @returns Session names (never the orchestrator)
5911
6114
  */
5912
6115
  async ownerThreadSessionsAtBoot() {
5913
- const { ownerThreadSessionsAtBoot } = await import('./services/messaging/owner-thread-sentinel.wiring.js');
5914
- const sessions = await ownerThreadSessionsAtBoot(this.config.crewlyHome, Date.now(), (msg, error) => this.logger.warn(msg, { error: error instanceof Error ? error.message : String(error) }));
6116
+ const { ownerThreadSessionsAtBoot, liveAgentSessions, movedAwayTeamIds } = await import('./services/messaging/owner-thread-sentinel.wiring.js');
6117
+ // Agents of a team that moved to another machine are not restored here
6118
+ // however long their owner thread was watched (crewly#1344).
6119
+ let live = null;
6120
+ try {
6121
+ live = liveAgentSessions(await this.storageService.getTeams(), movedAwayTeamIds(this.config.crewlyHome));
6122
+ }
6123
+ catch {
6124
+ live = null;
6125
+ }
6126
+ const sessions = await ownerThreadSessionsAtBoot(this.config.crewlyHome, Date.now(), (msg, error) => this.logger.warn(msg, { error: error instanceof Error ? error.message : String(error) }), live ? (session) => live.has(session) : undefined);
5915
6127
  if (sessions.length > 0)
5916
6128
  this.logger.info('Owner threads wait on these agents; restoring them as work in hand', { sessions });
5917
6129
  return sessions;
@@ -6607,6 +6819,10 @@ export class CrewlyServer {
6607
6819
  displayNameOf: (session) => (session === ORCHESTRATOR_SESSION_NAME ? 'Orc' : names.get(session) ?? session),
6608
6820
  listItems: () => TaskPoolService.getInstance().getAllItems(),
6609
6821
  workingStatusOf: (session) => activity.getObservedWorkingStatus(session) ?? null,
6822
+ // A thread whose agent left this machine (team moved, member removed)
6823
+ // is dropped instead of being re-stamped "restarted" forever (crewly#1344).
6824
+ // `names` holds this machine's current members, kept fresh by the watchdog.
6825
+ agentOnThisMachine: (session) => session === ORCHESTRATOR_SESSION_NAME || names.size === 0 || names.has(session),
6610
6826
  });
6611
6827
  watchdog.onTrack((entry) => wiring.onOwnerMessageTracked(sentinel, entry));
6612
6828
  this.logger.info('Owner thread sentinel started', { watched: sentinel.list().length });
@@ -6833,13 +7049,14 @@ export class CrewlyServer {
6833
7049
  * (with its messages persisted) was never started again (Pia, 2026-10-16).
6834
7050
  */
6835
7051
  wakeQueuedAgentsAfterBoot() {
6836
- const restoring = new Set(getRestoreQueue().stats().order);
7052
+ const restoreQueue = getRestoreQueue();
6837
7053
  const backend = getSessionBackendSync();
6838
7054
  const registration = this.apiController.agentRegistrationService;
6839
7055
  const sessions = SubAgentMessageQueue.getInstance()
6840
7056
  .sessionsWithPending()
6841
7057
  .filter((name) => name !== ORCHESTRATOR_SESSION_NAME &&
6842
- !restoring.has(name) &&
7058
+ // Waiting in the restore queue or being started by it right now
7059
+ !restoreQueue.isRestoring(name) &&
6843
7060
  !isOwnerStopped(name) &&
6844
7061
  !pausedTeamOfSession(name) &&
6845
7062
  !backend?.sessionExists(name) &&