crewly 1.20.363 → 1.20.365

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 (158) hide show
  1. package/config/roles/orchestrator/prompt.md +3 -3
  2. package/config/roles/team-leader/prompt.md +4 -0
  3. package/config/skills/agent/core/reply/SKILL.md +10 -2
  4. package/config/skills/agent/core/reply-channel/SKILL.md +10 -0
  5. package/config/skills/agent/core/send-message/SKILL.md +14 -0
  6. package/config/skills/orchestrator/delegate-task/SKILL.md +14 -0
  7. package/config/skills/orchestrator/delegate-task/execute.sh +19 -2
  8. package/config/skills/orchestrator/delegate-task/execute.test.sh +30 -0
  9. package/config/skills/team-leader/delegate-task/execute.sh +6 -0
  10. package/dist/backend/backend/src/constants.d.ts +11 -0
  11. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  12. package/dist/backend/backend/src/constants.js +11 -0
  13. package/dist/backend/backend/src/constants.js.map +1 -1
  14. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.d.ts.map +1 -1
  15. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js +2 -0
  16. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js.map +1 -1
  17. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  18. package/dist/backend/backend/src/controllers/chat/chat.controller.js +14 -1
  19. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  20. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
  21. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +59 -0
  22. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
  23. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  24. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +40 -1
  25. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  26. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  27. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +7 -0
  28. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  29. package/dist/backend/backend/src/index.d.ts.map +1 -1
  30. package/dist/backend/backend/src/index.js +9 -0
  31. package/dist/backend/backend/src/index.js.map +1 -1
  32. package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  33. package/dist/backend/backend/src/services/event-bus/event-bus.service.js +5 -1
  34. package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  35. package/dist/backend/backend/src/services/messaging/agent-message-envelope.d.ts +98 -0
  36. package/dist/backend/backend/src/services/messaging/agent-message-envelope.d.ts.map +1 -0
  37. package/dist/backend/backend/src/services/messaging/agent-message-envelope.js +115 -0
  38. package/dist/backend/backend/src/services/messaging/agent-message-envelope.js.map +1 -0
  39. package/dist/backend/backend/src/services/messaging/owner-hook-message.d.ts +7 -0
  40. package/dist/backend/backend/src/services/messaging/owner-hook-message.d.ts.map +1 -1
  41. package/dist/backend/backend/src/services/messaging/owner-hook-message.js +36 -1
  42. package/dist/backend/backend/src/services/messaging/owner-hook-message.js.map +1 -1
  43. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.d.ts +15 -5
  44. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.d.ts.map +1 -1
  45. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.js +22 -0
  46. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.js.map +1 -1
  47. package/dist/backend/backend/src/services/orc/agent-mention-post-guard.d.ts +66 -0
  48. package/dist/backend/backend/src/services/orc/agent-mention-post-guard.d.ts.map +1 -0
  49. package/dist/backend/backend/src/services/orc/agent-mention-post-guard.js +78 -0
  50. package/dist/backend/backend/src/services/orc/agent-mention-post-guard.js.map +1 -0
  51. package/dist/backend/backend/src/services/orc/orc-status-router.service.d.ts.map +1 -1
  52. package/dist/backend/backend/src/services/orc/orc-status-router.service.js +5 -2
  53. package/dist/backend/backend/src/services/orc/orc-status-router.service.js.map +1 -1
  54. package/dist/backend/backend/src/services/orc/owner-completion-report.service.d.ts +84 -5
  55. package/dist/backend/backend/src/services/orc/owner-completion-report.service.d.ts.map +1 -1
  56. package/dist/backend/backend/src/services/orc/owner-completion-report.service.js +168 -19
  57. package/dist/backend/backend/src/services/orc/owner-completion-report.service.js.map +1 -1
  58. package/dist/backend/backend/src/services/orc/owner-completion-report.text.d.ts +42 -2
  59. package/dist/backend/backend/src/services/orc/owner-completion-report.text.d.ts.map +1 -1
  60. package/dist/backend/backend/src/services/orc/owner-completion-report.text.js +45 -5
  61. package/dist/backend/backend/src/services/orc/owner-completion-report.text.js.map +1 -1
  62. package/dist/backend/backend/src/services/orc/owner-completion-report.wiring.d.ts +16 -1
  63. package/dist/backend/backend/src/services/orc/owner-completion-report.wiring.d.ts.map +1 -1
  64. package/dist/backend/backend/src/services/orc/owner-completion-report.wiring.js +19 -3
  65. package/dist/backend/backend/src/services/orc/owner-completion-report.wiring.js.map +1 -1
  66. package/dist/backend/backend/src/services/orc/reply-destination-resolver.d.ts +33 -4
  67. package/dist/backend/backend/src/services/orc/reply-destination-resolver.d.ts.map +1 -1
  68. package/dist/backend/backend/src/services/orc/reply-destination-resolver.js +97 -12
  69. package/dist/backend/backend/src/services/orc/reply-destination-resolver.js.map +1 -1
  70. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts +6 -0
  71. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts.map +1 -1
  72. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js +42 -1
  73. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js.map +1 -1
  74. package/dist/backend/backend/src/services/orc/team-lead-report.d.ts +120 -0
  75. package/dist/backend/backend/src/services/orc/team-lead-report.d.ts.map +1 -0
  76. package/dist/backend/backend/src/services/orc/team-lead-report.js +198 -0
  77. package/dist/backend/backend/src/services/orc/team-lead-report.js.map +1 -0
  78. package/dist/backend/backend/src/services/orc/team-lead-report.wiring.d.ts +53 -0
  79. package/dist/backend/backend/src/services/orc/team-lead-report.wiring.d.ts.map +1 -0
  80. package/dist/backend/backend/src/services/orc/team-lead-report.wiring.js +85 -0
  81. package/dist/backend/backend/src/services/orc/team-lead-report.wiring.js.map +1 -0
  82. package/dist/backend/backend/src/services/orc/work-item-destination.d.ts +35 -0
  83. package/dist/backend/backend/src/services/orc/work-item-destination.d.ts.map +1 -1
  84. package/dist/backend/backend/src/services/orc/work-item-destination.js +38 -1
  85. package/dist/backend/backend/src/services/orc/work-item-destination.js.map +1 -1
  86. package/dist/backend/backend/src/services/orc/work-item-destination.wiring.d.ts +6 -0
  87. package/dist/backend/backend/src/services/orc/work-item-destination.wiring.d.ts.map +1 -1
  88. package/dist/backend/backend/src/services/orc/work-item-destination.wiring.js +8 -0
  89. package/dist/backend/backend/src/services/orc/work-item-destination.wiring.js.map +1 -1
  90. package/dist/backend/backend/src/services/slack/room-responder.d.ts +7 -3
  91. package/dist/backend/backend/src/services/slack/room-responder.d.ts.map +1 -1
  92. package/dist/backend/backend/src/services/slack/room-responder.js +26 -20
  93. package/dist/backend/backend/src/services/slack/room-responder.js.map +1 -1
  94. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +17 -0
  95. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  96. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +35 -1
  97. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  98. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +36 -0
  99. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  100. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +72 -1
  101. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  102. package/dist/backend/backend/src/services/trace/turn-trigger.d.ts.map +1 -1
  103. package/dist/backend/backend/src/services/trace/turn-trigger.js +6 -1
  104. package/dist/backend/backend/src/services/trace/turn-trigger.js.map +1 -1
  105. package/dist/backend/backend/src/types/event-bus.types.d.ts +6 -0
  106. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  107. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  108. package/dist/backend/build-info.json +2 -2
  109. package/dist/cli/backend/src/constants.d.ts +11 -0
  110. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  111. package/dist/cli/backend/src/constants.js +11 -0
  112. package/dist/cli/backend/src/constants.js.map +1 -1
  113. package/dist/cli/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
  114. package/dist/cli/backend/src/services/event-bus/event-bus.service.js +5 -1
  115. package/dist/cli/backend/src/services/event-bus/event-bus.service.js.map +1 -1
  116. package/dist/cli/backend/src/services/messaging/agent-message-envelope.d.ts +98 -0
  117. package/dist/cli/backend/src/services/messaging/agent-message-envelope.d.ts.map +1 -0
  118. package/dist/cli/backend/src/services/messaging/agent-message-envelope.js +115 -0
  119. package/dist/cli/backend/src/services/messaging/agent-message-envelope.js.map +1 -0
  120. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.d.ts +15 -5
  121. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.d.ts.map +1 -1
  122. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.js +22 -0
  123. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.js.map +1 -1
  124. package/dist/cli/backend/src/services/orc/owner-completion-report.text.d.ts +42 -2
  125. package/dist/cli/backend/src/services/orc/owner-completion-report.text.d.ts.map +1 -1
  126. package/dist/cli/backend/src/services/orc/owner-completion-report.text.js +45 -5
  127. package/dist/cli/backend/src/services/orc/owner-completion-report.text.js.map +1 -1
  128. package/dist/cli/backend/src/services/orc/team-lead-report.d.ts +120 -0
  129. package/dist/cli/backend/src/services/orc/team-lead-report.d.ts.map +1 -0
  130. package/dist/cli/backend/src/services/orc/team-lead-report.js +198 -0
  131. package/dist/cli/backend/src/services/orc/team-lead-report.js.map +1 -0
  132. package/dist/cli/backend/src/services/orc/team-lead-report.wiring.d.ts +53 -0
  133. package/dist/cli/backend/src/services/orc/team-lead-report.wiring.d.ts.map +1 -0
  134. package/dist/cli/backend/src/services/orc/team-lead-report.wiring.js +85 -0
  135. package/dist/cli/backend/src/services/orc/team-lead-report.wiring.js.map +1 -0
  136. package/dist/cli/backend/src/services/orc/work-item-destination.d.ts +35 -0
  137. package/dist/cli/backend/src/services/orc/work-item-destination.d.ts.map +1 -1
  138. package/dist/cli/backend/src/services/orc/work-item-destination.js +38 -1
  139. package/dist/cli/backend/src/services/orc/work-item-destination.js.map +1 -1
  140. package/dist/cli/backend/src/services/slack/room-responder.d.ts +7 -3
  141. package/dist/cli/backend/src/services/slack/room-responder.d.ts.map +1 -1
  142. package/dist/cli/backend/src/services/slack/room-responder.js +26 -20
  143. package/dist/cli/backend/src/services/slack/room-responder.js.map +1 -1
  144. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +17 -0
  145. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  146. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +35 -1
  147. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  148. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +36 -0
  149. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  150. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +72 -1
  151. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  152. package/dist/cli/backend/src/services/trace/turn-trigger.d.ts.map +1 -1
  153. package/dist/cli/backend/src/services/trace/turn-trigger.js +6 -1
  154. package/dist/cli/backend/src/services/trace/turn-trigger.js.map +1 -1
  155. package/dist/cli/backend/src/types/event-bus.types.d.ts +6 -0
  156. package/dist/cli/backend/src/types/event-bus.types.d.ts.map +1 -1
  157. package/dist/cli/backend/src/types/event-bus.types.js.map +1 -1
  158. package/package.json +1 -1
