crewly 1.20.188 → 1.20.190

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 (140) hide show
  1. package/config/skills/agent/core/attach-file/execute.sh +13 -4
  2. package/config/skills/agent/core/complete-task/execute.sh +3 -0
  3. package/config/skills/agent/core/reply/SKILL.md +32 -4
  4. package/config/skills/agent/core/reply/execute.sh +23 -1
  5. package/config/skills/agent/core/reply/execute.test.sh +9 -0
  6. package/config/skills/agent/core/reply-chat/SKILL.md +9 -2
  7. package/config/skills/agent/core/reply-chat/execute.sh +13 -1
  8. package/config/skills/agent/core/report-status/execute.sh +5 -0
  9. package/config/skills/agent/core/send-chat-response/execute.sh +1 -1
  10. package/dist/backend/backend/src/constants.d.ts +23 -0
  11. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  12. package/dist/backend/backend/src/constants.js +27 -1
  13. package/dist/backend/backend/src/constants.js.map +1 -1
  14. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.d.ts +14 -1
  15. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.d.ts.map +1 -1
  16. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js +66 -78
  17. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js.map +1 -1
  18. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts +12 -0
  19. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  20. package/dist/backend/backend/src/controllers/chat/chat.controller.js +148 -24
  21. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  22. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
  23. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +62 -0
  24. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
  25. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  26. package/dist/backend/backend/src/controllers/slack/slack.controller.js +120 -35
  27. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  28. package/dist/backend/backend/src/scripts/repair-orphan-superseded-decisions.d.ts +56 -0
  29. package/dist/backend/backend/src/scripts/repair-orphan-superseded-decisions.d.ts.map +1 -0
  30. package/dist/backend/backend/src/scripts/repair-orphan-superseded-decisions.js +114 -0
  31. package/dist/backend/backend/src/scripts/repair-orphan-superseded-decisions.js.map +1 -0
  32. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +7 -0
  33. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  34. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +9 -0
  35. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  36. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +7 -0
  37. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  38. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +19 -0
  39. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  40. package/dist/backend/backend/src/services/decisions/decision.service.d.ts +4 -1
  41. package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  42. package/dist/backend/backend/src/services/decisions/decision.service.js +10 -3
  43. package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
  44. package/dist/backend/backend/src/services/memory/project-memory.service.d.ts.map +1 -1
  45. package/dist/backend/backend/src/services/memory/project-memory.service.js +21 -10
  46. package/dist/backend/backend/src/services/memory/project-memory.service.js.map +1 -1
  47. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts +29 -0
  48. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
  49. package/dist/backend/backend/src/services/open-items/open-items.service.js +92 -8
  50. package/dist/backend/backend/src/services/open-items/open-items.service.js.map +1 -1
  51. package/dist/backend/backend/src/services/open-items/open-items.wiring.js +2 -2
  52. package/dist/backend/backend/src/services/open-items/open-items.wiring.js.map +1 -1
  53. package/dist/backend/backend/src/services/orc/agent-prompt-reference.service.d.ts +81 -0
  54. package/dist/backend/backend/src/services/orc/agent-prompt-reference.service.d.ts.map +1 -0
  55. package/dist/backend/backend/src/services/orc/agent-prompt-reference.service.js +88 -0
  56. package/dist/backend/backend/src/services/orc/agent-prompt-reference.service.js.map +1 -0
  57. package/dist/backend/backend/src/services/orc/orc-reply-route.service.d.ts +8 -0
  58. package/dist/backend/backend/src/services/orc/orc-reply-route.service.d.ts.map +1 -1
  59. package/dist/backend/backend/src/services/orc/orc-reply-route.service.js +11 -0
  60. package/dist/backend/backend/src/services/orc/orc-reply-route.service.js.map +1 -1
  61. package/dist/backend/backend/src/services/orc/reply-destination-resolver.d.ts +218 -0
  62. package/dist/backend/backend/src/services/orc/reply-destination-resolver.d.ts.map +1 -0
  63. package/dist/backend/backend/src/services/orc/reply-destination-resolver.js +343 -0
  64. package/dist/backend/backend/src/services/orc/reply-destination-resolver.js.map +1 -0
  65. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts +98 -0
  66. package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts.map +1 -0
  67. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js +362 -0
  68. package/dist/backend/backend/src/services/orc/reply-destination.wiring.js.map +1 -0
  69. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts +9 -1
  70. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  71. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +32 -7
  72. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  73. package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts +2 -2
  74. package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts.map +1 -1
  75. package/dist/backend/backend/src/services/slack/slack-agent-post.service.js +9 -0
  76. package/dist/backend/backend/src/services/slack/slack-agent-post.service.js.map +1 -1
  77. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  78. package/dist/backend/backend/src/services/slack/slack-initializer.js +4 -1
  79. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  80. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +1 -1
  81. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  82. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +24 -4
  83. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  84. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts +89 -7
  85. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  86. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js +159 -21
  87. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  88. package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts +23 -4
  89. package/dist/backend/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -1
  90. package/dist/backend/backend/src/services/v3/ticket-intake.service.js +42 -4
  91. package/dist/backend/backend/src/services/v3/ticket-intake.service.js.map +1 -1
  92. package/dist/backend/build-info.json +2 -2
  93. package/dist/cli/backend/src/constants.d.ts +23 -0
  94. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  95. package/dist/cli/backend/src/constants.js +27 -1
  96. package/dist/cli/backend/src/constants.js.map +1 -1
  97. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +7 -0
  98. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  99. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +9 -0
  100. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  101. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +7 -0
  102. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  103. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +19 -0
  104. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  105. package/dist/cli/backend/src/services/decisions/decision.service.d.ts +4 -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 +10 -3
  108. package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
  109. package/dist/cli/backend/src/services/memory/project-memory.service.d.ts.map +1 -1
  110. package/dist/cli/backend/src/services/memory/project-memory.service.js +21 -10
  111. package/dist/cli/backend/src/services/memory/project-memory.service.js.map +1 -1
  112. package/dist/cli/backend/src/services/open-items/open-items.service.d.ts +457 -0
  113. package/dist/cli/backend/src/services/open-items/open-items.service.d.ts.map +1 -0
  114. package/dist/cli/backend/src/services/open-items/open-items.service.js +1158 -0
  115. package/dist/cli/backend/src/services/open-items/open-items.service.js.map +1 -0
  116. package/dist/cli/backend/src/services/orc/agent-prompt-reference.service.d.ts +81 -0
  117. package/dist/cli/backend/src/services/orc/agent-prompt-reference.service.d.ts.map +1 -0
  118. package/dist/cli/backend/src/services/orc/agent-prompt-reference.service.js +88 -0
  119. package/dist/cli/backend/src/services/orc/agent-prompt-reference.service.js.map +1 -0
  120. package/dist/cli/backend/src/services/orc/orc-reply-route.service.d.ts +8 -0
  121. package/dist/cli/backend/src/services/orc/orc-reply-route.service.d.ts.map +1 -1
  122. package/dist/cli/backend/src/services/orc/orc-reply-route.service.js +11 -0
  123. package/dist/cli/backend/src/services/orc/orc-reply-route.service.js.map +1 -1
  124. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts +9 -1
  125. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  126. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +32 -7
  127. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  128. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +1 -1
  129. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  130. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +24 -4
  131. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  132. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts +89 -7
  133. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  134. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js +159 -21
  135. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  136. package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts +23 -4
  137. package/dist/cli/backend/src/services/v3/ticket-intake.service.d.ts.map +1 -1
  138. package/dist/cli/backend/src/services/v3/ticket-intake.service.js +42 -4
  139. package/dist/cli/backend/src/services/v3/ticket-intake.service.js.map +1 -1
  140. package/package.json +1 -1
