crewly 1.20.203 → 1.20.204

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 (139) hide show
  1. package/config/skills/agent/core/reply/SKILL.md +1 -0
  2. package/config/skills/agent/core/reply/execute.sh +7 -1
  3. package/config/skills/agent/core/reply-channel/SKILL.md +4 -0
  4. package/config/skills/agent/core/reply-channel/execute.sh +12 -1
  5. package/dist/backend/backend/src/constants.d.ts +60 -0
  6. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  7. package/dist/backend/backend/src/constants.js +60 -0
  8. package/dist/backend/backend/src/constants.js.map +1 -1
  9. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.d.ts.map +1 -1
  10. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js +1 -0
  11. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js.map +1 -1
  12. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  13. package/dist/backend/backend/src/controllers/chat/chat.controller.js +1 -0
  14. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  15. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
  16. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +50 -0
  17. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
  18. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts +6 -0
  19. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  20. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +2 -1
  21. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  22. package/dist/backend/backend/src/index.d.ts.map +1 -1
  23. package/dist/backend/backend/src/index.js +9 -1
  24. package/dist/backend/backend/src/index.js.map +1 -1
  25. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +117 -0
  26. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  27. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +165 -9
  28. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  29. package/dist/backend/backend/src/services/chat-v2/room-context-backlog.d.ts +93 -0
  30. package/dist/backend/backend/src/services/chat-v2/room-context-backlog.d.ts.map +1 -0
  31. package/dist/backend/backend/src/services/chat-v2/room-context-backlog.js +138 -0
  32. package/dist/backend/backend/src/services/chat-v2/room-context-backlog.js.map +1 -0
  33. package/dist/backend/backend/src/services/decisions/decision-card.d.ts.map +1 -1
  34. package/dist/backend/backend/src/services/decisions/decision-card.js +5 -1
  35. package/dist/backend/backend/src/services/decisions/decision-card.js.map +1 -1
  36. package/dist/backend/backend/src/services/decisions/decision.service.d.ts +26 -1
  37. package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  38. package/dist/backend/backend/src/services/decisions/decision.service.js +83 -5
  39. package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
  40. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +21 -0
  41. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
  42. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +48 -3
  43. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
  44. package/dist/backend/backend/src/services/monitoring/liveness-monitor.service.d.ts +27 -1
  45. package/dist/backend/backend/src/services/monitoring/liveness-monitor.service.d.ts.map +1 -1
  46. package/dist/backend/backend/src/services/monitoring/liveness-monitor.service.js +51 -2
  47. package/dist/backend/backend/src/services/monitoring/liveness-monitor.service.js.map +1 -1
  48. package/dist/backend/backend/src/services/orc/orc-chat-owner-mirror.d.ts +51 -4
  49. package/dist/backend/backend/src/services/orc/orc-chat-owner-mirror.d.ts.map +1 -1
  50. package/dist/backend/backend/src/services/orc/orc-chat-owner-mirror.js +83 -6
  51. package/dist/backend/backend/src/services/orc/orc-chat-owner-mirror.js.map +1 -1
  52. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts +16 -0
  53. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts.map +1 -1
  54. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js +22 -2
  55. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js.map +1 -1
  56. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.d.ts +9 -0
  57. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.d.ts.map +1 -1
  58. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.js +11 -0
  59. package/dist/backend/backend/src/services/restart/in-flight-turn-tracker.service.js.map +1 -1
  60. package/dist/backend/backend/src/services/slack/room-responder.d.ts +144 -0
  61. package/dist/backend/backend/src/services/slack/room-responder.d.ts.map +1 -0
  62. package/dist/backend/backend/src/services/slack/room-responder.js +236 -0
  63. package/dist/backend/backend/src/services/slack/room-responder.js.map +1 -0
  64. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  65. package/dist/backend/backend/src/services/slack/slack-initializer.js +36 -2
  66. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  67. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +107 -2
  68. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  69. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +403 -13
  70. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  71. package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts +27 -0
  72. package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -1
  73. package/dist/backend/backend/src/services/slack/slack-thread-context.service.js +52 -0
  74. package/dist/backend/backend/src/services/slack/slack-thread-context.service.js.map +1 -1
  75. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts +9 -0
  76. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  77. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js +20 -0
  78. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  79. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.d.ts +13 -1
  80. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -1
  81. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js +36 -3
  82. package/dist/backend/backend/src/services/v3/ticket-channel-hooks.js.map +1 -1
  83. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +54 -3
  84. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  85. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +117 -9
  86. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  87. package/dist/backend/backend/src/types/decision.types.d.ts +7 -0
  88. package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
  89. package/dist/backend/build-info.json +2 -2
  90. package/dist/cli/backend/src/constants.d.ts +60 -0
  91. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  92. package/dist/cli/backend/src/constants.js +60 -0
  93. package/dist/cli/backend/src/constants.js.map +1 -1
  94. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +117 -0
  95. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  96. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +165 -9
  97. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  98. package/dist/cli/backend/src/services/chat-v2/room-context-backlog.d.ts +93 -0
  99. package/dist/cli/backend/src/services/chat-v2/room-context-backlog.d.ts.map +1 -0
  100. package/dist/cli/backend/src/services/chat-v2/room-context-backlog.js +138 -0
  101. package/dist/cli/backend/src/services/chat-v2/room-context-backlog.js.map +1 -0
  102. package/dist/cli/backend/src/services/decisions/decision-card.d.ts.map +1 -1
  103. package/dist/cli/backend/src/services/decisions/decision-card.js +5 -1
  104. package/dist/cli/backend/src/services/decisions/decision-card.js.map +1 -1
  105. package/dist/cli/backend/src/services/decisions/decision.service.d.ts +26 -1
  106. package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  107. package/dist/cli/backend/src/services/decisions/decision.service.js +83 -5
  108. package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
  109. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +21 -0
  110. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
  111. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +48 -3
  112. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
  113. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.d.ts +9 -0
  114. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.d.ts.map +1 -1
  115. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.js +11 -0
  116. package/dist/cli/backend/src/services/restart/in-flight-turn-tracker.service.js.map +1 -1
  117. package/dist/cli/backend/src/services/slack/room-responder.d.ts +144 -0
  118. package/dist/cli/backend/src/services/slack/room-responder.d.ts.map +1 -0
  119. package/dist/cli/backend/src/services/slack/room-responder.js +236 -0
  120. package/dist/cli/backend/src/services/slack/room-responder.js.map +1 -0
  121. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +107 -2
  122. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  123. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +403 -13
  124. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  125. package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts +27 -0
  126. package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -1
  127. package/dist/cli/backend/src/services/slack/slack-thread-context.service.js +52 -0
  128. package/dist/cli/backend/src/services/slack/slack-thread-context.service.js.map +1 -1
  129. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts +9 -0
  130. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  131. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js +20 -0
  132. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  133. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.d.ts +13 -1
  134. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.d.ts.map +1 -1
  135. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js +36 -3
  136. package/dist/cli/backend/src/services/v3/ticket-channel-hooks.js.map +1 -1
  137. package/dist/cli/backend/src/types/decision.types.d.ts +7 -0
  138. package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -1
  139. package/package.json +1 -1
