cli-jaw 2.17.23 → 2.17.24
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/src/agent/spawn/queue.js +12 -0
- package/dist/src/agent/spawn/queue.js.map +1 -1
- package/dist/src/discord/bot.js +44 -7
- package/dist/src/discord/bot.js.map +1 -1
- package/dist/src/messaging/send.js +19 -0
- package/dist/src/messaging/send.js.map +1 -1
- package/dist/src/messaging/turn-delivery.js +218 -0
- package/dist/src/messaging/turn-delivery.js.map +1 -0
- package/dist/src/routes/messaging.js +63 -3
- package/dist/src/routes/messaging.js.map +1 -1
- package/dist/src/slack/bot.js +54 -4
- package/dist/src/slack/bot.js.map +1 -1
- package/dist/src/telegram/bot.js +50 -5
- package/dist/src/telegram/bot.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
// ─── Turn Delivery Claims ────────────────────────────
|
|
2
|
+
// One inbound turn has TWO ways to put the answer in front of the user, and
|
|
3
|
+
// until this module existed neither knew about the other:
|
|
4
|
+
//
|
|
5
|
+
// 1. the AGENT itself, calling POST /api/channel/send as a tool mid-turn;
|
|
6
|
+
// 2. the DISPATCH path, posting the collected final text when the turn settles.
|
|
7
|
+
//
|
|
8
|
+
// When the agent takes the first route the user reads the same answer twice.
|
|
9
|
+
// The prompt actively encourages the pairing that makes it visible ("Always
|
|
10
|
+
// provide normal text response alongside file delivery"), so this is the
|
|
11
|
+
// ordinary case for any turn that returns an image, not an exotic one.
|
|
12
|
+
//
|
|
13
|
+
// WHY NOT THE OBVIOUS KEYS
|
|
14
|
+
//
|
|
15
|
+
// A per-turn nonce echoed by the agent would be exact, and unreliable for the
|
|
16
|
+
// same reason #474 was: it only works when the model remembers to echo it.
|
|
17
|
+
// `turn_conversation` is an ADDRESS, not an identity — two consecutive turns in
|
|
18
|
+
// one thread serialize to identical bytes. And a bare text-equality cache is
|
|
19
|
+
// unsound in both directions, because the dispatch text is transformed on its
|
|
20
|
+
// way out (interview-tracker stripping, elicitation normalization, a possible
|
|
21
|
+
// stall notice, output policy) by a different sequence than the self-send.
|
|
22
|
+
//
|
|
23
|
+
// So the key is what the SERVER already knows without the model's cooperation:
|
|
24
|
+
// which conversation was addressed, and when. A self-delivery is remembered
|
|
25
|
+
// against its target for a bounded window; the dispatch path asks, just before
|
|
26
|
+
// posting, whether this turn's answer is already on screen.
|
|
27
|
+
//
|
|
28
|
+
// FAIL-OPEN, DELIBERATELY
|
|
29
|
+
//
|
|
30
|
+
// A duplicated answer is annoying. A SWALLOWED answer is the user losing work
|
|
31
|
+
// they were waiting on, and it is silent. Every uncertain case therefore
|
|
32
|
+
// resolves toward posting: an unrecorded send, an expired window, a digest that
|
|
33
|
+
// does not match, a target that does not match. Suppression happens only when
|
|
34
|
+
// the recorded text and the outgoing text agree after normalization — that is,
|
|
35
|
+
// only when the user demonstrably already has these exact words.
|
|
36
|
+
//
|
|
37
|
+
// ORDERING ACROSS TURNS
|
|
38
|
+
//
|
|
39
|
+
// Two turns addressing the SAME conversation cannot interleave here: same-target
|
|
40
|
+
// turns share a scope and serialize through the session lane
|
|
41
|
+
// (`src/orchestrator/session-lanes.ts`), which runs one turn per scope. Turns to
|
|
42
|
+
// DIFFERENT conversations produce different target keys and cannot see each
|
|
43
|
+
// other's claims at all. The safety of this module therefore rests on that lane
|
|
44
|
+
// invariant plus consumption below — worth knowing before anyone raises
|
|
45
|
+
// `maxConcurrent` per scope, because that is the assumption it would weaken.
|
|
46
|
+
import { createHash } from 'node:crypto';
|
|
47
|
+
import { buildRemoteSessionKey } from './session-key.js';
|
|
48
|
+
/** Outer bound on how long a self-delivery is remembered.
|
|
49
|
+
*
|
|
50
|
+
* This is a memory bound, NOT the suppression rule. The rule is the turn
|
|
51
|
+
* anchor below: a claim can only suppress the turn it was made during. Without
|
|
52
|
+
* that anchor a TTL alone degrades the key to target+text, so a later turn
|
|
53
|
+
* answering "완료했습니다" a second time would be swallowed — a silence, which is
|
|
54
|
+
* the failure this module exists to avoid causing. */
|
|
55
|
+
export const SELF_DELIVERY_TTL_MS = 15 * 60_000;
|
|
56
|
+
/** Bound on remembered deliveries, so a busy server cannot grow this without
|
|
57
|
+
* limit. Oldest-first eviction, as in `dedupe.ts`. */
|
|
58
|
+
const MAX_TRACKED = 512;
|
|
59
|
+
const records = [];
|
|
60
|
+
/**
|
|
61
|
+
* A strictly increasing sequence number, and the ONLY thing that decides which
|
|
62
|
+
* turn a claim belongs to.
|
|
63
|
+
*
|
|
64
|
+
* Wall-clock time cannot carry that decision. `Date.now()` moves backwards on an
|
|
65
|
+
* NTP correction, which makes an older claim look no-older-than a turn that
|
|
66
|
+
* began after it — and that turn's answer is then swallowed. Clamping the clock
|
|
67
|
+
* forward does not fix it either: after a rollback the clamp returns the
|
|
68
|
+
* previous maximum, so the stale claim and the new turn read the SAME value and
|
|
69
|
+
* a `>=` comparison still lets the claim through.
|
|
70
|
+
*
|
|
71
|
+
* A counter has no such failure: every call returns a value strictly greater
|
|
72
|
+
* than the last, so "recorded after this turn began" stays decidable whatever
|
|
73
|
+
* the system clock does. Timestamps stay on the record for the TTL only, where
|
|
74
|
+
* being wrong costs a duplicate instead of a silence.
|
|
75
|
+
*/
|
|
76
|
+
let sequence = 0;
|
|
77
|
+
export function nextDeliverySeq() {
|
|
78
|
+
sequence += 1;
|
|
79
|
+
return sequence;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* An anchor for a turn that has not started yet.
|
|
83
|
+
*
|
|
84
|
+
* A QUEUED turn must not anchor at enqueue time. The turn ahead of it is still
|
|
85
|
+
* running and can record a claim afterwards, which would then sort as "after
|
|
86
|
+
* this turn began" and suppress its answer — a silence. But the queued handler
|
|
87
|
+
* is a listener armed at queue time; it has no natural moment of its own.
|
|
88
|
+
*
|
|
89
|
+
* So the anchor is latched by the signal that the run actually started, and
|
|
90
|
+
* until that happens it reads as `Infinity` — an anchor nothing can be newer
|
|
91
|
+
* than, so nothing is suppressed. Both the unlatched and the mis-ordered case
|
|
92
|
+
* therefore fail toward posting.
|
|
93
|
+
*/
|
|
94
|
+
export function pendingDeliveryAnchor() {
|
|
95
|
+
let latched = null;
|
|
96
|
+
return {
|
|
97
|
+
latch() {
|
|
98
|
+
latched ??= nextDeliverySeq();
|
|
99
|
+
},
|
|
100
|
+
value() {
|
|
101
|
+
return latched ?? Number.POSITIVE_INFINITY;
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Compare-ready form of an outgoing message.
|
|
107
|
+
*
|
|
108
|
+
* Both sides of the comparison run this, so the transforms that differ between
|
|
109
|
+
* the two paths (trailing whitespace, blank-line runs, CRLF) cannot masquerade
|
|
110
|
+
* as a different message. It deliberately does NOT strip markdown or
|
|
111
|
+
* punctuation: two messages that differ only in emphasis are still two
|
|
112
|
+
* different messages, and treating them as one would suppress a real answer.
|
|
113
|
+
*/
|
|
114
|
+
export function normalizeDeliveryText(text) {
|
|
115
|
+
return text
|
|
116
|
+
.replace(/\r\n/g, '\n')
|
|
117
|
+
.replace(/[ \t]+$/gm, '')
|
|
118
|
+
.replace(/\n{3,}/g, '\n\n')
|
|
119
|
+
.trim();
|
|
120
|
+
}
|
|
121
|
+
/** Digest of the normalized text. Empty text has no digest: a send with nothing
|
|
122
|
+
* in it never suppresses anything. */
|
|
123
|
+
export function deliveryDigest(text) {
|
|
124
|
+
if (typeof text !== 'string')
|
|
125
|
+
return null;
|
|
126
|
+
const normalized = normalizeDeliveryText(text);
|
|
127
|
+
if (!normalized)
|
|
128
|
+
return null;
|
|
129
|
+
return createHash('sha256').update(normalized).digest('hex');
|
|
130
|
+
}
|
|
131
|
+
/** Key a target for comparison. Reuses the queue/session key so "same
|
|
132
|
+
* conversation" means the same thing here as everywhere else — including the
|
|
133
|
+
* thread-vs-channel distinction, which matters: a thread reply and a channel
|
|
134
|
+
* post are different destinations. */
|
|
135
|
+
export function deliveryTargetKey(target) {
|
|
136
|
+
if (!target?.channel || !target.targetId)
|
|
137
|
+
return null;
|
|
138
|
+
try {
|
|
139
|
+
return buildRemoteSessionKey(target);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function evict(now) {
|
|
146
|
+
// A rolled-back clock can make `now - at` negative; only a genuinely aged
|
|
147
|
+
// entry is dropped, and the size cap below bounds the rest regardless.
|
|
148
|
+
while (records.length && now - records[0].at > SELF_DELIVERY_TTL_MS)
|
|
149
|
+
records.shift();
|
|
150
|
+
while (records.length > MAX_TRACKED)
|
|
151
|
+
records.shift();
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Remember that the AGENT delivered something itself.
|
|
155
|
+
*
|
|
156
|
+
* Called only for sends that arrived over the HTTP surface an agent uses. The
|
|
157
|
+
* distinction is load-bearing: `sendChannelOutput` is also how heartbeats,
|
|
158
|
+
* reminders, alert escalation and the target-reply forwarder deliver, and
|
|
159
|
+
* recording those would let an unrelated background message suppress a real
|
|
160
|
+
* answer.
|
|
161
|
+
*/
|
|
162
|
+
export function recordSelfDelivery(input) {
|
|
163
|
+
const targetKey = deliveryTargetKey(input.target);
|
|
164
|
+
if (!targetKey)
|
|
165
|
+
return null;
|
|
166
|
+
const digest = deliveryDigest(input.text);
|
|
167
|
+
// A send with no text delivers nothing this module can match later: file
|
|
168
|
+
// bytes cannot be proven delivered from a path, so a file-only send records
|
|
169
|
+
// nothing rather than sitting in the table where it can only cause pressure.
|
|
170
|
+
if (!digest)
|
|
171
|
+
return null;
|
|
172
|
+
const now = input.now ?? Date.now();
|
|
173
|
+
const record = {
|
|
174
|
+
targetKey, channel: input.channel, digest,
|
|
175
|
+
seq: nextDeliverySeq(), at: now,
|
|
176
|
+
};
|
|
177
|
+
records.push(record);
|
|
178
|
+
evict(now);
|
|
179
|
+
return record;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Has THIS answer already been delivered to THIS conversation by the agent?
|
|
183
|
+
*
|
|
184
|
+
* Returns false for every uncertain case. The caller uses it to skip a
|
|
185
|
+
* redundant post, never to decide whether the turn succeeded.
|
|
186
|
+
*/
|
|
187
|
+
export function wasSelfDelivered(input) {
|
|
188
|
+
const targetKey = deliveryTargetKey(input.target);
|
|
189
|
+
const digest = deliveryDigest(input.text);
|
|
190
|
+
if (!targetKey || !digest || !Number.isFinite(input.since))
|
|
191
|
+
return false;
|
|
192
|
+
const now = input.now ?? Date.now();
|
|
193
|
+
evict(now);
|
|
194
|
+
const index = records.findIndex(record => record.targetKey === targetKey
|
|
195
|
+
&& record.digest === digest
|
|
196
|
+
&& record.seq > input.since
|
|
197
|
+
&& now - record.at <= SELF_DELIVERY_TTL_MS);
|
|
198
|
+
if (index === -1)
|
|
199
|
+
return false;
|
|
200
|
+
// Consumed, not merely read. A claim answers for exactly one post; leaving
|
|
201
|
+
// it in place would let one self-send suppress every later turn that
|
|
202
|
+
// happened to produce the same words.
|
|
203
|
+
records.splice(index, 1);
|
|
204
|
+
return true;
|
|
205
|
+
}
|
|
206
|
+
/** Test seam for the sequence. Never called in production paths. */
|
|
207
|
+
export function resetDeliverySeq() {
|
|
208
|
+
sequence = 0;
|
|
209
|
+
}
|
|
210
|
+
/** Test seam. Never called in production paths. */
|
|
211
|
+
export function resetTurnDeliveryState() {
|
|
212
|
+
records.length = 0;
|
|
213
|
+
}
|
|
214
|
+
/** Diagnostics only. */
|
|
215
|
+
export function trackedSelfDeliveries() {
|
|
216
|
+
return records.length;
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=turn-delivery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn-delivery.js","sourceRoot":"","sources":["../../../src/messaging/turn-delivery.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,30 @@ import { validateFileSize, sendTelegramFile } from '../telegram/telegram-file.js
|
|
|
12
12
|
import { assertSendFilePath } from '../security/path-guards.js';
|
|
13
13
|
import { decodeFilenameSafe } from '../security/decode.js';
|
|
14
14
|
import { sendChannelOutput, normalizeChannelSendRequest, validateExplicitChatId } from '../messaging/send.js';
|
|
15
|
+
import { recordSelfDelivery } from '../messaging/turn-delivery.js';
|
|
16
|
+
/**
|
|
17
|
+
* The claim address for a send made through the legacy `/api/telegram/send`.
|
|
18
|
+
*
|
|
19
|
+
* It must agree field-for-field with what `buildTelegramTarget` produces on the
|
|
20
|
+
* dispatch side, because the claim is keyed on the whole address: a key that
|
|
21
|
+
* disagrees is the same as no claim at all, and the duplicate simply survives.
|
|
22
|
+
*
|
|
23
|
+
* `peerKind` is the one field this route cannot observe, having no `Context` to
|
|
24
|
+
* read `chat.type` from. Telegram's own id convention settles it — group and
|
|
25
|
+
* supergroup ids are negative, private chats positive — which is the same
|
|
26
|
+
* distinction `isGroup` makes there. `threadId` follows the dispatch rule of
|
|
27
|
+
* ignoring the General topic (id 1).
|
|
28
|
+
*/
|
|
29
|
+
function telegramTargetForClaim(chatId, threadId) {
|
|
30
|
+
const targetId = String(chatId);
|
|
31
|
+
return stripUndefined({
|
|
32
|
+
channel: 'telegram',
|
|
33
|
+
targetKind: 'channel',
|
|
34
|
+
peerKind: targetId.startsWith('-') ? 'group' : 'direct',
|
|
35
|
+
targetId,
|
|
36
|
+
threadId: threadId !== undefined && threadId > 1 ? String(threadId) : undefined,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
15
39
|
import { validateChannelCredentials } from '../messaging/channel-validate.js';
|
|
16
40
|
import { sendResultHttpStatus } from '../messaging/send-result.js';
|
|
17
41
|
import { getSlackSendClient } from '../slack/send-only-client.js';
|
|
@@ -224,6 +248,15 @@ export function registerMessagingRoutes(app, requireAuth) {
|
|
|
224
248
|
return;
|
|
225
249
|
}
|
|
226
250
|
await sendClient.client.api.sendMessage(chatId, redactOutboundText(text), stripUndefined({ message_thread_id: messageThreadId }));
|
|
251
|
+
// This legacy route is still advertised to agents, and it talks to
|
|
252
|
+
// the Bot API directly instead of going through sendChannelOutput
|
|
253
|
+
// — so it needs its own claim, or an answer delivered here would
|
|
254
|
+
// be posted a second time when the turn settles.
|
|
255
|
+
recordSelfDelivery({
|
|
256
|
+
target: telegramTargetForClaim(chatId, messageThreadId),
|
|
257
|
+
channel: 'telegram',
|
|
258
|
+
text,
|
|
259
|
+
});
|
|
227
260
|
res.json({ ok: true, chat_id: chatId, type });
|
|
228
261
|
return;
|
|
229
262
|
}
|
|
@@ -248,6 +281,19 @@ export function registerMessagingRoutes(app, requireAuth) {
|
|
|
248
281
|
});
|
|
249
282
|
return;
|
|
250
283
|
}
|
|
284
|
+
// The FILE is never claimed: whether those bytes reached the user
|
|
285
|
+
// cannot be proven from a path later (see messaging/turn-delivery.ts).
|
|
286
|
+
// The caption is different — Telegram renders it as the message text
|
|
287
|
+
// under the upload, so the user can see it, and an answer equal to it
|
|
288
|
+
// would otherwise be posted a second time. Same rule the canonical
|
|
289
|
+
// route follows for file sends.
|
|
290
|
+
if (caption) {
|
|
291
|
+
recordSelfDelivery({
|
|
292
|
+
target: telegramTargetForClaim(chatId, messageThreadId),
|
|
293
|
+
channel: 'telegram',
|
|
294
|
+
text: caption,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
251
297
|
res.json({ ok: true, chat_id: chatId, type, attempts: result.attempts });
|
|
252
298
|
}
|
|
253
299
|
catch (e) {
|
|
@@ -277,7 +323,13 @@ export function registerMessagingRoutes(app, requireAuth) {
|
|
|
277
323
|
// Canonical channel send
|
|
278
324
|
app.post('/api/channel/send', requireAuth, async (req, res) => {
|
|
279
325
|
try {
|
|
280
|
-
|
|
326
|
+
// `fromAgentSurface` is set HERE rather than inside the normalizer:
|
|
327
|
+
// it is a fact about how the send arrived, not about its body, and
|
|
328
|
+
// an agent must not be able to claim it by putting a field in JSON.
|
|
329
|
+
const result = await sendChannelOutput({
|
|
330
|
+
...normalizeChannelSendRequest(req.body),
|
|
331
|
+
fromAgentSurface: true,
|
|
332
|
+
});
|
|
281
333
|
if (!result.ok) {
|
|
282
334
|
res.status(sendResultHttpStatus(result)).json(result);
|
|
283
335
|
return;
|
|
@@ -296,7 +348,11 @@ export function registerMessagingRoutes(app, requireAuth) {
|
|
|
296
348
|
});
|
|
297
349
|
app.post('/api/discord/send', requireAuth, async (req, res) => {
|
|
298
350
|
try {
|
|
299
|
-
const result = await sendChannelOutput({
|
|
351
|
+
const result = await sendChannelOutput({
|
|
352
|
+
...normalizeChannelSendRequest(req.body),
|
|
353
|
+
channel: 'discord',
|
|
354
|
+
fromAgentSurface: true,
|
|
355
|
+
});
|
|
300
356
|
if (!result.ok) {
|
|
301
357
|
res.status(sendResultHttpStatus(result)).json(result);
|
|
302
358
|
return;
|
|
@@ -313,7 +369,11 @@ export function registerMessagingRoutes(app, requireAuth) {
|
|
|
313
369
|
});
|
|
314
370
|
app.post('/api/slack/send', requireAuth, async (req, res) => {
|
|
315
371
|
try {
|
|
316
|
-
const result = await sendChannelOutput({
|
|
372
|
+
const result = await sendChannelOutput({
|
|
373
|
+
...normalizeChannelSendRequest(req.body),
|
|
374
|
+
channel: 'slack',
|
|
375
|
+
fromAgentSurface: true,
|
|
376
|
+
});
|
|
317
377
|
if (!result.ok) {
|
|
318
378
|
res.status(sendResultHttpStatus(result)).json(result);
|
|
319
379
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messaging.js","sourceRoot":"","sources":["../../../src/routes/messaging.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"messaging.js","sourceRoot":"","sources":["../../../src/routes/messaging.ts"],"names":[],"mappings":"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"}
|
package/dist/src/slack/bot.js
CHANGED
|
@@ -34,6 +34,7 @@ import { markThreadParticipated, threadParticipationKind, claimThreadPrefetch, c
|
|
|
34
34
|
import { sendSlackText, getSlackSendClient } from './send-only-client.js';
|
|
35
35
|
import { startSlackProgress, statusFromToolEvent } from './progress.js';
|
|
36
36
|
import { createSlackForwarder, relaySlackImages } from './forwarder.js';
|
|
37
|
+
import { nextDeliverySeq, pendingDeliveryAnchor, wasSelfDelivered } from '../messaging/turn-delivery.js';
|
|
37
38
|
import { handleSlackSlashCommand } from './commands.js';
|
|
38
39
|
import { logErrorText, redactOutboundText } from '../messaging/redact.js';
|
|
39
40
|
import { downloadAndSaveSlackFiles } from './inbound-file.js';
|
|
@@ -387,6 +388,10 @@ async function slackOrchestrate(target, prompt, displayMsg, signal, dedupe = {})
|
|
|
387
388
|
};
|
|
388
389
|
if (progress)
|
|
389
390
|
addBroadcastListener(progressHandler);
|
|
391
|
+
// Anchors the delivery claim below. Taken BEFORE the agent runs,
|
|
392
|
+
// so only a send made during THIS turn can suppress this turn's
|
|
393
|
+
// post — an identical answer from an earlier turn must not.
|
|
394
|
+
const turnStartedAt = nextDeliverySeq();
|
|
390
395
|
const text = String(await withSessionScope({ scope: ctx.scope, chatSessionId: ctx.chatSessionId }, () => orchestrateAndCollect(prompt, {
|
|
391
396
|
origin: 'slack', target, chatId, requestId: ctx.requestId,
|
|
392
397
|
...(ctx.remoteKey ? { remoteKey: ctx.remoteKey } : {}),
|
|
@@ -403,7 +408,17 @@ async function slackOrchestrate(target, prompt, displayMsg, signal, dedupe = {})
|
|
|
403
408
|
const outbound = slackOutboundRegistry.start();
|
|
404
409
|
let sendResult;
|
|
405
410
|
try {
|
|
406
|
-
|
|
411
|
+
// The agent may already have posted this exact answer itself
|
|
412
|
+
// through /api/channel/send while the turn was still running,
|
|
413
|
+
// in which case posting it again is the duplicate the user
|
|
414
|
+
// sees. Skipping the POST is all this does: the outcome below
|
|
415
|
+
// is still success, because the user has the answer — so the
|
|
416
|
+
// ACK still settles (#417) and the notice still closes as
|
|
417
|
+
// answered (#418), exactly as if we had sent it.
|
|
418
|
+
const alreadyDelivered = wasSelfDelivered({ target, text, since: turnStartedAt });
|
|
419
|
+
sendResult = alreadyDelivered
|
|
420
|
+
? { ok: true }
|
|
421
|
+
: await sendSlackText(token, target, text, { signal: outbound.signal });
|
|
407
422
|
// Recorded here, settled once in the finally below. The image
|
|
408
423
|
// relay can still throw after the text is out, and the user did
|
|
409
424
|
// get their answer in that case — so the outcome is success and
|
|
@@ -421,8 +436,16 @@ async function slackOrchestrate(target, prompt, displayMsg, signal, dedupe = {})
|
|
|
421
436
|
// while the answer is already visible (#417).
|
|
422
437
|
await ack?.settle(ackOutcome);
|
|
423
438
|
ackSettled = true;
|
|
439
|
+
// Relayed even when the text above was suppressed. Whether
|
|
440
|
+
// the agent already uploaded these bytes cannot be proven
|
|
441
|
+
// from a path (see turn-delivery.ts), and a skip that cannot
|
|
442
|
+
// be proven is a silent drop.
|
|
424
443
|
await relaySlackImages(token, target, text, { signal: outbound.signal });
|
|
425
|
-
|
|
444
|
+
// Logged either way, and labelled, because the previous
|
|
445
|
+
// silence here is what made the duplicate hard to see: only
|
|
446
|
+
// the dispatch post wrote [slack:out], so the log showed one
|
|
447
|
+
// delivery while the user had received two.
|
|
448
|
+
log.info(`[slack:out${alreadyDelivered ? ':skipped-self-delivered' : ''}] ${target.targetId}: ${redactOutboundText(text).slice(0, 80)}`);
|
|
426
449
|
}
|
|
427
450
|
finally {
|
|
428
451
|
outbound.done();
|
|
@@ -449,6 +472,22 @@ async function slackOrchestrate(target, prompt, displayMsg, signal, dedupe = {})
|
|
|
449
472
|
if (result.action === 'queued') {
|
|
450
473
|
log.info(`[slack:queue] agent busy, queued (${result.pending} pending)`);
|
|
451
474
|
const requestId = result.requestId;
|
|
475
|
+
// Anchored when this queued run STARTS, not when it was queued: the turn
|
|
476
|
+
// ahead of it is still running and can record a claim after this point,
|
|
477
|
+
// which would otherwise sort as "after this turn began" and swallow the
|
|
478
|
+
// queued answer. Until it latches it reads as Infinity, so nothing is
|
|
479
|
+
// suppressed. A restart loses claims entirely, which keeps the #407
|
|
480
|
+
// orphan delivery intact.
|
|
481
|
+
const queuedAnchor = pendingDeliveryAnchor();
|
|
482
|
+
const queuedRunStarted = (type, data) => {
|
|
483
|
+
// Keyed on THIS request. A scope-blind "an agent started" signal can
|
|
484
|
+
// fire for the turn ahead of this one, latching the anchor while that
|
|
485
|
+
// turn is still running — and a claim it records afterwards would then
|
|
486
|
+
// sort as newer than the anchor and swallow this answer.
|
|
487
|
+
if (type === 'queued_run_started' && data['requestId'] === requestId)
|
|
488
|
+
queuedAnchor.latch();
|
|
489
|
+
};
|
|
490
|
+
addBroadcastListener(queuedRunStarted);
|
|
452
491
|
let queueTimeout;
|
|
453
492
|
let disposed = false;
|
|
454
493
|
const notice = createQueueNotice({
|
|
@@ -461,6 +500,7 @@ async function slackOrchestrate(target, prompt, displayMsg, signal, dedupe = {})
|
|
|
461
500
|
disposed = true;
|
|
462
501
|
clearTimeout(queueTimeout);
|
|
463
502
|
removeBroadcastListener(queueHandler);
|
|
503
|
+
removeBroadcastListener(queuedRunStarted);
|
|
464
504
|
if (requestId)
|
|
465
505
|
pendingQueueRequestIds.delete(requestId);
|
|
466
506
|
};
|
|
@@ -528,8 +568,16 @@ async function slackOrchestrate(target, prompt, displayMsg, signal, dedupe = {})
|
|
|
528
568
|
const outbound = slackOutboundRegistry.start();
|
|
529
569
|
let queuedSendResult;
|
|
530
570
|
try {
|
|
571
|
+
// Same rule as the normal dispatch: if the queued agent
|
|
572
|
+
// already posted this answer itself, posting it again is
|
|
573
|
+
// the duplicate. The notice still closes as answered
|
|
574
|
+
// because the user does have the answer.
|
|
575
|
+
const alreadyDelivered = text
|
|
576
|
+
&& wasSelfDelivered({ target, text, since: queuedAnchor.value() });
|
|
531
577
|
queuedSendResult = text
|
|
532
|
-
?
|
|
578
|
+
? (alreadyDelivered
|
|
579
|
+
? { ok: true }
|
|
580
|
+
: await sendSlackText(token, target, text, { signal: outbound.signal }))
|
|
533
581
|
: { ok: false };
|
|
534
582
|
}
|
|
535
583
|
finally {
|
|
@@ -547,7 +595,9 @@ async function slackOrchestrate(target, prompt, displayMsg, signal, dedupe = {})
|
|
|
547
595
|
await ack?.settle(queuedSendResult.ok ? 'success' : 'failure');
|
|
548
596
|
if (text) {
|
|
549
597
|
const relayScope = slackOutboundRegistry.start();
|
|
550
|
-
await relaySlackImages(token, target, text, {
|
|
598
|
+
await relaySlackImages(token, target, text, {
|
|
599
|
+
signal: relayScope.signal
|
|
600
|
+
})
|
|
551
601
|
.catch(e => log.error('[slack:queue-send]', logErrorText(e)))
|
|
552
602
|
.finally(() => relayScope.done());
|
|
553
603
|
}
|