@@ -13,7 +13,8 @@ import { ORCHESTRATOR_SESSION_NAME } from '../../constants.js';
13
13
  import { readAgentSessionHeader } from '../../utils/agent-caller.utils.js';
14
14
  import { OrcReplyRouteService } from '../../services/orc/orc-reply-route.service.js';
15
15
  import { isStatusReport, planAgentReply } from '../../services/orc/agent-reply-target.js';
16
- import { defaultWorkDestinationDeps, deliverToWorkDestination, planForSession, postNewThread, } from '../../services/orc/work-item-destination.wiring.js';
16
+ import { defaultWorkDestinationDeps, postNewThread, } from '../../services/orc/work-item-destination.wiring.js';
17
+ import { deliverReply } from '../../services/orc/reply-destination.wiring.js';
17
18
  import { parseSlackThreadKey } from '../../services/slack/slack-thread-key.js';
18
19
  import { getOwnerMessageWatchdog } from '../../services/messaging/owner-message-watchdog.service.js';
19
20
  import { LoggerService } from '../../services/core/logger.service.js';
@@ -47,7 +48,28 @@ const defaultDeps = {
47
48
  ownsConversation: isAgentsOwnConversation,
48
49
  postOrcSlack: defaultPostOrcSlack,
49
50
  workDestination: defaultWorkDestinationDeps,
51
+ deliverReply: (input) => deliverReply(input),
52
+ settleNoReply: async (agentSession, slackChannelId, threadTs) => {
53
+ const { getSlackTypingPlaceholderService } = await import('../../services/slack/slack-typing-placeholder.service.js');
54
+ return (await getSlackTypingPlaceholderService()?.settleNoReplyNeeded(agentSession, slackChannelId, threadTs)) ?? 0;
55
+ },
50
56
  };