@@ -0,0 +1,144 @@
1
+ /**
2
+ * One responder per owner message in Slack rooms — the pure parts
3
+ * (specs/2026-10-03-one-responder-per-message.md).
4
+ *
5
+ * - {@link threadOwnerFromSlack}: who owns a Slack thread, read from the
6
+ * thread itself, so every machine names the same agent.
7
+ * - {@link findPriorRoomAnswer} / {@link heldReplyMessage}: the reply gate —
8
+ * a colleague already answered the owner's latest message in this thread.
9
+ *
10
+ * Incident (2026-10-03, #content-team): the owner's un-@'d reply to Atlas's
11
+ * D-92 reminder resolved the card (delivered to Atlas) and was also
12
+ * broadcast to the room; Atlas answered, and Ella answered the same thing
13
+ * six minutes later.
14
+ *
15
+ * @module services/slack/room-responder
16
+ */
17
+ import type { SlackContextMessage, SlackThreadContext } from '../../types/slack.types.js';
18
+ import type { ChatMessageDTO } from '../chat-v2/types.js';
19
+ /** An agent of the room, on this machine or another. */
20
+ export interface RoomAgentRef {
21
+ /** Session name (as this machine knows it; Cloud's for a remote agent) */
22
+ session: string;
23
+ /** Display name */
24
+ name: string;
25
+ /** Whether it runs on this machine */
26
+ local: boolean;
27
+ }
28
+ /** What {@link buildRoomAgentDirectory} needs. */
29
+ export interface RoomAgentDirectoryInput {
30
+ /** This machine's room members, with their own bot user id when installed */
31
+ local: ReadonlyArray<{
32
+ session: string;
33
+ name: string;
34
+ botUserId?: string | null;
35
+ }>;
36
+ /** Room members on other machines (Cloud's room roster minus this machine) */
37
+ remote: ReadonlyArray<{
38
+ session: string;
39
+ name: string;
40
+ }>;
41
+ }
42
+ /** Maps Slack authors and names to room agents. */
43
+ export interface RoomAgentDirectory {
44
+ /** The agent that wrote a Slack message, or null (a person, an unknown bot, or an unclear name) */
45
+ authorOf(m: SlackContextMessage): RoomAgentRef | null;
46
+ }
47
+ /**
48
+ * Whether two display names name the same agent: equal (case-insensitive),
49
+ * or one is the other plus a team suffix — "Ella" / "Ella (Crewly Marketing)".
50
+ *
51
+ * @param a - A name
52
+ * @param b - Another name
53
+ * @returns True when they match
54
+ */
55
+ export declare function sameAgentName(a: string, b: string): boolean;
56
+ /**
57
+ * Build the directory every machine uses to read the same thread the same way.
58
+ *
59
+ * A post by a local agent's own bot is that agent. Any other bot post is
60
+ * matched by name against the remote members — and against local members
61
+ * when it was posted with a username override (an agent with no app of its
62
+ * own). A name that matches several agents is unclear and maps to nobody.
63
+ *
64
+ * @param input - Local and remote room members
65
+ * @returns The directory
66
+ */
67
+ export declare function buildRoomAgentDirectory(input: RoomAgentDirectoryInput): RoomAgentDirectory;
68
+ /**
69
+ * Whether a Slack post is a decision card or a card reminder — the post an
70
+ * owner's reply in that thread answers. Cards carry `Decision D-n` (or
71
+ * `[D-n]` when titled by a ticket); the reminder says "Still waiting on you".
72
+ *
73
+ * @param text - Normalised Slack text
74
+ * @returns True for a card or reminder
75
+ */
76
+ export declare function isDecisionCardText(text: string): boolean;
77
+ /** Who owns a Slack thread, and by which rule. */
78
+ export interface SlackThreadOwner {
79
+ agent: RoomAgentRef;
80
+ /**
81
+ * `card`: a decision card / reminder went up since a person last spoke —
82
+ * the reply answers it, and the card's machine handles it whatever Cloud's
83
+ * presence says. `last-speaker`: the agent that spoke last.
84
+ */
85
+ via: 'card' | 'last-speaker';
86
+ }
87
+ /**
88
+ * Who owns a Slack thread (specs/2026-10-03-one-responder-per-message.md §1 c):
89
+ *
90
+ * 1. a decision card or reminder an agent posted since a person last spoke
91
+ * in the thread — the reply answers that card (the decision path's own
92
+ * rule, read from Slack so every machine agrees);
93
+ * 2. otherwise the agent that spoke last (owner's rule, 2026-09-21: a bare
94
+ * follow-up addresses whoever just spoke).
95
+ *
96
+ * @param ctx - The Slack thread before the owner's message (oldest first)
97
+ * @param dir - Room directory
98
+ * @returns The owner and the rule, or null when no agent has spoken in the thread
99
+ */
100
+ export declare function threadOwnerFromSlack(ctx: SlackThreadContext | null | undefined, dir: RoomAgentDirectory): SlackThreadOwner | null;
101
+ /** An answer already in the thread after the owner's latest message. */
102
+ export interface PriorRoomAnswer {
103
+ /** Who wrote it (display name when known, else its session) */
104
+ by: string;
105
+ /** The agent's session (local) or the recorded sender id (a colleague's Slack post) */
106
+ bySession: string;
107
+ /** The start of the answer */
108
+ excerpt: string;
109
+ /** Its chat message id */
110
+ messageId: string;
111
+ }
112
+ /**
113
+ * The responders the harness chose for a room message, as recorded on its row.
114
+ *
115
+ * @param m - Chat row
116
+ * @returns Sessions (local or Cloud names), empty when none was recorded
117
+ */
118
+ export declare function chosenRespondersOf(m: Pick<ChatMessageDTO, 'metadata'>): string[];
119
+ /**
120
+ * The reply gate (specs/2026-10-03-one-responder-per-message.md §2). A post
121
+ * is held only when ALL of these hold:
122
+ *
123
+ * - the owner's latest message in the thread has recorded responders, and
124
+ * the agent posting is not one of them nor @'d in it;
125
+ * - the agent owes no earlier owner message in this thread (it was the
126
+ * responder for, or @'d in, one it has not posted after);
127
+ * - one of those responders already answered (an interim note is not an
128
+ * answer), and that answer does not @ the agent posting.
129
+ *
130
+ * @param thread - The thread's rows, oldest first
131
+ * @param session - The agent about to post
132
+ * @param nameFor - Display name of a session, when known
133
+ * @returns The responder's answer when the post should be held, else null
134
+ */
135
+ export declare function findPriorRoomAnswer(thread: readonly ChatMessageDTO[], session: string, nameFor?: (session: string) => string | undefined): PriorRoomAnswer | null;
136
+ /**
137
+ * What the agent is told when its post is held. Never "drop it": an agent
138
+ * that was asked must still be able to answer.
139
+ *
140
+ * @param prior - The answer already there
141
+ * @returns English harness text
142
+ */
143
+ export declare function heldReplyMessage(prior: Pick<PriorRoomAnswer, 'by' | 'excerpt'>): string;
144
+ //# sourceMappingURL=room-responder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-responder.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/room-responder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAC1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,wDAAwD;AACxD,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,kDAAkD;AAClD,MAAM,WAAW,uBAAuB;IACtC,6EAA6E;IAC7E,KAAK,EAAE,aAAa,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IACnF,8EAA8E;IAC9E,MAAM,EAAE,aAAa,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1D;AAED,mDAAmD;AACnD,MAAM,WAAW,kBAAkB;IACjC,mGAAmG;IACnG,QAAQ,CAAC,CAAC,EAAE,mBAAmB,GAAG,YAAY,GAAG,IAAI,CAAC;CACvD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAK3D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,uBAAuB,GAAG,kBAAkB,CAqB1F;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,YAAY,CAAC;IACpB;;;;OAIG;IACH,GAAG,EAAE,MAAM,GAAG,cAAc,CAAC;CAC9B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,EAAE,kBAAkB,GAAG,gBAAgB,GAAG,IAAI,CAoBjI;AAED,wEAAwE;AACxE,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,EAAE,EAAE,MAAM,CAAC;IACX,uFAAuF;IACvF,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAkBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,GAAG,MAAM,EAAE,CAGhF;AAkBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,cAAc,EAAE,EACjC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAChD,eAAe,GAAG,IAAI,CAwCxB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,CAKvF"}
@@ -0,0 +1,236 @@
1
+ /**
2
+ * One responder per owner message in Slack rooms — the pure parts
3
+ * (specs/2026-10-03-one-responder-per-message.md).
4
+ *
5
+ * - {@link threadOwnerFromSlack}: who owns a Slack thread, read from the
6
+ * thread itself, so every machine names the same agent.
7
+ * - {@link findPriorRoomAnswer} / {@link heldReplyMessage}: the reply gate —
8
+ * a colleague already answered the owner's latest message in this thread.
9
+ *
10
+ * Incident (2026-10-03, #content-team): the owner's un-@'d reply to Atlas's
11
+ * D-92 reminder resolved the card (delivered to Atlas) and was also
12
+ * broadcast to the room; Atlas answered, and Ella answered the same thing
13
+ * six minutes later.
14
+ *
15
+ * @module services/slack/room-responder
16
+ */
17
+ import { OWNER_EVIDENCE_METADATA, ROOM_RESPONDER_CONSTANTS, SLACK_TYPING_CONSTANTS } from '../../constants.js';
18
+ /**
19
+ * Whether two display names name the same agent: equal (case-insensitive),
20
+ * or one is the other plus a team suffix — "Ella" / "Ella (Crewly Marketing)".
21
+ *
22
+ * @param a - A name
23
+ * @param b - Another name
24
+ * @returns True when they match
25
+ */
26
+ export function sameAgentName(a, b) {
27
+ const x = a.trim().toLowerCase();
28
+ const y = b.trim().toLowerCase();
29
+ if (!x || !y)
30
+ return false;
31
+ return x === y || x.startsWith(`${y} (`) || y.startsWith(`${x} (`);
32
+ }
33
+ /**
34
+ * Build the directory every machine uses to read the same thread the same way.
35
+ *
36
+ * A post by a local agent's own bot is that agent. Any other bot post is
37
+ * matched by name against the remote members — and against local members
38
+ * when it was posted with a username override (an agent with no app of its
39
+ * own). A name that matches several agents is unclear and maps to nobody.
40
+ *
41
+ * @param input - Local and remote room members
42
+ * @returns The directory
43
+ */
44
+ export function buildRoomAgentDirectory(input) {
45
+ const local = input.local.map((m) => ({ session: m.session, name: m.name, local: true }));
46
+ const remote = input.remote.map((m) => ({ session: m.session, name: m.name, local: false }));
47
+ const byBot = new Map();
48
+ for (const m of input.local) {
49
+ if (m.botUserId)
50
+ byBot.set(m.botUserId, { session: m.session, name: m.name, local: true });
51
+ }
52
+ const unique = (pool, name) => {
53
+ const hits = pool.filter((a) => sameAgentName(a.name, name));
54
+ if (hits.length === 1)
55
+ return hits[0];
56
+ // Prefer an exact name over a suffix match ("Ella" vs "Ella (Marketing)").
57
+ const exact = hits.filter((a) => a.name.trim().toLowerCase() === name.trim().toLowerCase());
58
+ return exact.length === 1 ? exact[0] : null;
59
+ };
60
+ return {
61
+ authorOf(m) {
62
+ if (m.userId && byBot.has(m.userId))
63
+ return byBot.get(m.userId);
64
+ if (!m.isBot)
65
+ return null;
66
+ return unique([...(m.usernameOverride ? local : []), ...remote], m.authorName);
67
+ },
68
+ };
69
+ }
70
+ /**
71
+ * Whether a Slack post is a decision card or a card reminder — the post an
72
+ * owner's reply in that thread answers. Cards carry `Decision D-n` (or
73
+ * `[D-n]` when titled by a ticket); the reminder says "Still waiting on you".
74
+ *
75
+ * @param text - Normalised Slack text
76
+ * @returns True for a card or reminder
77
+ */
78
+ export function isDecisionCardText(text) {
79
+ return /\bDecision D-\d+\b/.test(text) || /\[D-\d+\]/.test(text) || /Still waiting on you\b/.test(text);
80
+ }
81
+ /**
82
+ * Who owns a Slack thread (specs/2026-10-03-one-responder-per-message.md §1 c):
83
+ *
84
+ * 1. a decision card or reminder an agent posted since a person last spoke
85
+ * in the thread — the reply answers that card (the decision path's own
86
+ * rule, read from Slack so every machine agrees);
87
+ * 2. otherwise the agent that spoke last (owner's rule, 2026-09-21: a bare
88
+ * follow-up addresses whoever just spoke).
89
+ *
90
+ * @param ctx - The Slack thread before the owner's message (oldest first)
91
+ * @param dir - Room directory
92
+ * @returns The owner and the rule, or null when no agent has spoken in the thread
93
+ */
94
+ export function threadOwnerFromSlack(ctx, dir) {
95
+ if (!ctx || ctx.kind !== 'thread' || ctx.messages.length === 0)
96
+ return null;
97
+ const msgs = ctx.messages;
98
+ const authors = msgs.map((m) => dir.authorOf(m));
99
+ let lastPerson = -1;
100
+ for (let i = msgs.length - 1; i >= 0; i--) {
101
+ if (!authors[i] && !msgs[i].isBot) {
102
+ lastPerson = i;
103
+ break;
104
+ }
105
+ }
106
+ for (let i = msgs.length - 1; i > lastPerson; i--) {
107
+ const agent = authors[i];
108
+ if (agent && isDecisionCardText(msgs[i].text))
109
+ return { agent, via: 'card' };
110
+ }
111
+ for (let i = msgs.length - 1; i >= 0; i--) {
112
+ const agent = authors[i];
113
+ if (agent)
114
+ return { agent, via: 'last-speaker' };
115
+ }
116
+ return null;
117
+ }
118
+ /**
119
+ * The agent session behind a chat row, when an agent wrote it.
120
+ *
121
+ * @param m - Chat row
122
+ * @returns Session (or sender id for a colleague's post), or null for a person
123
+ */
124
+ function agentWriterOf(m) {
125
+ if (m.senderType === 'agent')
126
+ return m.senderId;
127
+ const md = m.metadata ?? {};
128
+ for (const key of [OWNER_EVIDENCE_METADATA.AUTHOR_AGENT_SESSION, OWNER_EVIDENCE_METADATA.REMOTE_AGENT_SESSION]) {
129
+ const v = md[key];
130
+ if (typeof v === 'string' && v.trim())
131
+ return v.trim();
132
+ }
133
+ return null;
134
+ }
135
+ /**
136
+ * The responders the harness chose for a room message, as recorded on its row.
137
+ *
138
+ * @param m - Chat row
139
+ * @returns Sessions (local or Cloud names), empty when none was recorded
140
+ */
141
+ export function chosenRespondersOf(m) {
142
+ const v = m.metadata?.[ROOM_RESPONDER_CONSTANTS.CHOSEN_RESPONDERS_METADATA_KEY];
143
+ return Array.isArray(v) ? v.filter((s) => typeof s === 'string') : [];
144
+ }
145
+ /**
146
+ * Whether an agent's post @'s a session: in its resolved mentions, or as
147
+ * `@Name` in its text.
148
+ *
149
+ * @param m - Chat row
150
+ * @param session - The agent
151
+ * @param name - Its display name, when known
152
+ * @returns True when it addresses that agent
153
+ */
154
+ function addresses(m, session, name) {
155
+ if ((m.mentions ?? []).includes(session))
156
+ return true;
157
+ if (!name?.trim())
158
+ return false;
159
+ const re = new RegExp(`@${name.trim().replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}(?![\\p{L}\\p{N}_])`, 'iu');
160
+ return re.test(m.content);
161
+ }
162
+ /**
163
+ * The reply gate (specs/2026-10-03-one-responder-per-message.md §2). A post
164
+ * is held only when ALL of these hold:
165
+ *
166
+ * - the owner's latest message in the thread has recorded responders, and
167
+ * the agent posting is not one of them nor @'d in it;
168
+ * - the agent owes no earlier owner message in this thread (it was the
169
+ * responder for, or @'d in, one it has not posted after);
170
+ * - one of those responders already answered (an interim note is not an
171
+ * answer), and that answer does not @ the agent posting.
172
+ *
173
+ * @param thread - The thread's rows, oldest first
174
+ * @param session - The agent about to post
175
+ * @param nameFor - Display name of a session, when known
176
+ * @returns The responder's answer when the post should be held, else null
177
+ */
178
+ export function findPriorRoomAnswer(thread, session, nameFor) {
179
+ const isOwnerRow = (m) => m.senderType === 'user' && !agentWriterOf(m);
180
+ const isAnswer = (m) => !!agentWriterOf(m) && m.metadata?.[SLACK_TYPING_CONSTANTS.INTERIM_METADATA_KEY] !== true && !!m.content.trim();
181
+ let ownerIdx = -1;
182
+ for (let i = thread.length - 1; i >= 0; i--) {
183
+ if (isOwnerRow(thread[i])) {
184
+ ownerIdx = i;
185
+ break;
186
+ }
187
+ }
188
+ if (ownerIdx < 0)
189
+ return null;
190
+ const latest = thread[ownerIdx];
191
+ const chosen = chosenRespondersOf(latest);
192
+ if (chosen.length === 0 || chosen.includes(session) || (latest.mentions ?? []).includes(session))
193
+ return null;
194
+ // An earlier owner message this agent was asked (or chosen) to answer and has not answered yet.
195
+ for (let i = 0; i < ownerIdx; i++) {
196
+ const m = thread[i];
197
+ if (!isOwnerRow(m))
198
+ continue;
199
+ if (!chosenRespondersOf(m).includes(session) && !(m.mentions ?? []).includes(session))
200
+ continue;
201
+ const answered = thread.slice(i + 1).some((r) => agentWriterOf(r) === session && isAnswer(r));
202
+ if (!answered)
203
+ return null;
204
+ }
205
+ const name = nameFor?.(session);
206
+ for (let j = ownerIdx + 1; j < thread.length; j++) {
207
+ const m = thread[j];
208
+ const writer = agentWriterOf(m);
209
+ if (!writer || writer === session || !chosen.includes(writer) || !isAnswer(m))
210
+ continue;
211
+ if (addresses(m, session, name))
212
+ return null;
213
+ const flat = m.content.replace(/\s+/g, ' ').trim();
214
+ const max = ROOM_RESPONDER_CONSTANTS.GATE_EXCERPT_CHARS;
215
+ const by = m.senderType === 'agent' ? nameFor?.(writer) ?? writer : m.senderId.replace(/\s*\(agent\)$/, '');
216
+ return {
217
+ by,
218
+ bySession: writer,
219
+ excerpt: flat.length > max ? `${flat.slice(0, max)}…` : flat,
220
+ messageId: m.id,
221
+ };
222
+ }
223
+ return null;
224
+ }
225
+ /**
226
+ * What the agent is told when its post is held. Never "drop it": an agent
227
+ * that was asked must still be able to answer.
228
+ *
229
+ * @param prior - The answer already there
230
+ * @returns English harness text
231
+ */
232
+ export function heldReplyMessage(prior) {
233
+ return (`Held, not posted: ${prior.by}, the agent answering the owner's latest message in this thread, already replied: "${prior.excerpt}". ` +
234
+ 'Post with --adds-new if you have something new, or if you were asked.');
235
+ }
236
+ //# sourceMappingURL=room-responder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-responder.js","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/room-responder.ts"],"names":[],"mappings":"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"}
@@ -26,10 +26,11 @@
26
26
  */
