cli-jaw 2.2.18 → 2.2.20
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/README.md +106 -3
- package/dist/bin/cli-jaw.js +1 -1
- package/dist/bin/cli-jaw.js.map +1 -1
- package/dist/bin/commands/dispatch.js +14 -4
- package/dist/bin/commands/dispatch.js.map +1 -1
- package/dist/bin/commands/service.js +322 -222
- package/dist/bin/commands/service.js.map +1 -1
- package/dist/bin/postinstall.js +20 -4
- package/dist/bin/postinstall.js.map +1 -1
- package/dist/server.js +39 -2
- package/dist/server.js.map +1 -1
- package/dist/src/agent/spawn/process-kill.js +96 -2
- package/dist/src/agent/spawn/process-kill.js.map +1 -1
- package/dist/src/agent/spawn.js +35 -77
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/bgtask/runner.js +26 -21
- package/dist/src/bgtask/runner.js.map +1 -1
- package/dist/src/cli/acp-client.js +11 -5
- package/dist/src/cli/acp-client.js.map +1 -1
- package/dist/src/cli/cli-status-worker.js +59 -6
- package/dist/src/cli/cli-status-worker.js.map +1 -1
- package/dist/src/cli/employee-handler.js +3 -2
- package/dist/src/cli/employee-handler.js.map +1 -1
- package/dist/src/code-mode/acp-host.js +22 -10
- package/dist/src/code-mode/acp-host.js.map +1 -1
- package/dist/src/core/cli-detect.js +54 -8
- package/dist/src/core/cli-detect.js.map +1 -1
- package/dist/src/core/config.js +24 -0
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/db.js +16 -0
- package/dist/src/core/db.js.map +1 -1
- package/dist/src/core/employees.js +22 -4
- package/dist/src/core/employees.js.map +1 -1
- package/dist/src/core/instance-lifecycle.js +120 -0
- package/dist/src/core/instance-lifecycle.js.map +1 -0
- package/dist/src/core/runtime-path.js +92 -12
- package/dist/src/core/runtime-path.js.map +1 -1
- package/dist/src/core/runtime-settings.js +4 -1
- package/dist/src/core/runtime-settings.js.map +1 -1
- package/dist/src/core/settings-watch.js +12 -1
- package/dist/src/core/settings-watch.js.map +1 -1
- package/dist/src/core/windows-shell.js +63 -0
- package/dist/src/core/windows-shell.js.map +1 -0
- package/dist/src/discord/bot.js +199 -147
- package/dist/src/discord/bot.js.map +1 -1
- package/dist/src/discord/gateway-supervisor.js +303 -0
- package/dist/src/discord/gateway-supervisor.js.map +1 -0
- package/dist/src/discord/rest-scheduler.js +448 -0
- package/dist/src/discord/rest-scheduler.js.map +1 -0
- package/dist/src/discord/send-only-client.js +59 -43
- package/dist/src/discord/send-only-client.js.map +1 -1
- package/dist/src/manager/lifecycle.js +7 -2
- package/dist/src/manager/lifecycle.js.map +1 -1
- package/dist/src/manager/notes/capabilities.js +9 -7
- package/dist/src/manager/notes/capabilities.js.map +1 -1
- package/dist/src/memory/bootstrap.js +5 -1
- package/dist/src/memory/bootstrap.js.map +1 -1
- package/dist/src/memory/host-toolchain.js +156 -0
- package/dist/src/memory/host-toolchain.js.map +1 -0
- package/dist/src/messaging/channel-capabilities.js +30 -0
- package/dist/src/messaging/channel-capabilities.js.map +1 -0
- package/dist/src/messaging/delivery-outcome.js +73 -0
- package/dist/src/messaging/delivery-outcome.js.map +1 -0
- package/dist/src/messaging/draft-stream.js +154 -0
- package/dist/src/messaging/draft-stream.js.map +1 -0
- package/dist/src/messaging/runtime.js +3 -9
- package/dist/src/messaging/runtime.js.map +1 -1
- package/dist/src/messaging/send.js +40 -8
- package/dist/src/messaging/send.js.map +1 -1
- package/dist/src/messaging/types.js +22 -1
- package/dist/src/messaging/types.js.map +1 -1
- package/dist/src/notes/search.js +31 -6
- package/dist/src/notes/search.js.map +1 -1
- package/dist/src/prompt/builder.js +169 -13
- package/dist/src/prompt/builder.js.map +1 -1
- package/dist/src/prompt/conversation-context.js +23 -0
- package/dist/src/prompt/conversation-context.js.map +1 -0
- package/dist/src/prompt/templates/a1-system.md +28 -12
- package/dist/src/prompt/templates/control-system.md +19 -6
- package/dist/src/prompt/templates/employee.md +16 -3
- package/dist/src/routes/settings.js +8 -1
- package/dist/src/routes/settings.js.map +1 -1
- package/dist/src/routes/system.js +5 -1
- package/dist/src/routes/system.js.map +1 -1
- package/dist/src/routes/wiki.js +17 -12
- package/dist/src/routes/wiki.js.map +1 -1
- package/dist/src/search/coordinator.js +13 -5
- package/dist/src/search/coordinator.js.map +1 -1
- package/dist/src/search/provider.js.map +1 -1
- package/dist/src/search/providers/wiki.js +17 -9
- package/dist/src/search/providers/wiki.js.map +1 -1
- package/dist/src/security/path-guards.js +124 -27
- package/dist/src/security/path-guards.js.map +1 -1
- package/dist/src/slack/api.js +38 -5
- package/dist/src/slack/api.js.map +1 -1
- package/dist/src/slack/bot.js +214 -35
- package/dist/src/slack/bot.js.map +1 -1
- package/dist/src/slack/context.js +192 -0
- package/dist/src/slack/context.js.map +1 -0
- package/dist/src/slack/conversation.js +275 -0
- package/dist/src/slack/conversation.js.map +1 -0
- package/dist/src/slack/enrichment-cache.js +334 -0
- package/dist/src/slack/enrichment-cache.js.map +1 -0
- package/dist/src/slack/history.js +47 -8
- package/dist/src/slack/history.js.map +1 -1
- package/dist/src/slack/identity.js +99 -190
- package/dist/src/slack/identity.js.map +1 -1
- package/dist/src/slack/ingress.js +78 -2
- package/dist/src/slack/ingress.js.map +1 -1
- package/dist/src/slack/manifest.js +14 -3
- package/dist/src/slack/manifest.js.map +1 -1
- package/dist/src/slack/progress.js +39 -51
- package/dist/src/slack/progress.js.map +1 -1
- package/dist/src/slack/thread-tracker.js +78 -0
- package/dist/src/slack/thread-tracker.js.map +1 -1
- package/dist/src/telegram/bot.js +105 -56
- package/dist/src/telegram/bot.js.map +1 -1
- package/dist/src/telegram/update-offset.js +152 -0
- package/dist/src/telegram/update-offset.js.map +1 -0
- package/dist/src/wiki/config.js +42 -14
- package/dist/src/wiki/config.js.map +1 -1
- package/dist/src/wiki/prompt.js +2 -2
- package/dist/src/wiki/prompt.js.map +1 -1
- package/package.json +1 -1
- package/public/dist/assets/Agent-C5EvX-_v.js +1 -0
- package/public/dist/assets/{app-DqSJmDwP.js → app-is76CHGZ.js} +4 -4
- package/public/dist/assets/{bgtask-badge-D6XYRFI5.js → bgtask-badge-B0B1nXUs.js} +1 -1
- package/public/dist/assets/bgtask-badge-B2jUZ5mC.js +1 -0
- package/public/dist/assets/{employees-B_wKPfTO.js → employees-eiW0cC8z.js} +1 -1
- package/public/dist/assets/{iframe-renderer-D1-zDg8V.js → iframe-renderer-C7qQJX4c.js} +2 -2
- package/public/dist/assets/iframe-renderer-D7PB_yrC.js +1 -0
- package/public/dist/assets/{manager-Bjuh1jpq.js → manager-CP-Au860.js} +1 -1
- package/public/dist/assets/{memory-CNUpXWEC.js → memory--Q8Tb5SZ.js} +1 -1
- package/public/dist/assets/memory-rsKN0aa2.js +1 -0
- package/public/dist/assets/message-history-BttkY77h.js +1 -0
- package/public/dist/assets/{message-history-DB1rynP-.js → message-history-CfAHmCDW.js} +1 -1
- package/public/dist/assets/{render-DXwQzjsJ.js → render-BDso7Yb5.js} +1 -1
- package/public/dist/assets/{settings-CXndjCad.js → settings-CqnIqxkG.js} +1 -1
- package/public/dist/assets/{settings-core-t5yYVRrv.js → settings-core-BxuFkt4a.js} +4 -4
- package/public/dist/assets/settings-core-CdZ7oKhM.js +1 -0
- package/public/dist/assets/settings-pPMHNs0G.js +1 -0
- package/public/dist/assets/{sidebar-DgIj-LuT.js → sidebar-BNT58qR0.js} +3 -3
- package/public/dist/assets/{skills-QqxjqDHg.js → skills-CwRBcm3m.js} +1 -1
- package/public/dist/assets/skills-DiVoaVdS.js +1 -0
- package/public/dist/assets/slash-commands-Bx4saHwR.js +1 -0
- package/public/dist/assets/{slash-commands-B2V_jngP.js → slash-commands-cm0U58n7.js} +1 -1
- package/public/dist/assets/{trace-drawer-CBe9nRjS.js → trace-drawer-BuwO4m2P.js} +1 -1
- package/public/dist/assets/{ui-CDozpEQt.js → ui-C-LHMki1.js} +1 -1
- package/public/dist/assets/ui-XPQDPe-5.js +1 -0
- package/public/dist/index.html +1 -1
- package/public/dist/manager/index.html +1 -1
- package/public/js/features/channel-onboarding.ts +8 -5
- package/public/locales/en.json +3 -2
- package/public/locales/ja.json +3 -2
- package/public/locales/ko.json +3 -2
- package/public/locales/zh.json +3 -2
- package/public/manager/src/settings/cli-status-polling.ts +84 -0
- package/public/manager/src/settings/pages/Agent.tsx +84 -5
- package/scripts/install-officecli.ps1 +38 -2
- package/scripts/install-officecli.sh +28 -0
- package/scripts/install.ps1 +1 -1
- package/public/dist/assets/Agent-nMPZsMfN.js +0 -1
- package/public/dist/assets/bgtask-badge-CjWz0F6U.js +0 -1
- package/public/dist/assets/iframe-renderer-qRVLHPnT.js +0 -1
- package/public/dist/assets/memory-CcWGiPy_.js +0 -1
- package/public/dist/assets/message-history-BamMPUnL.js +0 -1
- package/public/dist/assets/settings-RGpifFHy.js +0 -1
- package/public/dist/assets/settings-core-X_5UHfr3.js +0 -1
- package/public/dist/assets/skills-CbwIimit.js +0 -1
- package/public/dist/assets/slash-commands-tCNRlNTC.js +0 -1
- package/public/dist/assets/ui-o-VpvrSv.js +0 -1
|
@@ -14,6 +14,7 @@ import { settings } from '../core/config.js';
|
|
|
14
14
|
import { log } from '../core/logger.js';
|
|
15
15
|
import { slackApi, describeSlackError, neededScopeFrom } from './api.js';
|
|
16
16
|
import { getSlackSendClient } from './send-only-client.js';
|
|
17
|
+
import { EnrichmentCache } from './enrichment-cache.js';
|
|
17
18
|
const DEFAULT_TTL_MS = 6 * 60 * 60 * 1000;
|
|
18
19
|
const MIN_TTL_MS = 60 * 1000;
|
|
19
20
|
const MAX_TTL_MS = 7 * 24 * 60 * 60 * 1000;
|
|
@@ -37,20 +38,39 @@ const NEGATIVE_TTL_NOT_FOUND_MS = 10 * 60 * 1000;
|
|
|
37
38
|
* fingerprint never moves and the flag would never lift (010 §R2-2).
|
|
38
39
|
*/
|
|
39
40
|
const CAPABILITY_REPROBE_MS = 30 * 60 * 1000;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
/**
|
|
42
|
+
* ONE capability key for both users.info and bots.info.
|
|
43
|
+
*
|
|
44
|
+
* This preserves today's behavior deliberately: identity has always used a
|
|
45
|
+
* single global latch, so a missing users:read also suppresses bot lookups
|
|
46
|
+
* (both need the same scope). Splitting it per method would be a silent
|
|
47
|
+
* behavior change — see the characterization test that pins the shared latch.
|
|
48
|
+
*/
|
|
49
|
+
const CAPABILITY_KEY = 'identity:capability';
|
|
45
50
|
let missingScopeWarned = false;
|
|
46
51
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
52
|
+
* Partitions keep user and bot identities in separate keyspaces, each with its
|
|
53
|
+
* own CACHE_CAP. Merging them would halve the effective capacity and change
|
|
54
|
+
* eviction order.
|
|
50
55
|
*/
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
const identityCache = new EnrichmentCache({
|
|
57
|
+
partitions: {
|
|
58
|
+
user: { ttlMs, cap: CACHE_CAP },
|
|
59
|
+
bot: { ttlMs, cap: CACHE_CAP },
|
|
60
|
+
},
|
|
61
|
+
suppressionCap: CACHE_CAP,
|
|
62
|
+
classifyFailure: (error, ctx) => {
|
|
63
|
+
if (error === 'missing_scope') {
|
|
64
|
+
return { kind: 'capability', key: CAPABILITY_KEY, ttlMs: CAPABILITY_REPROBE_MS };
|
|
65
|
+
}
|
|
66
|
+
// Keyed per identity: one unknown user must not suppress anyone else.
|
|
67
|
+
return {
|
|
68
|
+
kind: 'resource',
|
|
69
|
+
key: ctx.resourceKey,
|
|
70
|
+
ttlMs: error === 'not_found' ? NEGATIVE_TTL_NOT_FOUND_MS : NEGATIVE_TTL_TRANSIENT_MS,
|
|
71
|
+
};
|
|
72
|
+
},
|
|
73
|
+
});
|
|
54
74
|
function ttlMs() {
|
|
55
75
|
const raw = Number(settings['slack']?.identityCacheTtlMs);
|
|
56
76
|
if (!Number.isFinite(raw) || raw <= 0)
|
|
@@ -63,79 +83,6 @@ function cacheKey(teamId, id) {
|
|
|
63
83
|
// workspace, which initSlack can do without a process restart.
|
|
64
84
|
return `${teamId || 'unknown'}:${id}`;
|
|
65
85
|
}
|
|
66
|
-
/**
|
|
67
|
-
* Drop the oldest half once a map exceeds the cap.
|
|
68
|
-
*
|
|
69
|
-
* `expiryOf` is explicit rather than assumed: the negative cache stores bare
|
|
70
|
-
* timestamps while the identity caches store entry objects, and casting one to
|
|
71
|
-
* the other made every comparison read `undefined` — the sort silently did
|
|
72
|
-
* nothing and eviction became arbitrary.
|
|
73
|
-
*/
|
|
74
|
-
function trimTo(map, expiryOf) {
|
|
75
|
-
if (map.size <= CACHE_CAP)
|
|
76
|
-
return;
|
|
77
|
-
const entries = [...map.entries()].sort((a, b) => expiryOf(a[1]) - expiryOf(b[1]));
|
|
78
|
-
for (const [key] of entries.slice(0, Math.floor(map.size / 2)))
|
|
79
|
-
map.delete(key);
|
|
80
|
-
}
|
|
81
|
-
const entryExpiry = (entry) => entry.expiresAt;
|
|
82
|
-
const rawExpiry = (until) => until;
|
|
83
|
-
function readCache(map, key) {
|
|
84
|
-
const hit = map.get(key);
|
|
85
|
-
if (!hit)
|
|
86
|
-
return undefined;
|
|
87
|
-
// Lazy expiry only. A sweep timer would keep the event loop alive and delay
|
|
88
|
-
// process exit (same class of bug as the ingress drain timer).
|
|
89
|
-
if (hit.expiresAt <= Date.now()) {
|
|
90
|
-
map.delete(key);
|
|
91
|
-
return undefined;
|
|
92
|
-
}
|
|
93
|
-
return hit.identity;
|
|
94
|
-
}
|
|
95
|
-
function writeCache(map, key, identity) {
|
|
96
|
-
map.set(key, { identity, expiresAt: Date.now() + ttlMs() });
|
|
97
|
-
trimTo(map, entryExpiry);
|
|
98
|
-
}
|
|
99
|
-
function isNegative(key) {
|
|
100
|
-
const until = negativeCache.get(key);
|
|
101
|
-
if (until === undefined)
|
|
102
|
-
return false;
|
|
103
|
-
if (until <= Date.now()) {
|
|
104
|
-
negativeCache.delete(key);
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
107
|
-
return true;
|
|
108
|
-
}
|
|
109
|
-
function markNegative(key, windowMs) {
|
|
110
|
-
negativeCache.set(key, Date.now() + windowMs);
|
|
111
|
-
trimTo(negativeCache, rawExpiry);
|
|
112
|
-
}
|
|
113
|
-
function capabilityDisabled() {
|
|
114
|
-
return capabilityDisabledUntil > Date.now();
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* True when this caller must degrade instead of calling Slack.
|
|
118
|
-
*
|
|
119
|
-
* Once the lock expires, exactly ONE caller is allowed through to re-probe.
|
|
120
|
-
* Letting every concurrent lookup through would restore the per-message API
|
|
121
|
-
* storm the lock exists to prevent, since none of them has answered yet.
|
|
122
|
-
*/
|
|
123
|
-
function shouldSkipLookup() {
|
|
124
|
-
if (capabilityDisabled())
|
|
125
|
-
return true;
|
|
126
|
-
if (!capabilityDisabledUntil)
|
|
127
|
-
return false;
|
|
128
|
-
// The lock has lapsed: the first caller probes, everyone else degrades.
|
|
129
|
-
if (capabilityProbeInFlight)
|
|
130
|
-
return true;
|
|
131
|
-
capabilityProbeInFlight = true;
|
|
132
|
-
return false;
|
|
133
|
-
}
|
|
134
|
-
/** A probe proved the scope is back. Unlock fully. */
|
|
135
|
-
function clearCapabilityLock() {
|
|
136
|
-
capabilityDisabledUntil = 0;
|
|
137
|
-
capabilityProbeInFlight = false;
|
|
138
|
-
}
|
|
139
86
|
/**
|
|
140
87
|
* Normalize an attacker-controlled name into something that cannot forge the
|
|
141
88
|
* structure of a prompt context line.
|
|
@@ -243,9 +190,6 @@ export function identityFromEvent(event) {
|
|
|
243
190
|
return ref;
|
|
244
191
|
}
|
|
245
192
|
function noteMissingScope(data) {
|
|
246
|
-
capabilityDisabledUntil = Date.now() + CAPABILITY_REPROBE_MS;
|
|
247
|
-
// The probe answered: re-latched, so the next lapse gets a fresh single probe.
|
|
248
|
-
capabilityProbeInFlight = false;
|
|
249
193
|
if (missingScopeWarned)
|
|
250
194
|
return;
|
|
251
195
|
missingScopeWarned = true;
|
|
@@ -254,32 +198,29 @@ function noteMissingScope(data) {
|
|
|
254
198
|
log.warn(`[slack:identity] ${describeSlackError('missing_scope', data)} (needed: ${needed}) — `
|
|
255
199
|
+ 'sender names degrade to raw ids until the app is reinstalled');
|
|
256
200
|
}
|
|
257
|
-
async function lookupUser(token, userId, opts, generation
|
|
201
|
+
async function lookupUser(token, userId, opts, generation) {
|
|
258
202
|
const result = await slackApi(token, 'users.info', { user: userId }, {
|
|
259
203
|
form: true,
|
|
260
204
|
timeoutMs: opts.timeoutMs ?? LOOKUP_TIMEOUT_MS,
|
|
261
205
|
...(opts.fetchImpl ? { fetchImpl: opts.fetchImpl } : {}),
|
|
262
206
|
});
|
|
263
207
|
if (result.ok && result.data?.user) {
|
|
264
|
-
|
|
265
|
-
clearCapabilityLock();
|
|
266
|
-
return identityFromUser(result.data.user, userId);
|
|
208
|
+
return { ok: true, value: identityFromUser(result.data.user, userId) };
|
|
267
209
|
}
|
|
268
|
-
//
|
|
269
|
-
//
|
|
270
|
-
if (
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
210
|
+
// The cache owns suppression windows and the probe slot; this only names the
|
|
211
|
+
// failure class. Generation guarding also lives there.
|
|
212
|
+
if (result.error === 'missing_scope') {
|
|
213
|
+
// Only a CURRENT-generation failure may consume the warn-once latch. A
|
|
214
|
+
// stale lookup (issued under the previous token) would otherwise re-arm
|
|
215
|
+
// it after a reset cleared it, silencing the real warning for the new
|
|
216
|
+
// workspace.
|
|
217
|
+
if (generation === identityCache.currentGeneration())
|
|
218
|
+
noteMissingScope(result.data);
|
|
219
|
+
return { ok: false, error: 'missing_scope' };
|
|
276
220
|
}
|
|
277
|
-
|
|
278
|
-
markNegative(cacheKey(opts.teamId, userId), NEGATIVE_TTL_TRANSIENT_MS);
|
|
279
|
-
}
|
|
280
|
-
return degraded(userId, 'user');
|
|
221
|
+
return { ok: false, error: result.error === 'user_not_found' ? 'not_found' : 'transient' };
|
|
281
222
|
}
|
|
282
|
-
async function lookupBot(token, botId, opts, generation
|
|
223
|
+
async function lookupBot(token, botId, opts, generation) {
|
|
283
224
|
const result = await slackApi(token, 'bots.info', { bot: botId }, {
|
|
284
225
|
form: true,
|
|
285
226
|
timeoutMs: opts.timeoutMs ?? LOOKUP_TIMEOUT_MS,
|
|
@@ -287,22 +228,23 @@ async function lookupBot(token, botId, opts, generation = cacheGeneration) {
|
|
|
287
228
|
});
|
|
288
229
|
const name = result.data?.bot?.name;
|
|
289
230
|
if (result.ok && name) {
|
|
290
|
-
clearCapabilityLock();
|
|
291
231
|
return {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
232
|
+
ok: true,
|
|
233
|
+
value: {
|
|
234
|
+
id: botId,
|
|
235
|
+
name: sanitizeIdentityName(name, botId),
|
|
236
|
+
kind: 'bot',
|
|
237
|
+
isBot: true,
|
|
238
|
+
resolved: true,
|
|
239
|
+
},
|
|
297
240
|
};
|
|
298
241
|
}
|
|
299
|
-
if (
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
return degraded(botId, 'bot');
|
|
242
|
+
if (result.error === 'missing_scope') {
|
|
243
|
+
if (generation === identityCache.currentGeneration())
|
|
244
|
+
noteMissingScope(result.data);
|
|
245
|
+
return { ok: false, error: 'missing_scope' };
|
|
246
|
+
}
|
|
247
|
+
return { ok: false, error: 'transient' };
|
|
306
248
|
}
|
|
307
249
|
/**
|
|
308
250
|
* Resolve one author.
|
|
@@ -329,76 +271,35 @@ export async function resolveSlackIdentity(token, ref, opts) {
|
|
|
329
271
|
};
|
|
330
272
|
}
|
|
331
273
|
const key = cacheKey(opts.teamId, id);
|
|
332
|
-
const
|
|
333
|
-
const
|
|
334
|
-
if (cached)
|
|
335
|
-
return cached;
|
|
336
|
-
if (shouldSkipLookup() || isNegative(key)) {
|
|
337
|
-
return degraded(id, isBot ? 'bot' : 'user', ref.inlineName);
|
|
338
|
-
}
|
|
274
|
+
const kind = isBot ? 'bot' : 'user';
|
|
275
|
+
const fallback = () => degraded(id, kind, ref.inlineName);
|
|
339
276
|
if (!token)
|
|
340
|
-
return
|
|
341
|
-
//
|
|
342
|
-
//
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
const generation = cacheGeneration;
|
|
356
|
-
const request = (isBot ? lookupBot(token, id, opts, generation) : lookupUser(token, id, opts, generation))
|
|
357
|
-
.catch(() => degraded(id, isBot ? 'bot' : 'user'))
|
|
358
|
-
.then(identity => {
|
|
359
|
-
if (identity.resolved && generation === cacheGeneration) {
|
|
360
|
-
writeCache(cache, key, identity);
|
|
361
|
-
}
|
|
362
|
-
return identity;
|
|
363
|
-
})
|
|
364
|
-
.finally(() => {
|
|
365
|
-
// Only clear the slot if it is still OURS. A reset plus a new
|
|
366
|
-
// request can install a replacement, and deleting that would
|
|
367
|
-
// strand its waiters behind a lookup nobody tracks.
|
|
368
|
-
if (inFlight.get(key) === request)
|
|
369
|
-
inFlight.delete(key);
|
|
370
|
-
});
|
|
371
|
-
pending = request;
|
|
372
|
-
inFlight.set(key, pending);
|
|
373
|
-
}
|
|
374
|
-
const identity = await raceSignal(pending, opts.signal, () => degraded(id, isBot ? 'bot' : 'user', ref.inlineName));
|
|
277
|
+
return fallback();
|
|
278
|
+
// Everything below — cache read, negative/capability suppression, the single
|
|
279
|
+
// re-probe, coalescing, per-caller cancellation and generation guarding —
|
|
280
|
+
// belongs to the shared primitive. This adapter supplies only the Slack call
|
|
281
|
+
// and what its failures mean.
|
|
282
|
+
const identity = await identityCache.resolve({
|
|
283
|
+
partition: kind,
|
|
284
|
+
resourceKey: key,
|
|
285
|
+
capabilityKey: CAPABILITY_KEY,
|
|
286
|
+
...(opts.signal ? { signal: opts.signal } : {}),
|
|
287
|
+
load: ({ generation }) => (isBot
|
|
288
|
+
? lookupBot(token, id, opts, generation)
|
|
289
|
+
: lookupUser(token, id, opts, generation)),
|
|
290
|
+
degraded: fallback,
|
|
291
|
+
});
|
|
375
292
|
if (identity.resolved)
|
|
376
293
|
return identity;
|
|
377
|
-
// Degraded upstream: the inline hint is the last resort, still
|
|
378
|
-
return
|
|
379
|
-
}
|
|
380
|
-
function raceSignal(work, signal, onAbort) {
|
|
381
|
-
if (!signal)
|
|
382
|
-
return work;
|
|
383
|
-
if (signal.aborted)
|
|
384
|
-
return Promise.resolve(onAbort());
|
|
385
|
-
return new Promise(resolve => {
|
|
386
|
-
const finish = (value) => {
|
|
387
|
-
signal.removeEventListener('abort', abortHandler);
|
|
388
|
-
resolve(value);
|
|
389
|
-
};
|
|
390
|
-
// Abort is a quiet cancel, not a failure: no warning and no negative cache.
|
|
391
|
-
const abortHandler = () => finish(onAbort());
|
|
392
|
-
signal.addEventListener('abort', abortHandler, { once: true });
|
|
393
|
-
void work.then(finish, () => finish(onAbort()));
|
|
394
|
-
});
|
|
294
|
+
// Degraded upstream: the inline hint is the last resort, still unresolved.
|
|
295
|
+
return fallback();
|
|
395
296
|
}
|
|
396
297
|
/** Cache-only read. Never calls the API; misses are simply absent from the map. */
|
|
397
298
|
export function getCachedSlackIdentities(teamId, ids) {
|
|
398
299
|
const out = new Map();
|
|
399
300
|
for (const id of ids) {
|
|
400
301
|
const key = cacheKey(teamId, id);
|
|
401
|
-
const hit =
|
|
302
|
+
const hit = identityCache.get('user', key) ?? identityCache.get('bot', key);
|
|
402
303
|
if (hit)
|
|
403
304
|
out.set(id, hit);
|
|
404
305
|
}
|
|
@@ -411,7 +312,7 @@ export function primeSlackIdentityCache(teamId, users) {
|
|
|
411
312
|
if (!user?.id)
|
|
412
313
|
continue;
|
|
413
314
|
const identity = identityFromUser(user, user.id);
|
|
414
|
-
|
|
315
|
+
identityCache.prime(identity.isBot ? 'bot' : 'user', cacheKey(teamId, user.id), identity);
|
|
415
316
|
stored += 1;
|
|
416
317
|
}
|
|
417
318
|
return stored;
|
|
@@ -432,7 +333,7 @@ export async function resolveSlackIdentities(token, refs, opts) {
|
|
|
432
333
|
const id = ref.userId || ref.botId;
|
|
433
334
|
if (!id)
|
|
434
335
|
continue;
|
|
435
|
-
const cached =
|
|
336
|
+
const cached = identityCache.get(ref.botId && !ref.userId ? 'bot' : 'user', cacheKey(opts.teamId, id));
|
|
436
337
|
if (cached)
|
|
437
338
|
identities.set(id, cached);
|
|
438
339
|
else
|
|
@@ -526,12 +427,26 @@ export function buildSenderDisplay(identity, text) {
|
|
|
526
427
|
return `[👤 ${identity.name}] ${text}`.trim();
|
|
527
428
|
}
|
|
528
429
|
export function slackIdentityCacheStats() {
|
|
529
|
-
|
|
430
|
+
const stats = identityCache.stats();
|
|
431
|
+
return { users: stats.entries.user, bots: stats.entries.bot, negative: stats.suppressed };
|
|
530
432
|
}
|
|
531
433
|
/** Test hook: drive the capability lock without waiting out its 30-minute TTL. */
|
|
532
434
|
export function setCapabilityLockForTest(until) {
|
|
533
|
-
|
|
534
|
-
|
|
435
|
+
// A lock in the past is the "lapsed" state: the next caller becomes the
|
|
436
|
+
// single re-probe. A future value suppresses everyone.
|
|
437
|
+
identityCache.clearCapability(CAPABILITY_KEY);
|
|
438
|
+
identityCache.suppress(CAPABILITY_KEY, until - Date.now());
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Test hook: has the once-per-process missing-scope warning already fired?
|
|
442
|
+
*
|
|
443
|
+
* Exposed because the latch is otherwise unobservable, which let a test assert
|
|
444
|
+
* the wrong thing — it checked that a lookup still ran, which stays true even
|
|
445
|
+
* when a stale response silently consumes the latch and suppresses the real
|
|
446
|
+
* warning for the next workspace.
|
|
447
|
+
*/
|
|
448
|
+
export function missingScopeWarnedForTest() {
|
|
449
|
+
return missingScopeWarned;
|
|
535
450
|
}
|
|
536
451
|
/**
|
|
537
452
|
* Drop every cached identity. Wired to the Slack runtime lifecycle so a workspace
|
|
@@ -541,13 +456,7 @@ export function setCapabilityLockForTest(until) {
|
|
|
541
456
|
export function resetSlackIdentityCache() {
|
|
542
457
|
// Invalidate in-flight work first so late results cannot repopulate what we
|
|
543
458
|
// are about to clear.
|
|
544
|
-
|
|
545
|
-
userCache.clear();
|
|
546
|
-
botCache.clear();
|
|
547
|
-
negativeCache.clear();
|
|
548
|
-
inFlight.clear();
|
|
549
|
-
capabilityDisabledUntil = 0;
|
|
550
|
-
capabilityProbeInFlight = false;
|
|
459
|
+
identityCache.reset();
|
|
551
460
|
missingScopeWarned = false;
|
|
552
461
|
}
|
|
553
462
|
//# sourceMappingURL=identity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/slack/identity.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/slack/identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,9 @@ import { channelGateOn, scopeForChatSession } from '../orchestrator/scope.js';
|
|
|
4
4
|
import { submitMessage } from '../orchestrator/gateway.js';
|
|
5
5
|
import { sessionLanes } from '../orchestrator/session-lanes.js';
|
|
6
6
|
import { buildRemoteBindingKey } from '../messaging/session-key.js';
|
|
7
|
+
import { clearSlackEventDedup, findSlackEventDedup, insertSlackEventDedup, sweepSlackEventDedup, } from '../core/db.js';
|
|
8
|
+
import { log } from '../core/logger.js';
|
|
9
|
+
import { logErrorText } from '../messaging/redact.js';
|
|
7
10
|
const ingressTails = new Map();
|
|
8
11
|
const controllers = new Set();
|
|
9
12
|
const tracked = new Set();
|
|
@@ -32,25 +35,97 @@ const seenEvents = new Map();
|
|
|
32
35
|
export function slackEventKey(teamId, channel, ts) {
|
|
33
36
|
return `${teamId || 'unknown'}:${channel}:${ts}`;
|
|
34
37
|
}
|
|
35
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* RESERVE, not commit (#321). Returns true when this delivery was already
|
|
40
|
+
* handled and the caller should drop it.
|
|
41
|
+
*
|
|
42
|
+
* The reservation is in memory so the same-tick test-and-set stays atomic, and
|
|
43
|
+
* it is checked against the durable record so a runtime that restarted before
|
|
44
|
+
* Slack observed our ACK does not run the redelivery a second time.
|
|
45
|
+
*
|
|
46
|
+
* Deliberately NOT durable at this point: the caller has an `await` and several
|
|
47
|
+
* early returns between here and admission, and Socket Mode acks before doing
|
|
48
|
+
* any work. Writing durably here would turn a recoverable redelivery into a
|
|
49
|
+
* ten-minute silent message loss — duplication is visible and cancellable, a
|
|
50
|
+
* vanished message is not.
|
|
51
|
+
*/
|
|
36
52
|
export function claimSlackEvent(key) {
|
|
37
53
|
const now = Date.now();
|
|
38
54
|
const seenAt = seenEvents.get(key);
|
|
39
55
|
if (seenAt !== undefined && seenAt > now)
|
|
40
56
|
return true;
|
|
57
|
+
if (isSlackEventCommitted(key, now))
|
|
58
|
+
return true;
|
|
41
59
|
// Lazy sweep of expired keys only — no timer, so the loop can still exit.
|
|
42
60
|
if (seenEvents.size > 500) {
|
|
43
61
|
for (const [candidate, expiry] of seenEvents) {
|
|
44
62
|
if (expiry <= now)
|
|
45
63
|
seenEvents.delete(candidate);
|
|
46
64
|
}
|
|
65
|
+
sweepCommittedSlackEvents(now);
|
|
47
66
|
}
|
|
48
67
|
seenEvents.set(key, now + EVENT_DEDUP_TTL_MS);
|
|
49
68
|
return false;
|
|
50
69
|
}
|
|
70
|
+
function isSlackEventCommitted(key, now) {
|
|
71
|
+
try {
|
|
72
|
+
const row = findSlackEventDedup.get(key);
|
|
73
|
+
return typeof row?.expires_at === 'number' && row.expires_at > now;
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
// A broken dedupe store must never stop us receiving messages.
|
|
77
|
+
log.warn('[slack:dedupe] durable read failed:', logErrorText(error));
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function sweepCommittedSlackEvents(now) {
|
|
82
|
+
try {
|
|
83
|
+
sweepSlackEventDedup.run(now);
|
|
84
|
+
}
|
|
85
|
+
catch { /* best-effort cleanup; expiry is enforced on read anyway */ }
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* COMMIT. Called only once a run has actually been admitted, so an event that
|
|
89
|
+
* died before admission is still redeliverable.
|
|
90
|
+
*
|
|
91
|
+
* Fail-open by design: if the write throws, the run is already accepted and
|
|
92
|
+
* cancelling it would risk losing the message. Duplication after a restart is
|
|
93
|
+
* the honest failure direction here.
|
|
94
|
+
*/
|
|
95
|
+
export function commitSlackEvent(key) {
|
|
96
|
+
const expiresAt = Date.now() + EVENT_DEDUP_TTL_MS;
|
|
97
|
+
seenEvents.set(key, expiresAt);
|
|
98
|
+
try {
|
|
99
|
+
insertSlackEventDedup.run(key, expiresAt);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
log.warn('[slack:dedupe] durable commit failed:', logErrorText(error));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Clears the in-memory reservations only. The durable record is what makes a
|
|
107
|
+
* restart safe, so wiping it here would reintroduce #321; it expires by TTL.
|
|
108
|
+
*/
|
|
51
109
|
export function resetSlackEventDedup() {
|
|
52
110
|
seenEvents.clear();
|
|
53
111
|
}
|
|
112
|
+
/** Test-only: drops the durable record too. */
|
|
113
|
+
export function clearSlackEventDedupForTest() {
|
|
114
|
+
seenEvents.clear();
|
|
115
|
+
try {
|
|
116
|
+
clearSlackEventDedup.run();
|
|
117
|
+
}
|
|
118
|
+
catch { /* table may not exist in a bare fixture */ }
|
|
119
|
+
}
|
|
120
|
+
/** The ingress lifecycle counter, captured at reserve time and revalidated
|
|
121
|
+
* before admission: a reset in between means this delivery belongs to a dead
|
|
122
|
+
* generation and must not be admitted (a redelivery already re-reserved it). */
|
|
123
|
+
export function currentIngressGeneration() {
|
|
124
|
+
return generation;
|
|
125
|
+
}
|
|
126
|
+
export function isIngressGenerationCurrent(captured) {
|
|
127
|
+
return captured === generation;
|
|
128
|
+
}
|
|
54
129
|
function downloadLimit() {
|
|
55
130
|
const value = Number(settings["slack"]?.inboundDownloadConcurrency ?? 6);
|
|
56
131
|
return Number.isInteger(value) && value >= 1 && value <= 32 ? value : 6;
|
|
@@ -97,7 +172,7 @@ export function slackIngressLaneKey(target) {
|
|
|
97
172
|
}
|
|
98
173
|
export function enqueueSlackIngress(laneKey, task) {
|
|
99
174
|
if (resetting)
|
|
100
|
-
return;
|
|
175
|
+
return false;
|
|
101
176
|
const taskGeneration = generation;
|
|
102
177
|
const controller = new AbortController();
|
|
103
178
|
controllers.add(controller);
|
|
@@ -119,6 +194,7 @@ export function enqueueSlackIngress(laneKey, task) {
|
|
|
119
194
|
if (ingressTails.get(laneKey) === tail)
|
|
120
195
|
ingressTails.delete(laneKey);
|
|
121
196
|
});
|
|
197
|
+
return true;
|
|
122
198
|
}
|
|
123
199
|
export function admitSlackRun(params) {
|
|
124
200
|
const multiSessionEnabled = settings["multiSession"]?.enabled === true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingress.js","sourceRoot":"","sources":["../../../src/slack/ingress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAqB,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"ingress.js","sourceRoot":"","sources":["../../../src/slack/ingress.ts"],"names":[],"mappings":"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"}
|