57
+ /**
58
+ * The reference a `reply` names (`--to`, `--ticket`, `--work-item`, `--decision`).
59
+ *
60
+ * @param body - Request body
61
+ * @returns The reference, or undefined
62
+ */
63
+ export function referenceOf(body) {
64
+ const str = (v) => (typeof v === 'string' && v.trim() ? v.trim() : undefined);
65
+ const ref = {
66
+ ...(str(body.to) ?? str(body.messageId) ? { messageId: (str(body.to) ?? str(body.messageId)) } : {}),
67
+ ...(str(body.ticket) ? { ticket: str(body.ticket) } : {}),
68
+ ...(str(body.workItemId) ? { workItemId: str(body.workItemId) } : {}),
69
+ ...(str(body.decision) ? { decisionId: str(body.decision) } : {}),
70
+ };
71
+ return Object.keys(ref).length > 0 ? ref : undefined;
72
+ }
51
73
  /**
52
74
  * Build the handler.
53
75
  *
@@ -88,53 +110,41 @@ export function createAgentReplyHandler(deps = defaultDeps) {
88
110
  res.status(201).json({ success: true, data: { slackChannelId: delivered.slackChannelId, messageTs: delivered.messageTs, destination: delivered.kind } });
89
111
  return;
90
112
  }
91
- // No ids named: the answer follows the CURRENT work item's origin —
92
- // ticket thread, trigger destination, or a new top-level post — never
93
- // the thread the agent was last asked in (spec §6). The owner's fresh
94
- // message keeps the existing path below.
95
- // An owner origin the work item carries (inherited down the delegate →
96
- // verify chain) is used as the turn origin below.
97
- let workOwnerOrigin;
98
- let workContext;
99
- if (!isOrchestrator && !none && !requestedConv && !requestedThread && !isStatusReport(content)) {
100
- const wd = await deps.workDestination();
101
- const { destination, workItem } = await planForSession(session, wd);
102
- // Only an origin the WORK ITEM carries (not the agent's own fresh
103
- // turn, which the path below already uses) changes anything here.
104
- if (destination.kind === 'owner-origin' && workItem && destination.origin !== wd.ownerOrigin(session)) {
105
- workOwnerOrigin = destination.origin;
106
- workContext = { wd, topic: workItem.title };
107
- }
108
- if (destination.kind !== 'owner-origin') {
109
- try {
110
- const delivered = await deliverToWorkDestination(session, destination, content, wd);
111
- if (delivered) {
112
- logger.info('Agent reply sent to its work item destination', {
113
- session,
114
- workItemId: workItem?.id,
115
- destination: delivered.kind,
116
- slackChannelId: delivered.slackChannelId,
117
- threadTs: delivered.threadTs,
118
- reason: delivered.reason,
119
- });
120
- res.status(201).json({
121
- success: true,
122
- data: { slackChannelId: delivered.slackChannelId, messageTs: delivered.messageTs, threadTs: delivered.threadTs, destination: delivered.kind },
123
- });
124
- return;
125
- }
126
- logger.info('No Slack place for the work item destination — using the turn origin', { session, destination: destination.kind });
127
- }
128
- catch (err) {
129
- logger.warn('Work item destination post failed — using the turn origin', {
130
- session,
131
- destination: destination.kind,
132
- error: err instanceof Error ? err.message : String(err),
133
- });
134
- }
113
+ // Every agent answer goes through the one destination resolver
114
+ // (specs/2026-10-02-harness-owned-routing.md): references first
115
+ // (--to / --ticket / --work-item / --decision), then the ids it passed
116
+ // when they validate, then what the harness last prompted it about,
117
+ // its turn origin / current work, and its owner DM.
118
+ if (!isOrchestrator && !none && !isStatusReport(content)) {
119
+ const reference = referenceOf(body);
120
+ const delivery = await deps.deliverReply({
121
+ session,
122
+ content,
123
+ interim,
124
+ ...(reference ? { reference } : {}),
125
+ ...(requestedConv || requestedThread
126
+ ? { hints: { ...(requestedConv ? { conversationId: requestedConv } : {}), ...(requestedThread ? { thread: requestedThread } : {}) } }
127
+ : {}),
128
+ });
129
+ if (!delivery.ok) {
130
+ logger.warn('Agent reply could not be delivered — told the agent (not filed as status)', { session, error: delivery.error });
131
+ res.status(409).json({ success: false, error: delivery.error });
132
+ return;
135
133
  }
134
+ const dest = delivery.destination;
135
+ res.status(201).json({
136
+ success: true,
137
+ data: {
138
+ ...(delivery.messageId ? { messageId: delivery.messageId, conversationId: delivery.conversationId } : {}),
139
+ ...(delivery.slackChannelId ? { slackChannelId: delivery.slackChannelId, messageTs: delivery.messageTs } : {}),
140
+ ...(delivery.threadTs ? { threadTs: delivery.threadTs } : {}),
141
+ destination: dest.kind === 'work' ? dest.destination.kind : 'conversation',
142
+ via: dest.source,
143
+ },
144
+ });
145
+ return;
136
146
  }
137
- const origin = workOwnerOrigin ?? OrcReplyRouteService.getInstance().getLastOrigin(session);
147
+ const origin = OrcReplyRouteService.getInstance().getLastOrigin(session);
138
148
  const owns = requestedConv && !isOrchestrator ? await deps.ownsConversation(session, requestedConv) : false;
139
149
  const plan = planAgentReply({
140
150
  session,
@@ -148,7 +158,7 @@ export function createAgentReplyHandler(deps = defaultDeps) {
148
158
  logReplyPlan(session, plan);
149
159
  switch (plan.kind) {
150
160
  case 'status': {
151
- req.body = { content, senderName: session, senderType: 'agent' };
161
+ req.body = { content, senderName: session, senderType: 'agent', ...(typeof body.workItemId === 'string' ? { workItemId: body.workItemId } : {}) };
152
162
  await deps.agentResponse(req, res, next);
153
163
  return;
154
164
  }
@@ -158,6 +168,11 @@ export function createAgentReplyHandler(deps = defaultDeps) {
158
168
  ...(plan.origin ? { chatChannelId: plan.origin.conversationId } : {}),
159
169
  ...(key ? { slackChannelId: key.slackChannelId, threadTs: key.threadTs } : {}),
160
170
  }) ?? 0;
171
+ // The agent said explicitly that no answer is needed: its
172
+ // "working on it" in that thread may go (spec §5 — a turn that just
173
+ // ends does not take it down).
174
+ if (key)
175
+ await deps.settleNoReply?.(session, key.slackChannelId, key.threadTs).catch(() => 0);
161
176
  res.json({ success: true, data: { closed } });
162
177
  return;
163
178
  }
@@ -178,43 +193,16 @@ export function createAgentReplyHandler(deps = defaultDeps) {
178
193
  return;
179
194
  }
180
195
  case 'post': {
181
- let messageId = await deps.deliver({ conversationId: plan.conversationId, thread: plan.thread, agentSession: session, content, interim });
182
- let conversationId = plan.conversationId;
183
- // Explicit ids that turned out not to work: the origin still does.
184
- if (!messageId && plan.via === 'explicit' && origin && origin.conversationId !== plan.conversationId) {
185
- messageId = await deps.deliver({
186
- conversationId: origin.conversationId,
187
- thread: origin.slackThreadKey ?? origin.chatThreadId,
188
- agentSession: session,
189
- content,
190
- interim,
191
- });
192
- conversationId = origin.conversationId;
193
- }
194
- // The owner's place could not take it (the agent is not in that
195
- // conversation): a new top-level post in its team channel — never
196
- // whichever thread it was last asked in.
197
- if (!messageId && plan.via === 'origin' && workContext) {
198
- const posted = await deliverToWorkDestination(session, { kind: 'new-top-level', topic: workContext.topic, reason: 'the work item origin did not take the reply' }, content, workContext.wd).catch(() => null);
199
- if (posted) {
200
- logger.info('Agent reply posted as a new top-level message — its origin conversation did not take it', { session, slackChannelId: posted.slackChannelId });
201
- res.status(201).json({ success: true, data: { slackChannelId: posted.slackChannelId, messageTs: posted.messageTs, destination: posted.kind } });
202
- return;
203
- }
204
- }
196
+ // Only the orchestrator's own-conversation posts reach here.
197
+ const messageId = await deps.deliver({ conversationId: plan.conversationId, thread: plan.thread, agentSession: session, content, interim });
205
198
  if (!messageId) {
206
- logger.warn('Agent reply could not be delivered — told the agent (not filed as status)', {
207
- session,
208
- conversationId: plan.conversationId,
209
- thread: plan.thread,
210
- });
211
199
  res.status(409).json({
212
200
  success: false,
213
- error: `Could not post your reply into conversation ${plan.conversationId}. It was NOT delivered. Check you are a member there, or pass --conversation <id> from your prompt.`,
201
+ error: `Your message was NOT delivered: conversation ${plan.conversationId} did not take it. Run: reply "<your message>" without ids.`,
214
202
  });
215
203
  return;
216
204
  }
217
- res.status(201).json({ success: true, data: { messageId, conversationId } });
205
+ res.status(201).json({ success: true, data: { messageId, conversationId: plan.conversationId } });
218
206
  return;
219
207
  }
220
208
  case 'no-target':
@@ -1 +1 @@
1
- {"version":3,"file":"agent-reply.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/chat/agent-reply.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-reply.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/chat/agent-reply.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAuB,MAAM,0CAA0C,CAAC;AAC/G,OAAO,EACL,0BAA0B,EAC1B,aAAa,GAEd,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EAAE,YAAY,EAA8C,MAAM,gDAAgD,CAAC;AAE1H,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,4DAA4D,CAAC;AACrG,OAAO,EAAE,aAAa,EAAwB,MAAM,uCAAuC,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,+BAA+B,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/G,MAAM,MAAM,GAAoB,aAAa,CAAC,WAAW,EAAE,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;AAkBhG;;;;;GAKG;AACH,KAAK,UAAU,mBAAmB,CAAC,KAA6D;IAC9F,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,uCAAuC,CAAC,CAAC;IAClF,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACpE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9I,MAAM,EAAE,2BAA2B,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IACrF,MAAM,2BAA2B,CAAC;QAChC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,iBAAiB,EAAE,yBAAyB;QAC5C,OAAO,EAAE,KAAK,CAAC,IAAI;QACnB,SAAS,EAAE,MAAM;KAClB,CAAC,CAAC;IACH,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,WAAW,GAAmB;IAClC,aAAa;IACb,OAAO,EAAE,+BAA+B;IACxC,gBAAgB,EAAE,uBAAuB;IACzC,YAAY,EAAE,mBAAmB;IACjC,eAAe,EAAE,0BAA0B;IAC3C,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;IAC5C,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE;QAC9D,MAAM,EAAE,gCAAgC,EAAE,GAAG,MAAM,MAAM,CAAC,0DAA0D,CAAC,CAAC;QACtH,OAAO,CAAC,MAAM,gCAAgC,EAAE,EAAE,mBAAmB,CAAC,YAAY,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;IACtH,CAAC;CACF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAA6B;IACvD,MAAM,GAAG,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACvF,MAAM,GAAG,GAAmB;QAC1B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnE,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAuB,WAAW;IACxE,OAAO,KAAK,UAAU,UAAU,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;QAC9E,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;YACzD,MAAM,OAAO,GAAG,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACnH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,6EAA6E,EAAE,CAAC,CAAC;gBAC/H,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;YAChC,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC;gBAC1E,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;YACtC,MAAM,aAAa,GAAG,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;YAChG,MAAM,eAAe,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YAClF,MAAM,cAAc,GAAG,OAAO,KAAK,yBAAyB,CAAC;YAC7D,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAElF,gEAAgE;YAChE,IAAI,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC;gBACvB,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;gBACzH,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBACnB,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,6HAA6H;qBACrI,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;gBACnH,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,SAAS,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACzJ,OAAO;YACT,CAAC;YAED,+DAA+D;YAC/D,gEAAgE;YAChE,uEAAuE;YACvE,oEAAoE;YACpE,oDAAoD;YACpD,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;oBACvC,OAAO;oBACP,OAAO;oBACP,OAAO;oBACP,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnC,GAAG,CAAC,aAAa,IAAI,eAAe;wBAClC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;wBACrI,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC,CAAC;gBACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,CAAC,IAAI,CAAC,2EAA2E,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC7H,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;oBAChE,OAAO;gBACT,CAAC;gBACD,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC;gBAClC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE;wBACJ,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACzG,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC9G,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC7D,WAAW,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc;wBAC1E,GAAG,EAAE,IAAI,CAAC,MAAM;qBACjB;iBACF,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACzE,MAAM,IAAI,GAAG,aAAa,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAE5G,MAAM,IAAI,GAAG,cAAc,CAAC;gBAC1B,OAAO;gBACP,cAAc;gBACd,OAAO;gBACP,IAAI;gBACJ,SAAS,EAAE,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,EAAE;gBACrE,MAAM;gBACN,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAI;aAC7B,CAAC,CAAC;YACH,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAE5B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,GAAG,CAAC,IAAI,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;oBAClJ,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;oBACzC,OAAO;gBACT,CAAC;gBACD,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;oBAC7D,MAAM,MAAM,GACV,uBAAuB,EAAE,EAAE,YAAY,CAAC,OAAO,EAAE;wBAC/C,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACrE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC/E,CAAC,IAAI,CAAC,CAAC;oBACV,0DAA0D;oBAC1D,oEAAoE;oBACpE,+BAA+B;oBAC/B,IAAI,GAAG;wBAAE,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC9F,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;oBAC9C,OAAO;gBACT,CAAC;gBACD,KAAK,UAAU,CAAC,CAAC,CAAC;oBAChB,GAAG,CAAC,IAAI,GAAG;wBACT,OAAO;wBACP,UAAU,EAAE,cAAc;wBAC1B,UAAU,EAAE,cAAc;wBAC1B,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACvE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACjE,CAAC;oBACF,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;oBACzC,OAAO;gBACT,CAAC;gBACD,KAAK,WAAW,CAAC,CAAC,CAAC;oBACjB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;oBAC1G,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC9G,OAAO;gBACT,CAAC;gBACD,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,6DAA6D;oBAC7D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;oBAC5I,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;4BACnB,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,gDAAgD,IAAI,CAAC,cAAc,4DAA4D;yBACvI,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;oBAClG,OAAO;gBACT,CAAC;gBACD,KAAK,WAAW,CAAC;gBACjB,OAAO,CAAC,CAAC,CAAC;oBACR,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBACnB,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,wBAAwB,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,8CAA8C;qBACjI,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,OAAe,EAAE,IAAoB;IACzD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,4DAA4D,EAAE;YACxE,OAAO;YACP,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,MAAM,CAAC,MAAM,UAAU,GAAG,uBAAuB,EAAE,CAAC"}
@@ -99,6 +99,16 @@ export declare function getMessages(req: Request, res: Response, next: NextFunct
99
99
  * @param res - Response with the message
100
100
  */