27
27
  import { type SlackAutoWorkingService } from './slack-auto-working.service.js';
28
28
  import type { Team, TeamMember } from '../../types/index.js';
29
- import type { SlackIncomingMessage, SlackOutgoingMessage, SlackTeamChannelMapping, SlackChannelInfo } from '../../types/slack.types.js';
29
+ import type { SlackIncomingMessage, SlackRoomPresence, SlackOutgoingMessage, SlackTeamChannelMapping, SlackChannelInfo, SlackContextMessage, SlackThreadContext } from '../../types/slack.types.js';
30
30
  import type { ChatMessageDTO } from '../chat-v2/types.js';
31
31
  import type { ChatV2Service } from '../chat-v2/chat-v2.service.js';
32
32
  import { type ChatV2DispatcherService, type DispatchMessageResult } from '../chat-v2/chat-v2.dispatcher.service.js';
33
+ import { type PriorRoomAnswer } from './room-responder.js';
33
34
  import type { StorageEvent } from '../core/storage.service.js';
34
35
  import type { SlackAgentIdentityService } from './slack-agent-identity.service.js';
35
36
  import type { SlackTypingPlaceholderService } from './slack-typing-placeholder.service.js';
@@ -90,7 +91,7 @@ export interface SlackTeamChannelServiceDeps {
90
91
  */
91
92
  identities?: TeamChannelIdentityApi | null;
92
93
  /** "Is typing…" placeholders for @-mentioned agents; optional. */
93
- typing?: (Pick<SlackTypingPlaceholderService, 'begin' | 'resolve' | 'setPhase' | 'fail'> & Partial<Pick<SlackTypingPlaceholderService, 'dropThread'>>) | null;
94
+ typing?: (Pick<SlackTypingPlaceholderService, 'begin' | 'resolve' | 'setPhase' | 'fail'> & Partial<Pick<SlackTypingPlaceholderService, 'dropThread' | 'withdraw'>>) | null;
94
95
  /**
95
96
  * Harness-posted "working on it": watches an owner's message and posts the
96
97
  * placeholder for the first recipient that starts working on it; optional.
@@ -123,6 +124,30 @@ export interface SlackTeamChannelServiceDeps {
123
124
  user?: string;
124
125
  };
125
126
  }) => Promise<void>;
127
+ /**
128
+ * The decision path's outcome for a thread reply: the card's asker, and
129
+ * whether the decision path consumed the message (resolved / skipped /
130
+ * snoozed it — the asker already has it). Null when the message answers
131
+ * no card here. Shares one run with the decision listener
132
+ * (specs/2026-10-03-one-responder-per-message.md §3).
133
+ */
134
+ decisionReplyFor?: (message: SlackIncomingMessage) => Promise<{
135
+ asker: string;
136
+ consumed: boolean;
137
+ } | null>;
138
+ /**
139
+ * What Slack shows in a thread after a message, read fresh: the 90 s
140
+ * fallback hands nothing over when an agent (on any machine) has already
141
+ * replied or put up "working on it" there. Null when unreadable.
142
+ */
143
+ slackRepliesAfter?: (slackChannelId: string, threadTs: string, afterTs: string) => Promise<SlackContextMessage[] | null>;
144
+ /**
145
+ * Read a message's Slack thread again (fresh tokens, no cached failure):
146
+ * the one retry when `message.threadContext` gave nothing.
147
+ */
148
+ readThreadContext?: (message: SlackIncomingMessage, options: {
149
+ maxWaitMs: number;
150
+ }) => Promise<SlackThreadContext | null>;
126
151
  /** Clock override for tests. */
127
152
  now?: () => Date;
128
153
  }
