crewly 1.20.154 → 1.20.156
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.
- package/config/skills/agent/core/attach-file/SKILL.md +1 -1
- package/config/skills/agent/core/attach-file/execute.sh +1 -1
- package/config/skills/agent/core/reply-channel/SKILL.md +4 -1
- package/config/skills/agent/core/reply-chat/SKILL.md +17 -0
- package/config/skills/agent/core/reply-chat/execute.sh +6 -1
- package/config/skills/agent/core/slack-post/SKILL.md +1 -1
- package/config/skills/team-leader/delegate-task/execute.sh +17 -4
- package/dist/backend/backend/src/constants.d.ts +138 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +149 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts +18 -0
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.js +42 -6
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts +32 -0
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +122 -8
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +6 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +20 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +16 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +54 -4
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts +153 -1
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js +371 -22
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts +13 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +16 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +30 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +46 -3
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +17 -4
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-bus.service.js +6 -0
- package/dist/backend/backend/src/services/event-bus/event-bus.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts +93 -6
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +169 -15
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts +2 -2
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.js +15 -2
- package/dist/backend/backend/src/services/slack/slack-agent-post.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js +7 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +40 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +86 -9
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +33 -4
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts +227 -0
- package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-thread-context.service.js +455 -0
- package/dist/backend/backend/src/services/slack/slack-thread-context.service.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-thread-key.d.ts +66 -0
- package/dist/backend/backend/src/services/slack/slack-thread-key.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-thread-key.js +109 -0
- package/dist/backend/backend/src/services/slack/slack-thread-key.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts +89 -13
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js +224 -50
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js +2 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +47 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +118 -3
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.d.ts +5 -0
- package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
- package/dist/backend/backend/src/types/slack.types.d.ts +43 -0
- package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/slack.types.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +138 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +149 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +16 -0
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +54 -4
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts +409 -0
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js +961 -0
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts +13 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +16 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +30 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +46 -3
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +17 -4
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/cli/backend/src/services/event-bus/event-bus.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/event-bus/event-bus.service.js +6 -0
- package/dist/cli/backend/src/services/event-bus/event-bus.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts +93 -6
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +169 -15
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +40 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +86 -9
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +33 -4
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts +227 -0
- package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-thread-context.service.js +455 -0
- package/dist/cli/backend/src/services/slack/slack-thread-context.service.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-thread-key.d.ts +66 -0
- package/dist/cli/backend/src/services/slack/slack-thread-key.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-thread-key.js +109 -0
- package/dist/cli/backend/src/services/slack/slack-thread-key.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts +89 -13
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js +224 -50
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js +2 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/types/event-bus.types.d.ts +5 -0
- package/dist/cli/backend/src/types/event-bus.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/event-bus.types.js.map +1 -1
- package/dist/cli/backend/src/types/slack.types.d.ts +43 -0
- package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/slack.types.js.map +1 -1
- package/package.json +1 -1
|
@@ -13,12 +13,14 @@
|
|
|
13
13
|
* @module services/slack/slack-agent-dm.service
|
|
14
14
|
*/
|
|
15
15
|
import * as path from 'path';
|
|
16
|
+
import { renderSlackThreadContext } from './slack-thread-context.service.js';
|
|
16
17
|
import { getCrewlyHomePath } from '../core/crewly-home.utils.js';
|
|
17
18
|
import { atomicWriteJson, safeReadJson } from '../../utils/file-io.utils.js';
|
|
18
19
|
import { LoggerService } from '../core/logger.service.js';
|
|
19
|
-
import { SLACK_AGENT_DM_CONSTANTS } from '../../constants.js';
|
|
20
|
+
import { SLACK_AGENT_DM_CONSTANTS, SLACK_THREAD_KEY_CONSTANTS, SLACK_TYPING_CONSTANTS } from '../../constants.js';
|
|
20
21
|
import { isInterim } from './slack-typing-placeholder.service.js';
|
|
21
22
|
import { toSlackMrkdwn } from './slack-mrkdwn.js';
|
|
23
|
+
import { parseSlackThreadKey, slackThreadOfMetadata } from './slack-thread-key.js';
|
|
22
24
|
import { getTicketIntakeService } from '../v3/ticket-intake.service.js';
|
|
23
25
|
import { intakeWithin, slackIntakeMessage, ticketOfOutcome, markAndLinkTicket } from '../v3/ticket-channel-hooks.js';
|
|
24
26
|
/**
|
|
@@ -125,11 +127,13 @@ export class SlackAgentDmService {
|
|
|
125
127
|
* it, asked for a PDF, the agent uploads to Drive and sends a link — which
|
|
126
128
|
* it will then correctly explain is all its reply interface can carry.
|
|
127
129
|
*
|
|
128
|
-
* The file goes out under the agent's own bot, into the thread
|
|
129
|
-
*
|
|
130
|
-
*
|
|
130
|
+
* The file goes out under the agent's own bot, into the thread it belongs
|
|
131
|
+
* to: the one the agent names (`threadId` — a Slack thread key or the
|
|
132
|
+
* chat-v2 message it answers), else the answer it just posted, else the
|
|
133
|
+
* oldest thread still owed an answer. It used to go wherever the owner
|
|
134
|
+
* wrote last, which put the EFT form into the HSA thread (2026-09-28).
|
|
131
135
|
*
|
|
132
|
-
* @param input - Chat channel the agent was given, plus the file
|
|
136
|
+
* @param input - Chat channel the agent was given, plus the file and optional thread
|
|
133
137
|
* @returns What was uploaded, or why it could not be
|
|
134
138
|
*/
|
|
135
139
|
async attachFileForAgent(input) {
|
|
@@ -139,6 +143,8 @@ export class SlackAgentDmService {
|
|
|
139
143
|
const installed = this.deps.identities.getInstalled(link.agentSession);
|
|
140
144
|
if (!installed)
|
|
141
145
|
return { ok: false, reason: 'agent_has_no_slack_bot' };
|
|
146
|
+
const target = this.resolveReplyTarget(link, { threadRef: input.threadId, forAttachment: true });
|
|
147
|
+
const threadTs = target.threadTs;
|
|
142
148
|
try {
|
|
143
149
|
const result = await this.deps.slack.uploadFile({
|
|
144
150
|
channelId: link.slackChannelId,
|
|
@@ -146,18 +152,27 @@ export class SlackAgentDmService {
|
|
|
146
152
|
...(input.filename ? { filename: input.filename } : {}),
|
|
147
153
|
...(input.title ? { title: input.title } : {}),
|
|
148
154
|
...(input.comment ? { initialComment: input.comment } : {}),
|
|
149
|
-
...(
|
|
155
|
+
...(threadTs ? { threadTs } : {}),
|
|
150
156
|
botToken: installed.botToken,
|
|
151
157
|
});
|
|
158
|
+
// The file is the agent answering in that thread: no "working on it"
|
|
159
|
+
// may be left there (2026-09-28).
|
|
160
|
+
await this.deps.typing?.dropThread?.({
|
|
161
|
+
agentSession: link.agentSession,
|
|
162
|
+
slackChannelId: link.slackChannelId,
|
|
163
|
+
...(threadTs ? { threadTs } : {}),
|
|
164
|
+
}).catch(() => 0);
|
|
152
165
|
this.logger.info('Agent attached a file to its Slack DM', {
|
|
153
166
|
agentSession: link.agentSession,
|
|
154
167
|
slackChannelId: link.slackChannelId,
|
|
155
|
-
threaded: Boolean(
|
|
168
|
+
threaded: Boolean(threadTs),
|
|
169
|
+
threadTs,
|
|
170
|
+
via: target.via,
|
|
156
171
|
});
|
|
157
172
|
return {
|
|
158
173
|
ok: true,
|
|
159
174
|
slackChannelId: link.slackChannelId,
|
|
160
|
-
...(
|
|
175
|
+
...(threadTs ? { threadTs } : {}),
|
|
161
176
|
...(result.fileId ? { fileId: result.fileId } : {}),
|
|
162
177
|
asAgentBot: true,
|
|
163
178
|
};
|
|
@@ -193,13 +208,24 @@ export class SlackAgentDmService {
|
|
|
193
208
|
name: member?.name ?? agentSession,
|
|
194
209
|
principal: { userId: SLACK_AGENT_DM_CONSTANTS.OWNER_USER_ID, source: 'oss' },
|
|
195
210
|
});
|
|
211
|
+
const previous = this.store.links[channel.id];
|
|
212
|
+
const inboundThreadTs = message.threadTs || message.ts;
|
|
213
|
+
// Another Slack DM (the owner re-opened the conversation): the old
|
|
214
|
+
// conversation's threads cannot be posted into from here.
|
|
215
|
+
const sameConversation = previous?.slackChannelId === message.channelId;
|
|
196
216
|
const link = {
|
|
197
217
|
chatChannelId: channel.id,
|
|
198
218
|
agentSession,
|
|
199
219
|
slackChannelId: message.channelId,
|
|
200
220
|
// `ts` when the question was top-level: the answer opens a thread under
|
|
201
221
|
// it instead of landing beside it.
|
|
202
|
-
...(
|
|
222
|
+
...(inboundThreadTs ? { replyThreadTs: inboundThreadTs } : {}),
|
|
223
|
+
...(inboundThreadTs
|
|
224
|
+
? { openThreads: withOpenThread(sameConversation ? previous?.openThreads : undefined, inboundThreadTs, this.now()) }
|
|
225
|
+
: sameConversation && previous?.openThreads
|
|
226
|
+
? { openThreads: previous.openThreads }
|
|
227
|
+
: {}),
|
|
228
|
+
...(sameConversation && previous?.lastReply ? { lastReply: previous.lastReply } : {}),
|
|
203
229
|
updatedAt: this.now().toISOString(),
|
|
204
230
|
};
|
|
205
231
|
this.store.links[channel.id] = link;
|
|
@@ -259,7 +285,13 @@ export class SlackAgentDmService {
|
|
|
259
285
|
const dispatcher = this.deps.getDispatcher();
|
|
260
286
|
let dispatch = null;
|
|
261
287
|
if (dispatcher) {
|
|
262
|
-
|
|
288
|
+
// A threaded DM: the thread as Slack has it (top-level DMs get none).
|
|
289
|
+
const slackContext = await message.threadContext;
|
|
290
|
+
dispatch = await dispatcher.dispatchMessage(channel, markAndLinkTicket(persisted, ticket), slackContext
|
|
291
|
+
? {
|
|
292
|
+
slackContextFor: () => renderSlackThreadContext(slackContext, { botUserId: installed?.botUserId, name: member?.name ?? agentSession }),
|
|
293
|
+
}
|
|
294
|
+
: undefined);
|
|
263
295
|
}
|
|
264
296
|
else {
|
|
265
297
|
this.logger.warn('No chat dispatcher wired — DM persisted but not delivered', { agentSession });
|
|
@@ -374,7 +406,9 @@ export class SlackAgentDmService {
|
|
|
374
406
|
this.logger.warn('Agent has no installed Slack bot — DM reply not mirrored', { agentSession: link.agentSession });
|
|
375
407
|
return false;
|
|
376
408
|
}
|
|
377
|
-
|
|
409
|
+
// The thread this answer is FOR — not simply where the owner wrote last.
|
|
410
|
+
const target = this.resolveReplyTarget(link, { dto });
|
|
411
|
+
const key = { agentSession: link.agentSession, slackChannelId: link.slackChannelId, ...(target.threadTs ? { threadTs: target.threadTs } : {}) };
|
|
378
412
|
const text = toSlackMrkdwn(dto.content);
|
|
379
413
|
// An agent that both posts its answer with a tool and returns the same
|
|
380
414
|
// answer as its turn text produces two chat turns, and both are agent
|
|
@@ -399,18 +433,29 @@ export class SlackAgentDmService {
|
|
|
399
433
|
return false;
|
|
400
434
|
}
|
|
401
435
|
this.rememberSent(link.slackChannelId, text, source);
|
|
436
|
+
this.noteAnswered(link, target.threadTs, isInterim(dto));
|
|
437
|
+
if (target.via !== 'latest' || (link.openThreads?.length ?? 0) > 0) {
|
|
438
|
+
this.logger.info('DM reply routed to its thread', {
|
|
439
|
+
agentSession: link.agentSession,
|
|
440
|
+
slackChannelId: link.slackChannelId,
|
|
441
|
+
threadTs: target.threadTs,
|
|
442
|
+
via: target.via,
|
|
443
|
+
});
|
|
444
|
+
}
|
|
402
445
|
if (this.deps.typing) {
|
|
403
446
|
const identity = { botToken: installed.botToken, displayName: link.agentSession };
|
|
404
|
-
|
|
405
|
-
//
|
|
447
|
+
// Interim note → still working: the placeholder goes back under it,
|
|
448
|
+
// in the same step (see SlackTypingPlaceholderService.resolve).
|
|
406
449
|
if (isInterim(dto))
|
|
407
|
-
await this.deps.typing.
|
|
450
|
+
await this.deps.typing.resolve(key, text, identity, { reopen: 'typing' });
|
|
451
|
+
else
|
|
452
|
+
await this.deps.typing.resolve(key, text, identity);
|
|
408
453
|
return true;
|
|
409
454
|
}
|
|
410
455
|
await this.deps.slack.sendMessage({
|
|
411
456
|
channelId: link.slackChannelId,
|
|
412
457
|
text,
|
|
413
|
-
...(
|
|
458
|
+
...(target.threadTs ? { threadTs: target.threadTs } : {}),
|
|
414
459
|
botToken: installed.botToken,
|
|
415
460
|
skipChatV2Mirror: true,
|
|
416
461
|
});
|
|
@@ -426,6 +471,100 @@ export class SlackAgentDmService {
|
|
|
426
471
|
}
|
|
427
472
|
}
|
|
428
473
|
// -------------------------------------------------------------------------
|
|
474
|
+
// Thread routing
|
|
475
|
+
// -------------------------------------------------------------------------
|
|
476
|
+
/**
|
|
477
|
+
* Which thread of the DM an outbound post belongs in.
|
|
478
|
+
*
|
|
479
|
+
* In order: the Slack thread key the agent named (`--thread <key>`, or the
|
|
480
|
+
* key recorded on its reply); the Slack thread of the chat-v2 message it
|
|
481
|
+
* replied under (`--thread <message id>` — ticket nudges use this); for a
|
|
482
|
+
* file, the answer posted moments ago; the OLDEST thread still owed an
|
|
483
|
+
* answer; and only when nothing is owed, the thread the owner wrote in
|
|
484
|
+
* last. A key naming another conversation is ignored rather than trusted.
|
|
485
|
+
*
|
|
486
|
+
* @param link - The DM link
|
|
487
|
+
* @param opts - The reply being mirrored, or an explicit thread reference
|
|
488
|
+
* @returns Target thread and how it was chosen
|
|
489
|
+
*/
|
|
490
|
+
resolveReplyTarget(link, opts) {
|
|
491
|
+
const inThisDm = (parts) => parts && parts.slackChannelId === link.slackChannelId ? parts.threadTs : undefined;
|
|
492
|
+
const fromKey = inThisDm(parseSlackThreadKey(opts.threadRef)) ??
|
|
493
|
+
inThisDm(parseSlackThreadKey(opts.dto?.threadId)) ??
|
|
494
|
+
inThisDm(parseSlackThreadKey(opts.dto?.metadata?.[SLACK_THREAD_KEY_CONSTANTS.METADATA_KEY]));
|
|
495
|
+
if (fromKey)
|
|
496
|
+
return { threadTs: fromKey, via: 'key' };
|
|
497
|
+
const rootId = opts.threadRef && !parseSlackThreadKey(opts.threadRef) ? opts.threadRef : opts.dto?.threadId;
|
|
498
|
+
if (rootId && this.deps.chat.getMessageForBridge) {
|
|
499
|
+
try {
|
|
500
|
+
const root = this.deps.chat.getMessageForBridge(rootId);
|
|
501
|
+
const ts = inThisDm(slackThreadOfMetadata(root?.metadata));
|
|
502
|
+
if (ts)
|
|
503
|
+
return { threadTs: ts, via: 'thread-root' };
|
|
504
|
+
}
|
|
505
|
+
catch {
|
|
506
|
+
/* unknown message — fall through to the heuristics */
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
if (opts.forAttachment && link.lastReply) {
|
|
510
|
+
const age = this.now().getTime() - Date.parse(link.lastReply.at);
|
|
511
|
+
if (Number.isFinite(age) && age >= 0 && age <= SLACK_AGENT_DM_CONSTANTS.ATTACH_FOLLOWS_REPLY_MS) {
|
|
512
|
+
return { threadTs: link.lastReply.threadTs, via: 'recent-reply' };
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
const oldest = link.openThreads?.[0];
|
|
516
|
+
if (oldest)
|
|
517
|
+
return { threadTs: oldest.threadTs, via: 'oldest-open' };
|
|
518
|
+
return { ...(link.replyThreadTs ? { threadTs: link.replyThreadTs } : {}), via: 'latest' };
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* An answer went into a thread: it no longer owes one (an interim note
|
|
522
|
+
* does not count), and a file sent right after follows it there.
|
|
523
|
+
*
|
|
524
|
+
* @param link - The DM link (updated in place and persisted)
|
|
525
|
+
* @param threadTs - Where the answer went
|
|
526
|
+
* @param interim - Whether it was only an interim note
|
|
527
|
+
*/
|
|
528
|
+
noteAnswered(link, threadTs, interim) {
|
|
529
|
+
if (!threadTs)
|
|
530
|
+
return;
|
|
531
|
+
// In memory first and synchronously: a second answer mirrored right
|
|
532
|
+
// behind this one must already see this thread as answered.
|
|
533
|
+
link.lastReply = { threadTs, at: this.now().toISOString() };
|
|
534
|
+
if (!interim && link.openThreads?.some((t) => t.threadTs === threadTs)) {
|
|
535
|
+
link.openThreads = link.openThreads.filter((t) => t.threadTs !== threadTs);
|
|
536
|
+
}
|
|
537
|
+
void this.persist();
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* The agent finished a turn: threads it left unanswered for longer than
|
|
541
|
+
* SETTLE_MIN_AGE_MS are ones it chose not to answer ("ok", "谢谢") — the
|
|
542
|
+
* same rule that takes their "working on it" placeholder down. They stop
|
|
543
|
+
* counting as owed, so a later unattributed answer is not pulled back
|
|
544
|
+
* into them.
|
|
545
|
+
*
|
|
546
|
+
* @param agentSession - Agent whose turn ended
|
|
547
|
+
* @returns How many threads were settled
|
|
548
|
+
*/
|
|
549
|
+
async settleOpenThreads(agentSession) {
|
|
550
|
+
await this.load();
|
|
551
|
+
const cutoff = this.now().getTime() - SLACK_TYPING_CONSTANTS.SETTLE_MIN_AGE_MS;
|
|
552
|
+
let settled = 0;
|
|
553
|
+
for (const link of Object.values(this.store.links)) {
|
|
554
|
+
if (link.agentSession !== agentSession || !link.openThreads?.length)
|
|
555
|
+
continue;
|
|
556
|
+
const keep = link.openThreads.filter((t) => {
|
|
557
|
+
const at = Date.parse(t.at);
|
|
558
|
+
return Number.isFinite(at) && at > cutoff;
|
|
559
|
+
});
|
|
560
|
+
settled += link.openThreads.length - keep.length;
|
|
561
|
+
link.openThreads = keep;
|
|
562
|
+
}
|
|
563
|
+
if (settled > 0)
|
|
564
|
+
await this.persist();
|
|
565
|
+
return settled;
|
|
566
|
+
}
|
|
567
|
+
// -------------------------------------------------------------------------
|
|
429
568
|
// Internals
|
|
430
569
|
// -------------------------------------------------------------------------
|
|
431
570
|
/**
|
|
@@ -490,6 +629,21 @@ export class SlackAgentDmService {
|
|
|
490
629
|
return this.deps.now ? this.deps.now() : new Date();
|
|
491
630
|
}
|
|
492
631
|
}
|
|
632
|
+
/**
|
|
633
|
+
* Add a thread to the owed list, keeping its original place when it is
|
|
634
|
+
* already there (a follow-up in an owed thread does not make it newer).
|
|
635
|
+
*
|
|
636
|
+
* @param open - Current list, oldest first
|
|
637
|
+
* @param threadTs - Thread that now owes an answer
|
|
638
|
+
* @param now - Current time
|
|
639
|
+
* @returns The new list, capped at MAX_OPEN_THREADS (oldest dropped)
|
|
640
|
+
*/
|
|
641
|
+
export function withOpenThread(open, threadTs, now) {
|
|
642
|
+
const list = [...(open ?? [])];
|
|
643
|
+
if (!list.some((t) => t.threadTs === threadTs))
|
|
644
|
+
list.push({ threadTs, at: now.toISOString() });
|
|
645
|
+
return list.slice(-SLACK_AGENT_DM_CONSTANTS.MAX_OPEN_THREADS);
|
|
646
|
+
}
|
|
493
647
|
// ---------------------------------------------------------------------------
|
|
494
648
|
// Singleton
|
|
495
649
|
// ---------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack-agent-dm.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-agent-dm.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slack-agent-dm.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-agent-dm.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,6 +64,16 @@ export declare function deriveSlackThreadName(content: string | undefined): stri
|
|
|
64
64
|
* mentionedBotUserIds('<@U01> hi <@U02>') // ['U01', 'U02']
|
|
65
65
|
*/
|
|
66
66
|
export declare function mentionedBotUserIds(text: string | undefined): string[];
|
|
67
|
+
/**
|
|
68
|
+
* Put the Slack context block in front of the text an agent is handed.
|
|
69
|
+
* Only the delivered copy carries it; the persisted chat row does not, so
|
|
70
|
+
* the fetched messages are never recorded locally.
|
|
71
|
+
*
|
|
72
|
+
* @param text - The message text
|
|
73
|
+
* @param block - Rendered Slack context, or empty
|
|
74
|
+
* @returns The text to deliver
|
|
75
|
+
*/
|
|
76
|
+
export declare function withContextBlock(text: string, block: string | undefined): string;
|
|
67
77
|
export declare class SlackOrchestratorBridge extends EventEmitter {
|
|
68
78
|
private logger;
|
|
69
79
|
private slackService;
|
|
@@ -273,6 +283,36 @@ export declare class SlackOrchestratorBridge extends EventEmitter {
|
|
|
273
283
|
* @returns Acknowledgement message to the user
|
|
274
284
|
*/
|
|
275
285
|
private sendToAuditorFallback;
|
|
286
|
+
/**
|
|
287
|
+
* Read the Slack thread (or, for a top-level @-mention, the channel)
|
|
288
|
+
* before this message and attach the pending read as `message.threadContext`.
|
|
289
|
+
*
|
|
290
|
+
* Cloud drops events written by the account's own bots, so a post by an
|
|
291
|
+
* agent on another machine never reaches this one; without this, "look at
|
|
292
|
+
* the items above" pointed at something the agent had never seen
|
|
293
|
+
* (2026-09-28, #daily-info). Never throws; the promise never rejects.
|
|
294
|
+
*
|
|
295
|
+
* @param message - The inbound message (mutated: `threadContext`)
|
|
296
|
+
*/
|
|
297
|
+
private loadThreadContext;
|
|
298
|
+
/**
|
|
299
|
+
* Tokens that can read this message's conversation, best first: the app
|
|
300
|
+
* that delivered this copy (in the channel by definition), then the same
|
|
301
|
+
* order file downloads use (DM bot, @-mentioned bots, room agents, the
|
|
302
|
+
* workspace bot).
|
|
303
|
+
*
|
|
304
|
+
* @param message - The inbound message
|
|
305
|
+
* @returns Distinct tokens
|
|
306
|
+
*/
|
|
307
|
+
private contextTokenCandidates;
|
|
308
|
+
/**
|
|
309
|
+
* The Slack context block as the orchestrator should see it (its own
|
|
310
|
+
* lines marked: its per-machine app when installed, else the workspace bot).
|
|
311
|
+
*
|
|
312
|
+
* @param message - The inbound message
|
|
313
|
+
* @returns The rendered block, or ''
|
|
314
|
+
*/
|
|
315
|
+
private orchestratorContextBlock;
|
|
276
316
|
/**
|
|
277
317
|
* The token that can actually read this message's files.
|
|
278
318
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack-orchestrator-bridge.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-orchestrator-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAkBtC,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,EAOxB,kBAAkB,EAEnB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"slack-orchestrator-bridge.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-orchestrator-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAkBtC,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,EAOxB,kBAAkB,EAEnB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAQ/E,OAAO,EAEL,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,gCAAgC,CAAC;AAQxC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AAI5F;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,+BAA+B;IAC/B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gDAAgD;IAChD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qCAAqC;IACrC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,6BAA6B;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IACvE,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAsDD,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,CAAC;AAOpD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKzE;AAED;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAQtE;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAEhF;AAED,qBAAa,uBAAwB,SAAQ,YAAY;IACvD,OAAO,CAAC,MAAM,CAAoE;IAClF,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,mBAAmB,CAAoC;IAC/D,OAAO,CAAC,iBAAiB,CAAyC;IAClE,OAAO,CAAC,WAAW,CAAwC;IAC3D,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,WAAW,CAAS;IAC5B,8DAA8D;IAC9D,OAAO,CAAC,kBAAkB,CAAS;IACnC;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB,CAA6D;IAEvF;;;;OAIG;IACH,OAAO,CAAC,gBAAgB,CAA6B;IAErD;;;;OAIG;IAEH;;;;OAIG;gBACS,MAAM,GAAE,OAAO,CAAC,iBAAiB,CAAM;IAOnD;;;;;;OAMG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBjC;;;;OAIG;IACH,aAAa,IAAI,OAAO;IAIxB;;;;OAIG;IACH,qBAAqB,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,GAAG,IAAI,GAAG,IAAI;IAI7F;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;;;;OAKG;IACH,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAI1D;;;;;OAKG;IACH,oBAAoB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI;IAI7D;;;;;OAKG;IACH,mBAAmB,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI;IAIzD;;;;OAIG;IACH,SAAS,IAAI,iBAAiB;IAI9B;;;;;;OAMG;YACW,kBAAkB;IA8ThC;;;;;OAKG;YACW,yBAAyB;IA0CvC;;;;;;;OAOG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB;IAW9C;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAwBzB;;;;OAIG;IACH,cAAc,IAAI,MAAM;IAuBxB;;;;;;OAMG;YACW,mBAAmB;IAUjC;;;;;;OAMG;YACW,iBAAiB;IAgB/B;;;;;;OAMG;YACW,oBAAoB;IAUlC;;;;;;;;;;;;;;;;;;;;;OAqBG;YACW,mBAAmB;IAsBjC;;;;;;;;;;;OAWG;YACW,kBAAkB;IAkRhC;;;;;;;;;;;;;;;;;;;;;OAqBG;YACW,qBAAqB;IA6EnC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;;;;;;;OAQG;IACH,OAAO,CAAC,sBAAsB;IAO9B;;;;;;OAMG;YACW,wBAAwB;IAStC;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,OAAO,CAAC,mBAAmB;IA0B3B;;;;;;;OAOG;YACW,gBAAgB;IAgB9B;;;;;;;;OAQG;YACW,eAAe;IAsB7B;;;;;;;OAOG;YACW,qBAAqB;IA6DnC;;;;;;;;OAQG;YACW,oBAAoB;IAoIlC;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IA+C3B;;;;;;;OAOG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAsBrF;;;;OAIG;YACW,kBAAkB;IAkBhC;;;;OAIG;YACW,YAAY;IAa1B;;;;;;OAMG;IACU,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBtF;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;YACW,iBAAiB;IAmC/B;;;;;OAKG;YACW,iBAAiB;IAW/B;;;;;;;OAOG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAWpC;;OAEG;YACW,iBAAiB;IAkB/B;;;;OAIG;IACG,gBAAgB,CAAC,YAAY,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE;;;;;;;;;;;OAWG;IACG,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAuF5G;;;;;;OAMG;IACG,mBAAmB,CACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAWhB;;;;;;OAMG;IACG,mBAAmB,CACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAWhB;;;;;;OAMG;IACG,WAAW,CACf,YAAY,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IAWhB;;;;OAIG;IACG,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxD;;;;;;;;OAQG;YACW,oBAAoB;IA8ClC;;;;;;;;;;;OAWG;YACW,WAAW;IAkGzB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,mBAAmB;CAmD5B;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,uBAAuB,CAKpE;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,wBAAwB,GAAG,SAAS,GAC5C;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAQpE"}
|
|
@@ -27,6 +27,7 @@ import { CROSS_MACHINE_PREFIX } from '../../types/cross-machine.types.js';
|
|
|
27
27
|
import { getCrossMachineMessageService } from './cross-machine-message.service.js';
|
|
28
28
|
import { getSlackTeamChannelService } from './slack-team-channel.service.js';
|
|
29
29
|
import { getSlackAgentDmService } from './slack-agent-dm.service.js';
|
|
30
|
+
import { contextKindFor, getSlackThreadContextService, renderSlackThreadContext } from './slack-thread-context.service.js';
|
|
30
31
|
import { getTicketIntakeService, suppressTrivialOrShort, suppressFileOnly, } from '../v3/ticket-intake.service.js';
|
|
31
32
|
import { appendTicketLine, intakeWithin, slackIntakeMessage, ticketOfOutcome, } from '../v3/ticket-channel-hooks.js';
|
|
32
33
|
import { toSlackMrkdwn } from './slack-mrkdwn.js';
|
|
@@ -109,6 +110,18 @@ export function mentionedBotUserIds(text) {
|
|
|
109
110
|
}
|
|
110
111
|
return out;
|
|
111
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* Put the Slack context block in front of the text an agent is handed.
|
|
115
|
+
* Only the delivered copy carries it; the persisted chat row does not, so
|
|
116
|
+
* the fetched messages are never recorded locally.
|
|
117
|
+
*
|
|
118
|
+
* @param text - The message text
|
|
119
|
+
* @param block - Rendered Slack context, or empty
|
|
120
|
+
* @returns The text to deliver
|
|
121
|
+
*/
|
|
122
|
+
export function withContextBlock(text, block) {
|
|
123
|
+
return block ? `${block}\n\n${text}` : text;
|
|
124
|
+
}
|
|
112
125
|
export class SlackOrchestratorBridge extends EventEmitter {
|
|
113
126
|
logger = LoggerService.getInstance().createComponentLogger('SlackBridge');
|
|
114
127
|
slackService;
|
|
@@ -294,6 +307,10 @@ export class SlackOrchestratorBridge extends EventEmitter {
|
|
|
294
307
|
await this.downloadMessageFiles(message, nonImageFiles);
|
|
295
308
|
}
|
|
296
309
|
}
|
|
310
|
+
// What the Slack thread actually says — including posts by agents on
|
|
311
|
+
// other machines, which Cloud never forwards here. Prompt context only;
|
|
312
|
+
// read in the background, awaited right before a prompt is built.
|
|
313
|
+
this.loadThreadContext(message);
|
|
297
314
|
// Get or create conversation context. The bridge works on its own copy
|
|
298
315
|
// carrying this message's Slack ids (G5), so the shared per-thread
|
|
299
316
|
// context is never overwritten by a later message.
|
|
@@ -404,7 +421,10 @@ export class SlackOrchestratorBridge extends EventEmitter {
|
|
|
404
421
|
hasFiles: message.hasFiles,
|
|
405
422
|
ownerUserId: this.slackService.getOwnerUserId?.() ?? null,
|
|
406
423
|
}, 'legacy-bridge', { targetAgent: mentionTarget.sessionName })).catch(() => null));
|
|
407
|
-
const agentResponse = await this.sendToAgent(mentionTarget.sessionName, appendTicketLine(cleanMessage || enrichedText, mentionTicket), context, message.authorAgentSession
|
|
424
|
+
const agentResponse = await this.sendToAgent(mentionTarget.sessionName, appendTicketLine(cleanMessage || enrichedText, mentionTicket), context, message.authorAgentSession, renderSlackThreadContext(await message.threadContext, {
|
|
425
|
+
botUserId: getSlackAgentIdentityService()?.getInstalled(mentionTarget.sessionName)?.botUserId,
|
|
426
|
+
name: mentionTarget.name,
|
|
427
|
+
}));
|
|
408
428
|
// Issue #394: `fromOrcReply` comes from the envelope — only
|
|
409
429
|
// `true` when slackResolve fired with a non-empty body. The
|
|
410
430
|
// pre-fix `response.length > 0` proxy false-positived on the
|
|
@@ -482,7 +502,7 @@ export class SlackOrchestratorBridge extends EventEmitter {
|
|
|
482
502
|
}, 'legacy-bridge', { targetAgent: this.config.orchestratorSession })).catch(() => null));
|
|
483
503
|
// Send to orchestrator for processing
|
|
484
504
|
{
|
|
485
|
-
const r = await this.sendToOrchestrator(appendTicketLine(message.text, ticket), context, message.authorAgentSession);
|
|
505
|
+
const r = await this.sendToOrchestrator(appendTicketLine(message.text, ticket), context, message.authorAgentSession, await this.orchestratorContextBlock(message));
|
|
486
506
|
response = r.response;
|
|
487
507
|
fromOrcReply = r.fromOrcReply;
|
|
488
508
|
}
|
|
@@ -721,7 +741,7 @@ Just type naturally to chat with the orchestrator!`;
|
|
|
721
741
|
* the Slack message; persisted so the owner-approval gate ignores it
|
|
722
742
|
* @returns Orchestrator response or offline/error message
|
|
723
743
|
*/
|
|
724
|
-
async sendToOrchestrator(message, context, authorAgentSession) {
|
|
744
|
+
async sendToOrchestrator(message, context, authorAgentSession, slackContextBlock) {
|
|
725
745
|
try {
|
|
726
746
|
// Check if orchestrator is active before attempting to send
|
|
727
747
|
let isActive = await isOrchestratorActive();
|
|
@@ -793,7 +813,7 @@ Just type naturally to chat with the orchestrator!`;
|
|
|
793
813
|
};
|
|
794
814
|
try {
|
|
795
815
|
this.messageQueueService.enqueue({
|
|
796
|
-
content: enrichedMessage,
|
|
816
|
+
content: withContextBlock(enrichedMessage, slackContextBlock),
|
|
797
817
|
conversationId: result.conversation.id,
|
|
798
818
|
source: 'slack',
|
|
799
819
|
sourceMetadata: {
|
|
@@ -891,7 +911,7 @@ Just type naturally to chat with the orchestrator!`;
|
|
|
891
911
|
}, this.config.responseTimeoutMs);
|
|
892
912
|
try {
|
|
893
913
|
this.messageQueueService.enqueue({
|
|
894
|
-
content: enrichedMessage,
|
|
914
|
+
content: withContextBlock(enrichedMessage, slackContextBlock),
|
|
895
915
|
conversationId: result.conversation.id,
|
|
896
916
|
source: 'slack',
|
|
897
917
|
sourceMetadata: {
|
|
@@ -1062,6 +1082,60 @@ Just type naturally to chat with the orchestrator!`;
|
|
|
1062
1082
|
}
|
|
1063
1083
|
return getOrchestratorOfflineMessage(true);
|
|
1064
1084
|
}
|
|
1085
|
+
/**
|
|
1086
|
+
* Read the Slack thread (or, for a top-level @-mention, the channel)
|
|
1087
|
+
* before this message and attach the pending read as `message.threadContext`.
|
|
1088
|
+
*
|
|
1089
|
+
* Cloud drops events written by the account's own bots, so a post by an
|
|
1090
|
+
* agent on another machine never reaches this one; without this, "look at
|
|
1091
|
+
* the items above" pointed at something the agent had never seen
|
|
1092
|
+
* (2026-09-28, #daily-info). Never throws; the promise never rejects.
|
|
1093
|
+
*
|
|
1094
|
+
* @param message - The inbound message (mutated: `threadContext`)
|
|
1095
|
+
*/
|
|
1096
|
+
loadThreadContext(message) {
|
|
1097
|
+
const req = { channelId: message.channelId, ts: message.ts, threadTs: message.threadTs, text: message.text };
|
|
1098
|
+
if (!message.channelId || !message.ts || !contextKindFor(req))
|
|
1099
|
+
return;
|
|
1100
|
+
try {
|
|
1101
|
+
message.threadContext = getSlackThreadContextService()
|
|
1102
|
+
.getContext(req, this.contextTokenCandidates(message))
|
|
1103
|
+
.catch(() => null);
|
|
1104
|
+
}
|
|
1105
|
+
catch (err) {
|
|
1106
|
+
this.logger.debug('Slack thread context skipped', { error: err instanceof Error ? err.message : String(err) });
|
|
1107
|
+
}
|
|
1108
|
+
}
|
|
1109
|
+
/**
|
|
1110
|
+
* Tokens that can read this message's conversation, best first: the app
|
|
1111
|
+
* that delivered this copy (in the channel by definition), then the same
|
|
1112
|
+
* order file downloads use (DM bot, @-mentioned bots, room agents, the
|
|
1113
|
+
* workspace bot).
|
|
1114
|
+
*
|
|
1115
|
+
* @param message - The inbound message
|
|
1116
|
+
* @returns Distinct tokens
|
|
1117
|
+
*/
|
|
1118
|
+
contextTokenCandidates(message) {
|
|
1119
|
+
const receiving = message.receivedVia
|
|
1120
|
+
? getSlackAgentIdentityService()?.getInstalled(message.receivedVia)?.botToken
|
|
1121
|
+
: undefined;
|
|
1122
|
+
return [...new Set([...(receiving ? [receiving] : []), ...this.fileTokenCandidates(message)])];
|
|
1123
|
+
}
|
|
1124
|
+
/**
|
|
1125
|
+
* The Slack context block as the orchestrator should see it (its own
|
|
1126
|
+
* lines marked: its per-machine app when installed, else the workspace bot).
|
|
1127
|
+
*
|
|
1128
|
+
* @param message - The inbound message
|
|
1129
|
+
* @returns The rendered block, or ''
|
|
1130
|
+
*/
|
|
1131
|
+
async orchestratorContextBlock(message) {
|
|
1132
|
+
const ctx = await message.threadContext;
|
|
1133
|
+
if (!ctx)
|
|
1134
|
+
return '';
|
|
1135
|
+
const botUserId = getSlackAgentIdentityService()?.getInstalled(this.config.orchestratorSession)?.botUserId ??
|
|
1136
|
+
(await this.slackService.getBotUserId().catch(() => null));
|
|
1137
|
+
return renderSlackThreadContext(ctx, { botUserId });
|
|
1138
|
+
}
|
|
1065
1139
|
/**
|
|
1066
1140
|
* The token that can actually read this message's files.
|
|
1067
1141
|
*
|
|
@@ -1845,12 +1919,15 @@ Just type naturally to chat with the orchestrator!`;
|
|
|
1845
1919
|
* placeholders return `fromOrcReply: false` so callers can gate the
|
|
1846
1920
|
* SLA cascade. Issue #394.
|
|
1847
1921
|
*/
|
|
1848
|
-
async sendToAgent(sessionName, message, context, authorAgentSession) {
|
|
1922
|
+
async sendToAgent(sessionName, message, context, authorAgentSession, slackContextBlock) {
|
|
1849
1923
|
try {
|
|
1850
1924
|
// Enrich with Slack context for reply routing
|
|
1851
1925
|
let enrichedMessage = message;
|
|
1926
|
+
let deliveredMessage = withContextBlock(message, slackContextBlock);
|
|
1852
1927
|
if (context) {
|
|
1853
|
-
|
|
1928
|
+
const header = `[SLACK_CONTEXT:channelId=${context.channelId},threadTs=${context.threadTs || ''}]`;
|
|
1929
|
+
enrichedMessage = `${header}\n${message}`;
|
|
1930
|
+
deliveredMessage = `${header}\n${deliveredMessage}`;
|
|
1854
1931
|
}
|
|
1855
1932
|
// Use message queue for agents that support it, or deliver directly
|
|
1856
1933
|
if (this.messageQueueService) {
|
|
@@ -1881,7 +1958,7 @@ Just type naturally to chat with the orchestrator!`;
|
|
|
1881
1958
|
}
|
|
1882
1959
|
}, this.config.responseTimeoutMs);
|
|
1883
1960
|
this.messageQueueService.enqueue({
|
|
1884
|
-
content:
|
|
1961
|
+
content: deliveredMessage,
|
|
1885
1962
|
conversationId: chatResult.conversation.id,
|
|
1886
1963
|
source: 'slack',
|
|
1887
1964
|
targetSession: sessionName,
|
|
@@ -1912,7 +1989,7 @@ Just type naturally to chat with the orchestrator!`;
|
|
|
1912
1989
|
await fetch(`${apiUrl}/api/terminal/${sessionName}/deliver`, {
|
|
1913
1990
|
method: 'POST',
|
|
1914
1991
|
headers: { 'Content-Type': 'application/json' },
|
|
1915
|
-
body: JSON.stringify({ message:
|
|
1992
|
+
body: JSON.stringify({ message: deliveredMessage, force: true }),
|
|
1916
1993
|
});
|
|
1917
1994
|
return {
|
|
1918
1995
|
response: 'Message delivered to agent. Response will arrive shortly.',
|