101
101
  export declare function getMessage(req: Request, res: Response, next: NextFunction): Promise<void>;
102
+ /**
103
+ * The session an agent's `senderName` stands for: a session name as is, else
104
+ * the member with that display name ("Ella", "Avery") — the one in
105
+ * `conversationId` when several share the name.
106
+ *
107
+ * @param senderName - Session or display name the agent passed
108
+ * @param conversationId - Conversation it named, if any
109
+ * @returns Session name (the input when nothing matches)
110
+ */
111
+ export declare function sessionOfSender(senderName: string, conversationId?: string): Promise<string>;
102
112
  /**
103
113
  * Whether an `agent-response` body is a report-status line for the
104
114
  * orchestrator ([DONE], [WORKING], [IDLE], [STATUS REPORT], …) rather than
@@ -137,6 +147,8 @@ export declare function deliverAgentReplyToConversation(input: {
137
147
  agentSession: string;
138
148
  content: string;
139
149
  interim?: boolean;
150
+ /** Extra metadata on the recorded row (e.g. the harness marking a ticket delivery) */
151
+ metadata?: Record<string, unknown>;
140
152
  }): Promise<string | null>;
141
153
  /**
142
154
  * Order an agent's Slack threads so the one its [DONE] is about comes first.
@@ -1 +1 @@
1
- {"version":3,"file":"chat.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/chat/chat.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EACL,cAAc,EAGf,MAAM,qCAAqC,CAAC;AAwB7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mDAAmD,CAAC;AAoB7F;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAKzE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,OAAO,yDAAyD,EAAE,wBAAwB,GAClG,IAAI,CAEN;AAMD,wEAAwE;AACxE,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,sDAAsD;AACtD,MAAM,WAAW,uBAAuB;IACtC,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,iDAAiD;IACjD,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,uDAAuD;AACvD,MAAM,WAAW,wBAAwB;IACvC,0CAA0C;IAC1C,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC9E,mCAAmC;IACnC,YAAY,EAAE,0BAA0B,CAAC;CAC1C;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,6BAA6B,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAgIrH;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CA8Cf;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAsBf;AA8FD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE5D;AA8HD;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAW5G;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,+BAA+B,CAAC,KAAK,EAAE;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgEzB;AAyCD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EACrF,OAAO,EAAE,CAAC,EAAE,EACZ,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,CAAC,EAAE,CAUL;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CA4Uf;AAMD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAcf;AAMD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAYf;AAMD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,IAAI,CAwBN;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,IAAI,CAmBN;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,IAAI,CA4BN;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAInF"}
1
+ {"version":3,"file":"chat.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/chat/chat.controller.ts"],"names":[],"mappings":"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"}
@@ -355,6 +355,40 @@ async function isMemberNameOf(agentSession, name) {
355
355
  }
356
356
  return false;
357
357
  }
358
+ /**
359
+ * The session an agent's `senderName` stands for: a session name as is, else
360
+ * the member with that display name ("Ella", "Avery") — the one in
361
+ * `conversationId` when several share the name.
362
+ *
363
+ * @param senderName - Session or display name the agent passed
364
+ * @param conversationId - Conversation it named, if any
365
+ * @returns Session name (the input when nothing matches)
366
+ */
367
+ export async function sessionOfSender(senderName, conversationId) {
368
+ const wanted = senderName.trim().toLowerCase();
369
+ if (!wanted)
370
+ return senderName;
371
+ try {
372
+ const { StorageService } = await import('../../services/core/storage.service.js');
373
+ const members = (await StorageService.getInstance().getTeams()).flatMap((t) => t.members ?? []);
374
+ if (members.some((m) => m.sessionName === senderName))
375
+ return senderName;
376
+ const named = members.filter((m) => (m.name ?? '').trim().toLowerCase() === wanted).map((m) => m.sessionName);
377
+ if (named.length === 1)
378
+ return named[0];
379
+ if (named.length > 1 && conversationId) {
380
+ for (const s of named)
381
+ if (await isAgentsOwnConversation(s, conversationId))
382
+ return s;
383
+ }
384
+ if (named.length > 0)
385
+ return named[0];
386
+ }
387
+ catch {
388
+ /* storage unavailable — use the name as given */
389
+ }
390
+ return senderName;
391
+ }
358
392
  /**
359
393
  * Record an agent's reply on its own chat-v2 DM channel when
360
394
  * `conversationId` names one (the channel is bound to this very agent).
@@ -367,7 +401,7 @@ async function isMemberNameOf(agentSession, name) {
367
401
  * @param content - Reply text
368
402
  * @returns The persisted message id, or null when not a chat-v2 channel
369
403
  */