@@ -188,6 +213,20 @@ export declare function roomOwnerInstance(room: {
188
213
  instanceId: string;
189
214
  };
190
215
  }): string | null;
216
+ /**
217
+ * The one machine that watches a shared-room message nobody on it answers:
218
+ * the room owner (#1019), else Cloud's fallback machine, else — nobody awake
219
+ * and no fallback named — the lowest instance id among the machines in the
220
+ * room that Cloud reports live (`live`, when Cloud sends it; a member it
221
+ * marks `live: false` never counts). Every machine computes the same answer
222
+ * from the same snapshot. Because the last resort may still name a machine
223
+ * that is gone, every other machine that received the message keeps a
224
+ * note-only watch (see `NOTE_ONLY_WATCH_MS`).
225
+ *
226
+ * @param room - Cloud's room presence
227
+ * @returns Instance id, or null for an empty roster
228
+ */
229
+ export declare function roomWatcherInstance(room: SlackRoomPresence): string | null;
191
230
  /**
192
231
  * Whether a mapping is an ad-hoc channel (no Crewly team behind it).
193
232
  *
@@ -613,6 +652,72 @@ export declare class SlackTeamChannelService {
613
652
  * @returns The routing result, or null when the channel is not mapped
614
653
  */
615
654
  routeInbound(message: SlackIncomingMessage): Promise<RouteInboundResult | null>;
