crewly 1.20.256 → 1.20.257
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/dist/backend/backend/src/constants.d.ts +21 -4
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +25 -8
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-item-card.d.ts +38 -17
- package/dist/backend/backend/src/services/open-items/open-item-card.d.ts.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-item-card.js +118 -31
- package/dist/backend/backend/src/services/open-items/open-item-card.js.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-items.service.d.ts +50 -0
- package/dist/backend/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-items.service.js +95 -5
- package/dist/backend/backend/src/services/open-items/open-items.service.js.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-items.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-items.wiring.js +8 -0
- package/dist/backend/backend/src/services/open-items/open-items.wiring.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +21 -4
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +25 -8
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/open-items/open-item-card.d.ts +38 -17
- package/dist/cli/backend/src/services/open-items/open-item-card.d.ts.map +1 -1
- package/dist/cli/backend/src/services/open-items/open-item-card.js +118 -31
- package/dist/cli/backend/src/services/open-items/open-item-card.js.map +1 -1
- package/dist/cli/backend/src/services/open-items/open-items.service.d.ts +50 -0
- package/dist/cli/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/open-items/open-items.service.js +95 -5
- package/dist/cli/backend/src/services/open-items/open-items.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -286,23 +286,23 @@ export function refersBack(question) {
|
|
|
286
286
|
return OPEN_ITEMS_CONSTANTS.REFERS_BACK_PATTERNS.some((re) => re.test(question));
|
|
287
287
|
}
|
|
288
288
|
/**
|
|
289
|
-
* Clip to
|
|
289
|
+
* Clip to a limit, keeping the END (the part closest to the question).
|
|
290
290
|
*
|
|
291
291
|
* @param s - Text
|
|
292
|
+
* @param max - Limit
|
|
292
293
|
* @returns Clipped text
|
|
293
294
|
*/
|
|
294
|
-
function clipTail(s) {
|
|
295
|
-
const max = OPEN_ITEMS_CONSTANTS.CONTEXT_EXCERPT_MAX_CHARS;
|
|
295
|
+
function clipTail(s, max) {
|
|
296
296
|
return s.length > max ? `…${s.slice(s.length - (max - 1))}` : s;
|
|
297
297
|
}
|
|
298
298
|
/**
|
|
299
|
-
* Clip to
|
|
299
|
+
* Clip to a limit, keeping the start.
|
|
300
300
|
*
|
|
301
301
|
* @param s - Text
|
|
302
|
+
* @param max - Limit
|
|
302
303
|
* @returns Clipped text
|
|
303
304
|
*/
|
|
304
|
-
function clipHead(s) {
|
|
305
|
-
const max = OPEN_ITEMS_CONSTANTS.CONTEXT_EXCERPT_MAX_CHARS;
|
|
305
|
+
function clipHead(s, max) {
|
|
306
306
|
return s.length > max ? `${s.slice(0, max - 1)}…` : s;
|
|
307
307
|
}
|
|
308
308
|
/**
|
|
@@ -321,46 +321,133 @@ function questionIndex(content, question) {
|
|
|
321
321
|
return head ? content.indexOf(head) : -1;
|
|
322
322
|
}
|
|
323
323
|
/**
|
|
324
|
-
* The
|
|
325
|
-
* card (specs/2026-10-02-decision-card-thread-answers.md §5):
|
|
324
|
+
* The fenced and quoted blocks of a message, in order.
|
|
326
325
|
*
|
|
327
|
-
*
|
|
328
|
-
*
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
326
|
+
* @param content - The agent message
|
|
327
|
+
* @returns Blocks
|
|
328
|
+
*/
|
|
329
|
+
function messageBlocks(content) {
|
|
330
|
+
const out = [];
|
|
331
|
+
const fence = /```[^\n]*\n?([\s\S]*?)```/g;
|
|
332
|
+
for (let m = fence.exec(content); m; m = fence.exec(content)) {
|
|
333
|
+
if (m[1].trim())
|
|
334
|
+
out.push({ start: m.index, end: m.index + m[0].length, kind: 'fenced', inner: m[1].replace(/\s+$/, '') });
|
|
335
|
+
}
|
|
336
|
+
const quoted = /(?:^|\n)((?:[ \t]*(?:>|>)[^\n]*(?:\n|$))+)/g;
|
|
337
|
+
for (let m = quoted.exec(content); m; m = quoted.exec(content)) {
|
|
338
|
+
const start = m.index + (m[0].startsWith('\n') ? 1 : 0);
|
|
339
|
+
const end = start + m[1].length;
|
|
340
|
+
if (out.some((b) => b.kind === 'fenced' && start >= b.start && start < b.end))
|
|
341
|
+
continue;
|
|
342
|
+
const inner = m[1]
|
|
343
|
+
.split('\n')
|
|
344
|
+
.map((l) => l.replace(/^[ \t]*(?:>|>)[ \t]?/u, ''))
|
|
345
|
+
.join('\n')
|
|
346
|
+
.trim();
|
|
347
|
+
if (inner.replace(/[\s\p{P}\p{S}]+/gu, '').length >= 8)
|
|
348
|
+
out.push({ start, end, kind: 'quoted', inner });
|
|
349
|
+
}
|
|
350
|
+
return out.sort((a, b) => a.start - b.start);
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Quote text as mrkdwn `>` lines.
|
|
334
354
|
*
|
|
335
|
-
* @
|
|
336
|
-
*
|
|
337
|
-
* // → ['> 方案:Nova 负责 CE 的 codex 任务。']
|
|
355
|
+
* @param t - Text
|
|
356
|
+
* @returns Quoted text
|
|
338
357
|
*/
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
return undefined;
|
|
342
|
-
const quote = (t) => t
|
|
358
|
+
function quote(t) {
|
|
359
|
+
return t
|
|
343
360
|
.split('\n')
|
|
344
361
|
.map((l) => l.trim())
|
|
345
362
|
.filter(Boolean)
|
|
346
363
|
.map((l) => `> ${l}`)
|
|
347
364
|
.join('\n');
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Meaningful length of a text (letters / digits / CJK only).
|
|
368
|
+
*
|
|
369
|
+
* @param t - Text
|
|
370
|
+
* @returns Count
|
|
371
|
+
*/
|
|
372
|
+
function meaningful(t) {
|
|
373
|
+
return t.replace(/[\s\p{P}\p{S}]+/gu, '').length;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* The context every auto-extracted question card carries, as mrkdwn sections
|
|
377
|
+
* (specs/2026-10-02-decision-card-thread-answers.md §5). A question lifted
|
|
378
|
+
* out of a message must stand on its own, wherever the card lands:
|
|
379
|
+
*
|
|
380
|
+
* - `*About:*` — the owner's original ask, clipped;
|
|
381
|
+
* - the agent's words before the question (its last paragraph(s), up to
|
|
382
|
+
* ~500 characters), quoted;
|
|
383
|
+
* - the fenced / quoted block (a draft) the question points at — "按这个草稿回?"
|
|
384
|
+
* — up to ~1200 characters;
|
|
385
|
+
* - a link to the agent's full message (or "in Crewly chat"), and to the old
|
|
386
|
+
* ticket thread when the card is posted elsewhere.
|
|
387
|
+
*
|
|
388
|
+
* With nothing quotable, the card still says what it is about and how to
|
|
389
|
+
* find out more: "Context: <ask> — reply in thread to ask <agent> for details".
|
|
390
|
+
*
|
|
391
|
+
* @param input - The agent message, the question, and where things are
|
|
392
|
+
* @returns Sections (never empty)
|
|
393
|
+
*
|
|
394
|
+
* @example
|
|
395
|
+
* questionContextBlocks({ content: '方案:Nova 负责 CE 的 codex 任务。\n\n这样安排行不行?', question: '这样安排行不行?', ownerAsk: '加一个 codex agent', agentName: 'Orc' })
|
|
396
|
+
* // → ['*About:* 加一个 codex agent', '_Orc wrote:_\n> 方案:Nova 负责 CE 的 codex 任务。', '_Full message in Crewly chat._']
|
|
397
|
+
*/
|
|
398
|
+
export function questionContextBlocks(input) {
|
|
399
|
+
const C = OPEN_ITEMS_CONSTANTS;
|
|
400
|
+
const name = input.agentName?.trim() || 'the agent';
|
|
401
|
+
const content = input.content ?? '';
|
|
402
|
+
const at = questionIndex(content, input.question);
|
|
403
|
+
const qEnd = at >= 0 ? at + input.question.length : content.length;
|
|
404
|
+
const pointsBack = refersBack(input.question);
|
|
405
|
+
const aboutDraft = C.DRAFT_WORD_PATTERN.test(input.question);
|
|
406
|
+
// The block (draft) the question points at: the nearest one before it, else the first after.
|
|
407
|
+
const blocks = messageBlocks(content).filter((b) => at < 0 || b.end <= at || b.start >= qEnd);
|
|
408
|
+
const block = pointsBack || aboutDraft ? ([...blocks].reverse().find((b) => at < 0 || b.end <= at) ?? blocks.find((b) => b.start >= qEnd)) : undefined;
|
|
409
|
+
// The agent's words before the question, without the block itself.
|
|
410
|
+
let before = at >= 0 ? content.slice(0, at) : '';
|
|
411
|
+
if (block && block.end <= at)
|
|
412
|
+
before = `${before.slice(0, block.start)}\n\n${before.slice(block.end)}`;
|
|
413
|
+
// A pointing-back question wants the text right before it: when a block sits
|
|
414
|
+
// between, the paragraph that introduces the block is still the nearest words.
|
|
415
|
+
let excerpt = '';
|
|
416
|
+
if (meaningful(before) >= 8) {
|
|
351
417
|
const paragraphs = before.split(/\n\s*\n/).map((p) => p.trim()).filter(Boolean);
|
|
352
418
|
let picked = paragraphs.pop() ?? '';
|
|
353
|
-
while (paragraphs.length > 0 && picked.length <
|
|
419
|
+
while (paragraphs.length > 0 && picked.length < C.CONTEXT_EXCERPT_MAX_CHARS) {
|
|
354
420
|
const prev = paragraphs.pop();
|
|
355
|
-
if (picked.length + prev.length +
|
|
421
|
+
if (picked.length + prev.length + 1 > C.CONTEXT_EXCERPT_MAX_CHARS)
|
|
356
422
|
break;
|
|
357
423
|
picked = `${prev}\n${picked}`;
|
|
358
424
|
}
|
|
359
|
-
|
|
425
|
+
excerpt = clipTail(picked, C.CONTEXT_EXCERPT_MAX_CHARS);
|
|
360
426
|
}
|
|
361
427
|
const ask = input.ownerAsk?.replace(/\s+/g, ' ').trim();
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
428
|
+
const askLine = ask && ask !== input.question.trim() ? clipHead(ask, C.CONTEXT_ABOUT_MAX_CHARS) : '';
|
|
429
|
+
const out = [];
|
|
430
|
+
if (!excerpt && !block) {
|
|
431
|
+
out.push(`*Context:* ${askLine || 'none in the message'} — reply in thread to ask ${name} for details`);
|
|
432
|
+
}
|
|
433
|
+
else {
|
|
434
|
+
if (askLine)
|
|
435
|
+
out.push(`*About:* ${askLine}`);
|
|
436
|
+
if (excerpt)
|
|
437
|
+
out.push(`_${name} wrote:_\n${quote(excerpt)}`);
|
|
438
|
+
if (block) {
|
|
439
|
+
const inner = clipHead(block.inner, C.CONTEXT_BLOCK_MAX_CHARS);
|
|
440
|
+
out.push(block.kind === 'fenced' ? `\`\`\`\n${inner.replace(/`{3,}/g, "''")}\n\`\`\`` : quote(inner));
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
const links = [];
|
|
444
|
+
if (input.messageLink)
|
|
445
|
+
links.push(`<${input.messageLink}|${input.linkIsThread ? `Open the thread with ${name}'s message` : `Open ${name}'s full message`}>`);
|
|
446
|
+
else
|
|
447
|
+
links.push('_Full message in Crewly chat._');
|
|
448
|
+
if (input.oldThreadLink)
|
|
449
|
+
links.push(`<${input.oldThreadLink}|Earlier ticket thread>`);
|
|
450
|
+
out.push(links.join(' · '));
|
|
451
|
+
return out;
|
|
365
452
|
}
|
|
366
453
|
//# sourceMappingURL=open-item-card.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-item-card.js","sourceRoot":"","sources":["../../../../../../backend/src/services/open-items/open-item-card.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"open-item-card.js","sourceRoot":"","sources":["../../../../../../backend/src/services/open-items/open-item-card.ts"],"names":[],"mappings":"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"}
|
|
@@ -105,6 +105,8 @@ export interface OpenItemsDeps {
|
|
|
105
105
|
colleagueNames?: (session: string) => Promise<string[]>;
|
|
106
106
|
/** The owner's Slack user id */
|
|
107
107
|
ownerSlackUserId?: () => string | null;
|
|
108
|
+
/** Epoch ms of the newest message in the request's conversation (stale-thread check) */
|
|
109
|
+
threadLastActivityMs?: (request: Request) => Promise<number | null>;
|
|
108
110
|
now?: () => Date;
|
|
109
111
|
logger?: ComponentLogger;
|
|
110
112
|
}
|
|
@@ -117,6 +119,12 @@ export interface PlannedOpenItem {
|
|
|
117
119
|
linkedDecisionId?: string;
|
|
118
120
|
/** Question: the owner already skipped the same question here — tracked as skipped, never carded */
|
|
119
121
|
skippedDecisionId?: string;
|
|
122
|
+
/**
|
|
123
|
+
* Question: where the card goes instead of the request's thread (the agent
|
|
124
|
+
* asked elsewhere and the ticket thread is stale); null = the agent's
|
|
125
|
+
* current conversation / team channel
|
|
126
|
+
*/
|
|
127
|
+
cardPlace?: OpenItemsSlackPlace | null;
|
|
120
128
|
}
|
|
121
129
|
/** Thrown for open-item requests the caller must fix (HTTP 4xx). */
|
|
122
130
|
export declare class OpenItemsError extends Error {
|
|
@@ -131,6 +139,34 @@ export declare class OpenItemsError extends Error {
|
|
|
131
139
|
* @returns Place, or null for chat-only conversations
|
|
132
140
|
*/
|
|
133
141
|
export declare function slackPlaceOf(request: Pick<Request, 'origin'>): OpenItemsSlackPlace | null;
|
|
142
|
+
/** Where an agent's chat message sits in Slack, read from its metadata. */
|
|
143
|
+
export interface AgentMessageSlackPlace {
|
|
144
|
+
slackChannelId: string;
|
|
145
|
+
/** Thread root ts (the message's own ts when it is a top-level post) */
|
|
146
|
+
threadTs?: string;
|
|
147
|
+
/** The message's own ts, when known */
|
|
148
|
+
messageTs?: string;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Where an agent's message was posted in Slack: `metadata.slackThreadKey`
|
|
152
|
+
* (`<channel>:<threadTs>`), else `slackChannelId` + `slackThreadTs` /
|
|
153
|
+
* `slackTs` (a top-level post records its own ts as `slackThreadTs`).
|
|
154
|
+
*
|
|
155
|
+
* @param message - chat-v2 message
|
|
156
|
+
* @returns Place, or null when it was not mirrored to Slack
|
|
157
|
+
*/
|
|
158
|
+
export declare function agentMessageSlackPlace(message: Pick<OpenItemsChatMessage, 'metadata' | 'threadId'>): AgentMessageSlackPlace | null;
|
|
159
|
+
/**
|
|
160
|
+
* A link to an agent's message in Slack (or to its thread when the message's
|
|
161
|
+
* own ts is unknown).
|
|
162
|
+
*
|
|
163
|
+
* @param p - Where it was posted
|
|
164
|
+
* @returns The link and whether it points at the thread, or null
|
|
165
|
+
*/
|
|
166
|
+
export declare function agentMessageLink(p: AgentMessageSlackPlace | null): {
|
|
167
|
+
url: string;
|
|
168
|
+
isThread: boolean;
|
|
169
|
+
} | null;
|
|
134
170
|
/**
|
|
135
171
|
* Whether a message is in the request's conversation.
|
|
136
172
|
*
|
|
@@ -344,6 +380,20 @@ export declare class OpenItemsService {
|
|
|
344
380
|
* @returns Planned items
|
|
345
381
|
*/
|
|
346
382
|
plan(request: Request, message: OpenItemsChatMessage, at: Date): Promise<PlannedOpenItem[]>;
|
|
383
|
+
/**
|
|
384
|
+
* Where a question card from this message goes, and the links it carries.
|
|
385
|
+
* The card goes to the request's thread — unless the agent asked somewhere
|
|
386
|
+
* else (another thread / channel, or a top-level post) and that thread has
|
|
387
|
+
* been quiet for {@link OPEN_ITEMS_CONSTANTS.STALE_THREAD_MS}: then it goes
|
|
388
|
+
* where the agent's message is (null: the agent's current conversation /
|
|
389
|
+
* team channel) and links the old thread instead of reviving it.
|
|
390
|
+
*
|
|
391
|
+
* @param request - Its request
|
|
392
|
+
* @param message - The agent message
|
|
393
|
+
* @param at - When it was posted
|
|
394
|
+
* @returns Place override (undefined = the request's thread) and links
|
|
395
|
+
*/
|
|
396
|
+
private questionPlace;
|
|
347
397
|
/**
|
|
348
398
|
* The newest ask-owner decision this agent made shortly before `at` (the card a conditional promise waits on).
|
|
349
399
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-items.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/open-items/open-items.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAA6B,KAAK,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpG,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAGnF,OAAO,EAAoG,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEjK,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"open-items.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/open-items/open-items.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAA6B,KAAK,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpG,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAGnF,OAAO,EAAoG,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEjK,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAS5G,oDAAoD;AACpD,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,mEAAmE;AACnE,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,yDAAyD;AACzD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,eAAe,CAAC;IACtB,wDAAwD;IACxD,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACnC;AAED,gCAAgC;AAChC,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAClC,sDAAsD;IACtD,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,qBAAqB;AACrB,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE;QACR,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QAC7C,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,0BAA0B,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KAC3H,CAAC;IACF,iCAAiC;IACjC,aAAa,EAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzC,0EAA0E;IAC1E,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAClE,uEAAuE;IACvE,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,WAAW,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1G,oEAAoE;IACpE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACjF,uDAAuD;IACvD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAC1E,4DAA4D;IAC5D,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,iFAAiF;IACjF,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACxG,8FAA8F;IAC9F,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,iFAAiF;IACjF,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACpE,qEAAqE;IACrE,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpE,8DAA8D;IAC9D,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpE,yCAAyC;IACzC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,gFAAgF;IAChF,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACxD,gCAAgC;IAChC,gBAAgB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACvC,wFAAwF;IACxF,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACpE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,uEAAuE;AACvE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,eAAe,CAAC;IACtB,yFAAyF;IACzF,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oGAAoG;IACpG,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,SAAS,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACxC;AAWD,oEAAoE;AACpE,qBAAa,cAAe,SAAQ,KAAK;aAErB,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EAC9B,OAAO,EAAE,MAAM;CAKlB;AAYD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,mBAAmB,GAAG,IAAI,CAKzF;AAED,2EAA2E;AAC3E,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG,sBAAsB,GAAG,IAAI,CAWlI;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,sBAAsB,GAAG,IAAI,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAO5G;AAcD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,OAAO,CAKhJ;AAmCD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,EAAE,CAgBtI;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,QAAQ,EAAE,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;IAAC,IAAI,EAAE,QAAQ,EAAE,CAAA;CAAE,CAiB/J;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC,GAAG,OAAO,CAI9L;AAED,oGAAoG;AACpG,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKhD;AAqBD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,GAAG,UAAU,CAAC,GAAG,OAAO,CAsBtH;AASD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,eAAe,GAAG,OAAO,CAU7E;AAcD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,GAAG,cAAc,CAK7G;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAI3D;AAYD,iEAAiE;AACjE,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,GAAG,GAAE,IAAiB,GAAG,cAAc,EAAE,CAoBtG;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC,EAC/D,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,EAAE,GAAE,IAAiB,GACpB,OAAO,CAAC,OAAO,CAAC,CASlB;AAUD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,WAAW,CAAC,GAAG,OAAO,CAInG;AAMD;;GAEG;AACH,qBAAa,gBAAgB;IAUf,OAAO,CAAC,QAAQ,CAAC,IAAI;IATjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,KAAK,CAA+C;IAE5D;;OAEG;gBAC0B,IAAI,EAAE,aAAa;IAKhD,gEAAgE;IAChE,MAAM,CAAC,WAAW,IAAI,gBAAgB,GAAG,IAAI;IAI7C,yDAAyD;IACzD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAAG,IAAI;IAI1D,gCAAgC;IAChC,KAAK,IAAI,IAAI;IAQb,sBAAsB;IACtB,IAAI,IAAI,IAAI;IAKZ;;;OAGG;IACH,OAAO,CAAC,MAAM;IAMd;;;;;;;OAOG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQxE;;;;;;;;;OASG;IACH,cAAc,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,GAAG,IAAI;IAuBtF;;;;;;OAMG;IACG,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAuD5E;;;;;;OAMG;IACG,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAW5E;;;;;;;;;OASG;YACW,WAAW;IAkBzB;;;;;;;OAOG;IACG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA0DjG;;;;;;;;;;;;OAYG;YACW,aAAa;IAgB3B;;;;;;OAMG;YACW,cAAc;IAO5B;;;;;;;OAOG;YACW,YAAY;IAc1B;;;;;;;;OAQG;YACW,QAAQ;IAyCtB;;;;;;;;OAQG;IACH,OAAO,CAAC,UAAU;IAUlB;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,SAAS,QAAQ,EAAE,GAAG,OAAO;IA6BrG;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;IAMpB;;;;;;;;OAQG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBxF;;;;;;;;OAQG;IACG,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,cAAc,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAe5I;;;;;;;OAOG;YACW,IAAI;IAiBlB;;;;;;OAMG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA6BvE;;;;;;;;;;OAUG;IACH,OAAO,CAAC,WAAW;IAMnB;;;;;;;;OAQG;YACW,SAAS;IAiBvB;;;;;;;OAOG;IACG,iBAAiB,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA+BtG;;;;;;;;;;OAUG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAsC3E;;;;;;OAMG;IACG,KAAK,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA8B9G;;;;;;;;;;;;;;;;;;;OAmBG;YACW,6BAA6B;IAiD3C;;OAEG;YACW,SAAS;IA8FvB;;;;;;;;OAQG;IACG,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,QAAQ,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;YAqBjG,aAAa;CAK5B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,CAczF"}
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
*
|
|
31
31
|
* @module services/open-items/open-items.service
|
|
32
32
|
*/
|
|
33
|
-
import { OPEN_ITEMS_CONSTANTS, ORCHESTRATOR_SESSION_NAME, REPLY_ROUTING_CONSTANTS } from '../../constants.js';
|
|
33
|
+
import { OPEN_ITEMS_CONSTANTS, ORCHESTRATOR_SESSION_NAME, REPLY_ROUTING_CONSTANTS, SLACK_THREAD_KEY_CONSTANTS } from '../../constants.js';
|
|
34
34
|
import { isInterim } from '../slack/slack-typing-placeholder.service.js';
|
|
35
35
|
import { LoggerService } from '../core/logger.service.js';
|
|
36
36
|
import { ACTIVE_OPEN_ITEM_STATUSES } from '../../types/v2/open-item.types.js';
|
|
@@ -40,6 +40,8 @@ import { deriveEitherOrCard, deriveQuestionCard, groupEitherOr, questionContextB
|
|
|
40
40
|
import { formatWhen } from '../decisions/decision-card.js';
|
|
41
41
|
import { AgentPromptReferenceService } from '../orc/agent-prompt-reference.service.js';
|
|
42
42
|
import { withQueueMeta } from '../messaging/queue-priority.js';
|
|
43
|
+
import { parseSlackThreadKey } from '../slack/slack-thread-key.js';
|
|
44
|
+
import { slackArchiveLink } from '../decisions/ticket-thread-store.js';
|
|
43
45
|
/** Thrown for open-item requests the caller must fix (HTTP 4xx). */
|
|
44
46
|
export class OpenItemsError extends Error {
|
|
45
47
|
status;
|
|
@@ -70,6 +72,55 @@ export function slackPlaceOf(request) {
|
|
|
70
72
|
const m = /^slack:([CDG][A-Z0-9]+):(\d{6,}\.\d+)$/.exec(ref);
|
|
71
73
|
return m ? { slackChannelId: m[1], threadTs: m[2] } : null;
|
|
72
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Where an agent's message was posted in Slack: `metadata.slackThreadKey`
|
|
77
|
+
* (`<channel>:<threadTs>`), else `slackChannelId` + `slackThreadTs` /
|
|
78
|
+
* `slackTs` (a top-level post records its own ts as `slackThreadTs`).
|
|
79
|
+
*
|
|
80
|
+
* @param message - chat-v2 message
|
|
81
|
+
* @returns Place, or null when it was not mirrored to Slack
|
|
82
|
+
*/
|
|
83
|
+
export function agentMessageSlackPlace(message) {
|
|
84
|
+
const meta = message.metadata ?? {};
|
|
85
|
+
const str = (v) => (typeof v === 'string' && v.trim() ? v.trim() : undefined);
|
|
86
|
+
const messageTs = str(meta.slackTs);
|
|
87
|
+
const key = parseSlackThreadKey(meta[SLACK_THREAD_KEY_CONSTANTS.METADATA_KEY]);
|
|
88
|
+
if (key)
|
|
89
|
+
return { slackChannelId: key.slackChannelId, threadTs: key.threadTs, ...(messageTs ? { messageTs } : {}) };
|
|
90
|
+
const channel = str(meta.slackChannelId);
|
|
91
|
+
if (!channel)
|
|
92
|
+
return null;
|
|
93
|
+
const threadTs = str(meta.slackThreadTs) ?? messageTs;
|
|
94
|
+
const own = messageTs ?? (!message.threadId ? threadTs : undefined);
|
|
95
|
+
return { slackChannelId: channel, ...(threadTs ? { threadTs } : {}), ...(own ? { messageTs: own } : {}) };
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* A link to an agent's message in Slack (or to its thread when the message's
|
|
99
|
+
* own ts is unknown).
|
|
100
|
+
*
|
|
101
|
+
* @param p - Where it was posted
|
|
102
|
+
* @returns The link and whether it points at the thread, or null
|
|
103
|
+
*/
|
|
104
|
+
export function agentMessageLink(p) {
|
|
105
|
+
if (!p)
|
|
106
|
+
return null;
|
|
107
|
+
if (p.messageTs) {
|
|
108
|
+
const reply = p.threadTs && p.threadTs !== p.messageTs ? `?thread_ts=${p.threadTs}&cid=${p.slackChannelId}` : '';
|
|
109
|
+
return { url: `${slackArchiveLink(p.slackChannelId, p.messageTs)}${reply}`, isThread: false };
|
|
110
|
+
}
|
|
111
|
+
return p.threadTs ? { url: slackArchiveLink(p.slackChannelId, p.threadTs), isThread: true } : null;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* The newest activity of a request's conversation known from the request
|
|
115
|
+
* itself (fallback when the chat thread cannot be read).
|
|
116
|
+
*
|
|
117
|
+
* @param request - Request
|
|
118
|
+
* @returns Epoch ms
|
|
119
|
+
*/
|
|
120
|
+
function knownLastActivity(request) {
|
|
121
|
+
const times = [request.createdAt, request.reply?.at, request.submittedAt, ...(request.discussion ?? []).map((d) => d.at), ...(request.openItems ?? []).map((i) => i.createdAt)];
|
|
122
|
+
return Math.max(0, ...times.map((t) => (t ? Date.parse(t) : NaN)).filter((n) => Number.isFinite(n)));
|
|
123
|
+
}
|
|
73
124
|
/**
|
|
74
125
|
* Whether a message is in the request's conversation.
|
|
75
126
|
*
|
|
@@ -647,6 +698,7 @@ export class OpenItemsService {
|
|
|
647
698
|
out.push({ item: { ...base('commitment', i + 1), type: 'commitment', text: c.text, due: c.due.toISOString(), dueSource: c.dueSource } });
|
|
648
699
|
}
|
|
649
700
|
let qi = 0;
|
|
701
|
+
let where;
|
|
650
702
|
for (const group of groupEitherOr(found.questions)) {
|
|
651
703
|
const q = group[0];
|
|
652
704
|
qi += 1;
|
|
@@ -661,14 +713,52 @@ export class OpenItemsService {
|
|
|
661
713
|
out.push({ item, linkedDecisionId: asked.id });
|
|
662
714
|
continue;
|
|
663
715
|
}
|
|
664
|
-
|
|
665
|
-
|
|
716
|
+
where ??= await this.questionPlace(request, message, at);
|
|
717
|
+
// A question lifted out of a message always says what it is about.
|
|
718
|
+
const context = questionContextBlocks({
|
|
719
|
+
content: message.content,
|
|
720
|
+
question: q.text,
|
|
721
|
+
ownerAsk: request.description || request.title,
|
|
722
|
+
agentName: where.agentName,
|
|
723
|
+
...(where.link ? { messageLink: where.link.url, linkIsThread: where.link.isThread } : {}),
|
|
724
|
+
...(where.oldThreadLink ? { oldThreadLink: where.oldThreadLink } : {}),
|
|
725
|
+
});
|
|
666
726
|
// Consecutive either/or questions are ONE card, one button per alternative.
|
|
667
727
|
const derived = group.length > 1 ? deriveEitherOrCard(group) : deriveQuestionCard(q);
|
|
668
|
-
out.push({ item, card: { ...derived, ...(
|
|
728
|
+
out.push({ item, card: { ...derived, context }, ...(where.cardPlace !== undefined ? { cardPlace: where.cardPlace } : {}) });
|
|
669
729
|
}
|
|
670
730
|
return out;
|
|
671
731
|
}
|
|
732
|
+
/**
|
|
733
|
+
* Where a question card from this message goes, and the links it carries.
|
|
734
|
+
* The card goes to the request's thread — unless the agent asked somewhere
|
|
735
|
+
* else (another thread / channel, or a top-level post) and that thread has
|
|
736
|
+
* been quiet for {@link OPEN_ITEMS_CONSTANTS.STALE_THREAD_MS}: then it goes
|
|
737
|
+
* where the agent's message is (null: the agent's current conversation /
|
|
738
|
+
* team channel) and links the old thread instead of reviving it.
|
|
739
|
+
*
|
|
740
|
+
* @param request - Its request
|
|
741
|
+
* @param message - The agent message
|
|
742
|
+
* @param at - When it was posted
|
|
743
|
+
* @returns Place override (undefined = the request's thread) and links
|
|
744
|
+
*/
|
|
745
|
+
async questionPlace(request, message, at) {
|
|
746
|
+
const agentName = (await this.deps.displayName?.(message.senderId).catch(() => null)) || message.senderId;
|
|
747
|
+
const msgPlace = agentMessageSlackPlace(message);
|
|
748
|
+
const link = agentMessageLink(msgPlace);
|
|
749
|
+
const reqPlace = slackPlaceOf(request);
|
|
750
|
+
const sameSlackThread = !!msgPlace && !!reqPlace && msgPlace.slackChannelId === reqPlace.slackChannelId && (msgPlace.threadTs ?? msgPlace.messageTs) === reqPlace.threadTs;
|
|
751
|
+
const elsewhere = msgPlace ? !sameSlackThread : !inRequestThread(request, message);
|
|
752
|
+
if (!elsewhere || !reqPlace)
|
|
753
|
+
return { agentName, link };
|
|
754
|
+
const last = (await this.deps.threadLastActivityMs?.(request).catch(() => null)) ?? knownLastActivity(request);
|
|
755
|
+
if (at.getTime() - last < OPEN_ITEMS_CONSTANTS.STALE_THREAD_MS)
|
|
756
|
+
return { agentName, link };
|
|
757
|
+
const threadTs = msgPlace?.threadTs ?? msgPlace?.messageTs;
|
|
758
|
+
const cardPlace = msgPlace && threadTs ? { slackChannelId: msgPlace.slackChannelId, threadTs } : null;
|
|
759
|
+
this.logger.info('Question asked outside a stale ticket thread — card goes where the agent asked', { tkt: ticketLabel(request), agent: message.senderId, to: cardPlace ?? 'agent conversation' });
|
|
760
|
+
return { agentName, link, cardPlace, oldThreadLink: slackArchiveLink(reqPlace.slackChannelId, reqPlace.threadTs) };
|
|
761
|
+
}
|
|
672
762
|
/**
|
|
673
763
|
* The newest ask-owner decision this agent made shortly before `at` (the card a conditional promise waits on).
|
|
674
764
|
*
|
|
@@ -743,7 +833,7 @@ export class OpenItemsService {
|
|
|
743
833
|
return item;
|
|
744
834
|
}
|
|
745
835
|
if (p.card && this.deps.askQuestion) {
|
|
746
|
-
const d = await this.deps.askQuestion({ request, item, card: p.card, place, source }).catch((err) => {
|
|
836
|
+
const d = await this.deps.askQuestion({ request, item, card: p.card, place: p.cardPlace !== undefined ? p.cardPlace : place, source }).catch((err) => {
|
|
747
837
|
this.logger.warn('Question card not posted', { tkt: ticketLabel(request), error: errText(err) });
|
|
748
838
|
return null;
|
|
749
839
|
});
|