370
- async function recordChatV2AgentReply(channelId, senderName, content, headerSession, interim = false, slackThreadKey) {
404
+ async function recordChatV2AgentReply(channelId, senderName, content, headerSession, interim = false, slackThreadKey, extraMetadata) {
371
405
  try {
372
406
  const { getChatV2Service } = await import('../../services/chat-v2/chat-v2.singleton.js');
373
407
  const chatV2 = getChatV2Service();
@@ -390,6 +424,7 @@ async function recordChatV2AgentReply(channelId, senderName, content, headerSess
390
424
  senderId: channel.agentSession,
391
425
  content,
392
426
  metadata: {
427
+ ...(extraMetadata ?? {}),
393
428
  source: 'reply-tool',
394
429
  ...(interim ? { [SLACK_TYPING_CONSTANTS.INTERIM_METADATA_KEY]: true } : {}),
395
430
  // The Slack thread this answer is for (`reply-chat --thread <key>`):
@@ -517,6 +552,7 @@ async function recordSlackRoomAgentReply(input) {
517
552
  content: input.content,
518
553
  threadId,
519
554
  metadata: {
555
+ ...(input.metadata ?? {}),
520
556
  source: 'reply-tool',
521
557
  ...(input.interim ? { [SLACK_TYPING_CONSTANTS.INTERIM_METADATA_KEY]: true } : {}),
522
558
  },
@@ -586,7 +622,7 @@ export async function isAgentsOwnConversation(agentSession, conversationId) {
586
622
  export async function deliverAgentReplyToConversation(input) {
587
623
  const slackKey = parseSlackThreadKey(input.thread);
588
624
  const formattedKey = slackKey ? formatSlackThreadKey(slackKey.slackChannelId, slackKey.threadTs) : undefined;
589
- const dm = await recordChatV2AgentReply(input.conversationId, input.agentSession, input.content, input.agentSession, input.interim === true, formattedKey);
625
+ const dm = await recordChatV2AgentReply(input.conversationId, input.agentSession, input.content, input.agentSession, input.interim === true, formattedKey, input.metadata);
590
626
  if (dm)
591
627
  return dm;
592
628
  const room = await recordSlackRoomAgentReply({
@@ -596,6 +632,7 @@ export async function deliverAgentReplyToConversation(input) {
596
632
  headerSession: input.agentSession,
597
633
  interim: input.interim === true,
598
634
  rawThread: input.thread,
635
+ ...(input.metadata ? { metadata: input.metadata } : {}),
599
636
  });
600
637
  if (room)
601
638
  return room;
@@ -607,6 +644,12 @@ export async function deliverAgentReplyToConversation(input) {
607
644
  return null;
608
645
  if (!chatV2.queryHuddleMembersForDispatch(input.conversationId).includes(input.agentSession))
609
646
  return null;
647
+ // A Slack-mapped room took no thread above: a row here would be mirrored
648
+ // into whatever Slack thread is latest — not ours to guess
649
+ // (specs/2026-10-02-harness-owned-routing.md §1).
650
+ const { getSlackTeamChannelService } = await import('../../services/slack/slack-team-channel.service.js');
651
+ if (getSlackTeamChannelService()?.findByChatChannelId(input.conversationId))
652
+ return null;
610
653
  let threadId;
611
654
  if (input.thread && !slackKey) {
612
655
  const named = chatV2.getMessageForBridge(input.thread);
@@ -620,6 +663,7 @@ export async function deliverAgentReplyToConversation(input) {
620
663
  content: input.content,
621
664
  ...(threadId ? { threadId } : {}),
622
665
  metadata: {
666
+ ...(input.metadata ?? {}),
623
667
  source: 'reply-tool',
624
668
  ...(input.interim ? { [SLACK_TYPING_CONSTANTS.INTERIM_METADATA_KEY]: true } : {}),
625
669
  },
@@ -810,6 +854,60 @@ export async function agentResponse(req, res, next) {
810
854
  conversationIdWasExplicit = true;
811
855
  }
812
856
  }
857
+ // An agent's message to a person (anything that is not a status line)
858
+ // goes where the harness resolves it — never to the globally current
859
+ // conversation, never filed as status while answering success
860
+ // (specs/2026-10-02-harness-owned-routing.md §1–3; TKT-187: Owen's
861
+ // `reply-chat --thread <#pro-ce key>` landed in an unrelated huddle and
862
+ // was swallowed as status).
863
+ // Only when the caller says it is a message for a person
864
+ // (`intent: "message"` — reply-chat, send-chat-response): status
865
+ // payloads ([MILESTONE], [HANDOFF], `---\n[VERIFICATION REQUEST]`, …)
866
+ // without the flag keep the status path, exactly as before.
867
+ const agentSenderGuess = (senderType || 'agent') === 'agent';
868
+ const isMessageForPerson = req.body?.intent === 'message';
869
+ if (isMessageForPerson && agentSenderGuess && !isOrchestratorPost && !isOrcName(String(senderName)) && !isAgentStatusMarker(String(content))) {
870
+ const replier = agentHeader && !headerContradictsSender
871
+ ? agentHeader
872
+ : await sessionOfSender(String(senderName), typeof conversationId === 'string' ? conversationId : undefined);
873
+ const { deliverReply } = await import('../../services/orc/reply-destination.wiring.js');
874
+ const { referenceOf } = await import('./agent-reply.controller.js');
875
+ const reference = referenceOf((req.body ?? {}));
876
+ const delivery = await deliverReply({
877
+ session: replier,
878
+ content: String(content),
879
+ interim: req.body?.interim === true,
880
+ ...(reference ? { reference } : {}),
881
+ ...(conversationId || req.body?.slackThread
882
+ ? {
883
+ hints: {
884
+ ...(typeof conversationId === 'string' && conversationId ? { conversationId } : {}),
885
+ ...(typeof req.body?.slackThread === 'string' && req.body.slackThread ? { thread: req.body.slackThread } : {}),
886
+ },
887
+ }
888
+ : {}),
889
+ });
890
+ if (!delivery.ok) {
891
+ logger.warn('Agent message to a person could not be delivered — told the agent (not filed as status)', {
892
+ senderName,
893
+ replier,
894
+ error: delivery.error,
895
+ preview: String(content).substring(0, 120),
896
+ });
897
+ res.status(409).json({ success: false, error: delivery.error });
898
+ return;
899
+ }
900
+ res.status(201).json({
901
+ success: true,
902
+ data: {
903
+ ...(delivery.messageId ? { messageId: delivery.messageId, conversationId: delivery.conversationId } : {}),
904
+ ...(delivery.slackChannelId ? { slackChannelId: delivery.slackChannelId, messageTs: delivery.messageTs } : {}),
905
+ ...(delivery.threadTs ? { threadTs: delivery.threadTs } : {}),
906
+ via: delivery.destination.source,
907
+ },
908
+ });
909
+ return;
910
+ }
813
911
  if (!resolvedConversationId) {
814
912
  const current = await chatService.getCurrentConversation();
815
913
  if (current) {
@@ -973,31 +1071,57 @@ export async function agentResponse(req, res, next) {
973
1071
  orcText: clipForOrchestrator(content, resolvedConversationId),
974
1072
  });
975
1073
  }
976
- // 2. Send Slack notification for task completions
1074
+ // 2. Send Slack notification for task completions — only into a
1075
+ // thread the Slack thread store lists for this agent (as before),
1076
+ // and the one the reply resolver picks among those (its work item,
1077
+ // the thread it names, its prompt, its turn origin) — no longer the
1078
+ // agent's first-ever thread. No listed thread matches → no notice
1079
+ // (specs/2026-10-02-harness-owned-routing.md §6).
977
1080
  if (content.startsWith('[DONE]')) {
1081
+ const reporter = agentHeader && !headerContradictsSender ? agentHeader : String(senderName);
978
1082
  const { getSlackThreadStore } = await import('../../services/slack/slack-thread-store.service.js');
1083
+ const store = getSlackThreadStore();
1084
+ const listed = store
1085
+ ? [...store.findThreadsForAgent(reporter), ...(reporter !== senderName ? store.findThreadsForAgent(String(senderName)) : [])]
1086
+ : [];
1087
+ let target;
1088
+ if (listed.length > 0) {
1089
+ const namedKey = slackThreadKey ?? (() => {
1090
+ const k = extractSlackThreadKeys(String(content))[0];
1091
+ return k ? formatSlackThreadKey(k.slackChannelId, k.threadTs) : undefined;
1092
+ })();
1093
+ const { resolveSlackPlace } = await import('../../services/orc/reply-destination.wiring.js');
1094
+ const place = await resolveSlackPlace({
1095
+ session: reporter,
1096
+ ...(typeof req.body?.workItemId === 'string' && req.body.workItemId ? { reference: { workItemId: req.body.workItemId } } : {}),
1097
+ ...(namedKey ? { hints: { thread: namedKey } } : {}),
1098
+ noOwnerDm: true,
1099
+ }).catch(() => null);
1100
+ target = place?.threadTs
1101
+ ? listed.find((t) => t.channelId === place.slackChannelId && t.threadTs === place.threadTs)
1102
+ : undefined;
1103
+ }
979
1104
  const { getSlackOrchestratorBridge } = await import('../../services/slack/slack-orchestrator-bridge.js');
980
- const threadStore = getSlackThreadStore();
981
- const threads = pickCompletionThreads(threadStore ? threadStore.findThreadsForAgent(senderName) : [], content, slackThreadKey);
982
- if (threads.length > 0) {
983
- const bridge = getSlackOrchestratorBridge();
984
- if (bridge) {
985
- const summaryText = content.replace(/^\[DONE\]\s*Agent\s+\S+:\s*/, '');
986
- await bridge.sendNotification({
987
- type: 'task_completed',
988
- title: 'Agent Completed',
989
- message: `Agent ${senderName} completed: ${summaryText}`,
990
- urgency: 'normal',
991
- timestamp: new Date().toISOString(),
992
- channelId: threads[0].channelId,
993
- threadTs: threads[0].threadTs,
994
- });
995
- // If a pending reaction was stored when the message arrived
996
- // (orchestrator-routed path sets a 👀 on the trigger message),
997
- // flip it to ✅ now that the agent reply has been delivered.
998
- // No-op when there's no pending entry for this thread.
999
- await bridge.addCompletionReaction(threads[0].channelId, threads[0].threadTs);
1000
- }
1105
+ const bridge = getSlackOrchestratorBridge();
1106
+ if (bridge && target) {
1107
+ const summaryText = content.replace(/^\[DONE\]\s*Agent\s+\S+:\s*/, '');
1108
+ await bridge.sendNotification({
1109
+ type: 'task_completed',
1110
+ title: 'Agent Completed',
1111
+ message: `Agent ${senderName} completed: ${summaryText}`,
1112
+ urgency: 'normal',
1113
+ timestamp: new Date().toISOString(),
1114
+ channelId: target.channelId,
1115
+ threadTs: target.threadTs,
1116
+ });
1117
+ // If a pending reaction was stored when the message arrived
1118
+ // (orchestrator-routed path sets a 👀 on the trigger message),
1119
+ // flip it to ✅ now that the agent reply has been delivered.
1120
+ // No-op when there's no pending entry for this thread.
1121
+ await bridge.addCompletionReaction(target.channelId, target.threadTs);
1122
+ }
1123
+ else if (!target) {
1124
+ logger.info('[DONE] notice not posted — no thread of this agent that the report belongs to', { senderName, listed: listed.length });
1001
1125
  }
1002
1126
  }
1003
1127
  }