655
+ /**
656
+ * Who answers a person's room message, from data only this layer has
657
+ * (specs/2026-10-03-one-responder-per-message.md §1): the decision path's
658
+ * outcome (a), else — for an un-@'d thread reply — the Slack thread's
659
+ * owner (c). @-mentions (b) and the top-level room rule (d) are applied by
660
+ * the dispatcher. Never throws.
661
+ *
662
+ * @param message - Inbound message
663
+ * @param mapping - Its room
664
+ * @param members - Agents the room resolves names against (local)
665
+ * @param team - The room's team, or null for an ad-hoc room
666
+ * @param mentions - Local agents @'d
667
+ * @param handoffTo - Local agent the message was handed to
668
+ * @returns One-responder options for the dispatcher
669
+ */
670
+ private oneResponderFor;
671
+ /**
672
+ * Whether this machine's chat log can name a thread's last speaker when
673
+ * Slack cannot be read. Cloud never forwards other machines' bot posts, so
674
+ * with colleagues on other machines in the room the log is trusted only
675
+ * when its latest agent turn in the thread is local and recent.
676
+ *
677
+ * @param chatChannelId - The huddle
678
+ * @param threadId - The thread root here, when known
679
+ * @param messageId - The message being routed (not counted)
680
+ * @param room - Cloud's room presence
681
+ * @param me - This machine's instance id, when known
682
+ * @returns True when local rules may answer from the log
683
+ */
684
+ private localThreadLogTrusted;
685
+ /**
686
+ * Record on the owner's row who was chosen to answer it — the reply gate
687
+ * holds only a post that repeats what one of them already said.
688
+ *
689
+ * @param persisted - The owner's huddle row
690
+ * @param dispatch - What was delivered here
691
+ * @param one - The one-responder options used
692
+ */
693
+ private recordChosenResponders;
694
+ /**
695
+ * The owner of the Slack thread a message replies in, read from Slack
696
+ * (`message.threadContext`), so every machine names the same agent. Null
697
+ * owner when no agent has spoken in it; `readable: false` when the thread
698
+ * could not be read in time.
699
+ *
700
+ * @param message - Inbound thread reply
701
+ * @param members - Local agents the room resolves names against
702
+ * @param roomSessions - This machine's room members
703
+ * @param isLocal - Whether a session runs here
704
+ * @returns The thread owner, or null
705
+ */
706
+ private slackThreadOwner;
707
+ /**
708
+ * The reply gate (specs/2026-10-03-one-responder-per-message.md §2): an
709
+ * agent is about to post in a room thread where a different agent already
710
+ * answered the owner's latest message. Reads this machine's huddle thread
711
+ * only — no Slack call.
712
+ *
713
+ * @param input - Conversation (huddle id), the thread named (huddle message id or Slack thread key), and the agent
714
+ * @returns The earlier answer when the post should be held, else null
715
+ */
716
+ heldReplyFor(input: {
717
+ conversationId: string;
718
+ thread?: string | null;
719
+ agentSession: string;
720
+ }): Promise<PriorRoomAnswer | null>;
616
721
  /**
617
722
  * Hold an owner's room message that reached nobody here until an agent
618
723
  * takes it — on this machine or another — or the fallback runs.
@@ -1 +1 @@
1
- {"version":3,"file":"slack-team-channel.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-team-channel.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack-team-channel.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-team-channel.service.ts"],"names":[],"mappings":"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"}