@@ -86,6 +86,23 @@ export function slackChannelNameFor(teamName, prefix = '') {
86
86
  const joined = p ? `${p}-${body}` : body;
87
87
  return joined.slice(0, SLACK_TEAM_CHANNEL_CONSTANTS.MAX_CHANNEL_NAME_LENGTH).replace(/-+$/g, '') || 'team';
88
88
  }
89
+ /**
90
+ * Whether a Slack thread's owner's machine provably received a room message:
91
+ * Cloud's delivery facts name it among the machines it pushed to, and Cloud
92
+ * has not marked that machine as unproven in the room. Without delivery
93
+ * facts (older Cloud builds) nothing is proven: the caller keeps the room's
94
+ * rules, so a message is never left with nobody (crewly#1376).
95
+ *
96
+ * @param room - Cloud's room presence for the message
97
+ * @param owner - The thread owner's roster entry
98
+ * @returns True when the owner's machine has the message
99
+ */
100
+ export function threadOwnerMachineHasIt(room, owner) {
101
+ const targets = room.delivery?.targets;
102
+ if (!Array.isArray(targets) || targets.length === 0 || !owner.instanceId)
103
+ return false;
104
+ return owner.verified !== false && targets.includes(owner.instanceId);
105
+ }
89
106
  /**
90
107
  * The machine that owns an un-@'d message in a shared room, from Cloud's
91
108
  * presence snapshot alone — every machine computes the same answer from
@@ -2168,7 +2185,8 @@ export class SlackTeamChannelService {
2168
2185
  // stale or retired machine never answers. Every machine judges by the
2169
2186
  // same snapshot (its own agents included). A card's asker is the
2170
2187
  // exception: its machine's decision path takes the reply.
2171
- const live = !room || room.members.some((m) => localAgentSession(m.agentSession) === localAgentSession(agent.session) && m.awake);
2188
+ const ownerMember = room?.members.find((m) => localAgentSession(m.agentSession) === localAgentSession(agent.session)) ?? null;
2189
+ const live = !room || !!ownerMember?.awake;
2172
2190
  if (live || via === 'card') {
2173
2191
  if (agent.local)
2174
2192
  return { ...base, pinned: { session: agent.session, answeredBy: agent.session, name: agent.name, reason: 'thread-owner' } };
@@ -2179,6 +2197,22 @@ export class SlackTeamChannelService {
2179
2197
  const watch = !(via === 'card' && live);
2180
2198
  return { ...base, pinned: { session: null, answeredBy: agent.session, name: agent.name, reason: 'thread-owner', ...(watch ? watchFlags() : {}) } };
2181
2199
  }
2200
+ // The thread owner is asleep, but its machine provably has the message
2201
+ // (Cloud pushed it there): that machine wakes it, and no agent of
2202
+ // another machine answers by its own room rules (crewly#1376: the Air's
2203
+ // Rex, not on the team, answered an un-@'d owner message in a thread
2204
+ // Atlas on the Mac owned).
2205
+ if (room && ownerMember && threadOwnerMachineHasIt(room, ownerMember)) {
2206
+ if (agent.local && !isSessionPaused(agent.session)) {
2207
+ return { ...base, pinned: { session: agent.session, answeredBy: agent.session, name: agent.name, reason: 'thread-owner' } };
2208
+ }
2209
+ if (!agent.local) {
2210
+ // Waking takes a minute or two: the watcher here only tells the
2211
+ // owner if nothing came, and never hands the message to our agents.
2212
+ const watch = isWatcher || noteOnlyHere ? { watchHere: true, watchNoteOnly: true } : {};
2213
+ return { ...base, pinned: { session: null, answeredBy: agent.session, name: agent.name, reason: 'thread-owner', ...watch } };
2214
+ }
2215
+ }
2182
2216
  return ownsRoom ? base : deferToRoomOwner;
2183
2217
  }
2184
2218
  catch (err) {