instar 1.3.71 → 1.3.72
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/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +20 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/messaging/AttentionTopicGuard.d.ts +88 -0
- package/dist/messaging/AttentionTopicGuard.d.ts.map +1 -0
- package/dist/messaging/AttentionTopicGuard.js +154 -0
- package/dist/messaging/AttentionTopicGuard.js.map +1 -0
- package/dist/messaging/TelegramAdapter.d.ts +39 -0
- package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
- package/dist/messaging/TelegramAdapter.js +142 -1
- package/dist/messaging/TelegramAdapter.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +18 -18
- package/upgrades/1.3.72.md +65 -0
- package/upgrades/side-effects/attention-topic-flood-guard.md +74 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AttentionTopicGuard — a per-source + global circuit breaker for forum-topic
|
|
3
|
+
* creation. NOT a blocker: it is a DELIVERY SHAPER (same class as
|
|
4
|
+
* SentinelNotifier), never a gate. It holds no authority over agent behavior or
|
|
5
|
+
* information flow — it only changes the FORM of delivery (one coalesced topic +
|
|
6
|
+
* a log line) for non-critical, high-volume notices, and never withholds a
|
|
7
|
+
* critical notice or drops an item. See docs/signal-vs-authority.md (the rate-
|
|
8
|
+
* counter / transport-dedup carve-outs).
|
|
9
|
+
*
|
|
10
|
+
* Built in response to the 2026-05-28 topic-spam flood (the SECOND such flood;
|
|
11
|
+
* the first, 2026-05-22, produced the SentinelNotifier fix). Root cause both
|
|
12
|
+
* times: `TelegramAdapter.createAttentionItem` spawns a BRAND-NEW forum topic
|
|
13
|
+
* per attention item, and there was no structural gate stopping a housekeeping
|
|
14
|
+
* feature from raising attention items at volume.
|
|
15
|
+
*
|
|
16
|
+
* It sits at the one chokepoint (createAttentionItem) and caps how many NEW
|
|
17
|
+
* topics may be spawned in a rolling window — BOTH per source AND globally. Past
|
|
18
|
+
* the budget, items are COALESCED into one running notice topic + logged. The
|
|
19
|
+
* GLOBAL cap is load-bearing: a mis-wired feature that varies its `sourceContext`
|
|
20
|
+
* per item would dodge a per-source-only budget, so once total topic creation in
|
|
21
|
+
* the window exceeds the global ceiling, every further non-critical item — of any
|
|
22
|
+
* source — coalesces into ONE shared global bucket. That makes the "a brand-new
|
|
23
|
+
* mis-wired feature gets auto-throttled" guarantee hold regardless of source
|
|
24
|
+
* cardinality.
|
|
25
|
+
*
|
|
26
|
+
* Invariants:
|
|
27
|
+
* - HIGH / URGENT (case-insensitive; CRITICAL treated as URGENT) ALWAYS get
|
|
28
|
+
* their own topic and are never counted. Critical messages are never coalesced.
|
|
29
|
+
* - No item is ever DROPPED. A coalesced item is still recorded in the attention
|
|
30
|
+
* store and written to the suppression audit log; only its per-item TOPIC is
|
|
31
|
+
* withheld.
|
|
32
|
+
*
|
|
33
|
+
* Pure logic, injectable clock, bounded memory — unit-testable in isolation.
|
|
34
|
+
*/
|
|
35
|
+
export interface AttentionTopicGuardConfig {
|
|
36
|
+
/** When false, every item is allowed its own topic (pre-guard behavior). */
|
|
37
|
+
enabled: boolean;
|
|
38
|
+
/** Rolling window over which topic creations are counted. */
|
|
39
|
+
windowMs: number;
|
|
40
|
+
/** Max NEW topics a single source may spawn within `windowMs`. */
|
|
41
|
+
maxTopicsPerSource: number;
|
|
42
|
+
/**
|
|
43
|
+
* Max NEW topics across ALL sources within `windowMs`. Backstop against a
|
|
44
|
+
* source that varies its key per item to dodge the per-source budget. Past
|
|
45
|
+
* this, non-critical items coalesce into one shared global bucket regardless
|
|
46
|
+
* of source. Must be >= maxTopicsPerSource to be meaningful.
|
|
47
|
+
*/
|
|
48
|
+
maxTopicsGlobal: number;
|
|
49
|
+
/** Hard cap on distinct source keys tracked (memory bound). */
|
|
50
|
+
maxTrackedSources: number;
|
|
51
|
+
}
|
|
52
|
+
export declare const DEFAULT_ATTENTION_TOPIC_GUARD: AttentionTopicGuardConfig;
|
|
53
|
+
/** The shared key used when the GLOBAL cap (not a per-source cap) trips. */
|
|
54
|
+
export declare const GLOBAL_BUCKET = "*";
|
|
55
|
+
export type GuardDecision = {
|
|
56
|
+
action: 'allow';
|
|
57
|
+
} | {
|
|
58
|
+
action: 'coalesce';
|
|
59
|
+
firstInEpisode: boolean;
|
|
60
|
+
suppressedCount: number;
|
|
61
|
+
bucket: string;
|
|
62
|
+
};
|
|
63
|
+
export declare class AttentionTopicGuard {
|
|
64
|
+
private readonly cfg;
|
|
65
|
+
private readonly now;
|
|
66
|
+
/** source key -> timestamps of recent topic-relevant events within the window. */
|
|
67
|
+
private readonly events;
|
|
68
|
+
/** bucket key -> count of items coalesced in the CURRENT (uninterrupted) episode. */
|
|
69
|
+
private readonly episode;
|
|
70
|
+
/** Global rolling timeline of topic-relevant events (all sources). */
|
|
71
|
+
private globalEvents;
|
|
72
|
+
constructor(cfg?: Partial<AttentionTopicGuardConfig>, now?: () => number);
|
|
73
|
+
get config(): Readonly<AttentionTopicGuardConfig>;
|
|
74
|
+
/**
|
|
75
|
+
* Decide whether an item from `source` at `priority` may spawn its own topic.
|
|
76
|
+
* Returns the coalesce `bucket` (the source key, or GLOBAL_BUCKET when only the
|
|
77
|
+
* global cap tripped) so the adapter routes all global-flood notices into ONE
|
|
78
|
+
* shared topic rather than one-per-varying-source.
|
|
79
|
+
*/
|
|
80
|
+
decide(source: string | undefined, priority: string | undefined): GuardDecision;
|
|
81
|
+
/** Drop source keys whose events have all aged out, and hard-cap map size. */
|
|
82
|
+
private evictStaleSources;
|
|
83
|
+
/** Test/inspection seam. */
|
|
84
|
+
episodeCount(bucket: string): number;
|
|
85
|
+
/** Test/inspection seam — number of distinct source keys currently tracked. */
|
|
86
|
+
get trackedSourceCount(): number;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=AttentionTopicGuard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AttentionTopicGuard.d.ts","sourceRoot":"","sources":["../../src/messaging/AttentionTopicGuard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,MAAM,WAAW,yBAAyB;IACxC,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,eAAe,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,6BAA6B,EAAE,yBAM3C,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GACnB;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,cAAc,EAAE,OAAO,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAW7F,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA4B;IAChD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,kFAAkF;IAClF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IACtD,qFAAqF;IACrF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,sEAAsE;IACtE,OAAO,CAAC,YAAY,CAAgB;gBAExB,GAAG,GAAE,OAAO,CAAC,yBAAyB,CAAM,EAAE,GAAG,GAAE,MAAM,MAAyB;IAmB9F,IAAI,MAAM,IAAI,QAAQ,CAAC,yBAAyB,CAAC,CAEhD;IAED;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa;IAqC/E,8EAA8E;IAC9E,OAAO,CAAC,iBAAiB;IAuBzB,4BAA4B;IAC5B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIpC,+EAA+E;IAC/E,IAAI,kBAAkB,IAAI,MAAM,CAE/B;CACF"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AttentionTopicGuard — a per-source + global circuit breaker for forum-topic
|
|
3
|
+
* creation. NOT a blocker: it is a DELIVERY SHAPER (same class as
|
|
4
|
+
* SentinelNotifier), never a gate. It holds no authority over agent behavior or
|
|
5
|
+
* information flow — it only changes the FORM of delivery (one coalesced topic +
|
|
6
|
+
* a log line) for non-critical, high-volume notices, and never withholds a
|
|
7
|
+
* critical notice or drops an item. See docs/signal-vs-authority.md (the rate-
|
|
8
|
+
* counter / transport-dedup carve-outs).
|
|
9
|
+
*
|
|
10
|
+
* Built in response to the 2026-05-28 topic-spam flood (the SECOND such flood;
|
|
11
|
+
* the first, 2026-05-22, produced the SentinelNotifier fix). Root cause both
|
|
12
|
+
* times: `TelegramAdapter.createAttentionItem` spawns a BRAND-NEW forum topic
|
|
13
|
+
* per attention item, and there was no structural gate stopping a housekeeping
|
|
14
|
+
* feature from raising attention items at volume.
|
|
15
|
+
*
|
|
16
|
+
* It sits at the one chokepoint (createAttentionItem) and caps how many NEW
|
|
17
|
+
* topics may be spawned in a rolling window — BOTH per source AND globally. Past
|
|
18
|
+
* the budget, items are COALESCED into one running notice topic + logged. The
|
|
19
|
+
* GLOBAL cap is load-bearing: a mis-wired feature that varies its `sourceContext`
|
|
20
|
+
* per item would dodge a per-source-only budget, so once total topic creation in
|
|
21
|
+
* the window exceeds the global ceiling, every further non-critical item — of any
|
|
22
|
+
* source — coalesces into ONE shared global bucket. That makes the "a brand-new
|
|
23
|
+
* mis-wired feature gets auto-throttled" guarantee hold regardless of source
|
|
24
|
+
* cardinality.
|
|
25
|
+
*
|
|
26
|
+
* Invariants:
|
|
27
|
+
* - HIGH / URGENT (case-insensitive; CRITICAL treated as URGENT) ALWAYS get
|
|
28
|
+
* their own topic and are never counted. Critical messages are never coalesced.
|
|
29
|
+
* - No item is ever DROPPED. A coalesced item is still recorded in the attention
|
|
30
|
+
* store and written to the suppression audit log; only its per-item TOPIC is
|
|
31
|
+
* withheld.
|
|
32
|
+
*
|
|
33
|
+
* Pure logic, injectable clock, bounded memory — unit-testable in isolation.
|
|
34
|
+
*/
|
|
35
|
+
export const DEFAULT_ATTENTION_TOPIC_GUARD = {
|
|
36
|
+
enabled: true,
|
|
37
|
+
windowMs: 10 * 60 * 1000,
|
|
38
|
+
maxTopicsPerSource: 3,
|
|
39
|
+
maxTopicsGlobal: 8,
|
|
40
|
+
maxTrackedSources: 512,
|
|
41
|
+
};
|
|
42
|
+
/** The shared key used when the GLOBAL cap (not a per-source cap) trips. */
|
|
43
|
+
export const GLOBAL_BUCKET = '*';
|
|
44
|
+
/** Priorities that always get their own topic and are never counted. */
|
|
45
|
+
const CRITICAL_PRIORITIES = new Set(['HIGH', 'URGENT', 'CRITICAL']);
|
|
46
|
+
function coerceNum(v, fallback, { int = false, min = 0 } = {}) {
|
|
47
|
+
const n = typeof v === 'number' ? v : NaN;
|
|
48
|
+
if (!Number.isFinite(n) || n < min)
|
|
49
|
+
return fallback;
|
|
50
|
+
return int ? Math.floor(n) : n;
|
|
51
|
+
}
|
|
52
|
+
export class AttentionTopicGuard {
|
|
53
|
+
cfg;
|
|
54
|
+
now;
|
|
55
|
+
/** source key -> timestamps of recent topic-relevant events within the window. */
|
|
56
|
+
events = new Map();
|
|
57
|
+
/** bucket key -> count of items coalesced in the CURRENT (uninterrupted) episode. */
|
|
58
|
+
episode = new Map();
|
|
59
|
+
/** Global rolling timeline of topic-relevant events (all sources). */
|
|
60
|
+
globalEvents = [];
|
|
61
|
+
constructor(cfg = {}, now = () => Date.now()) {
|
|
62
|
+
// Validate/coerce: a fat-fingered NaN/negative must NOT silently disable the
|
|
63
|
+
// guard (NaN comparisons are always false → it would never trip).
|
|
64
|
+
const d = DEFAULT_ATTENTION_TOPIC_GUARD;
|
|
65
|
+
const windowMs = coerceNum(cfg.windowMs, d.windowMs, { min: 1 });
|
|
66
|
+
const maxTopicsPerSource = coerceNum(cfg.maxTopicsPerSource, d.maxTopicsPerSource, { int: true, min: 0 });
|
|
67
|
+
this.cfg = {
|
|
68
|
+
enabled: cfg.enabled !== false,
|
|
69
|
+
windowMs,
|
|
70
|
+
maxTopicsPerSource,
|
|
71
|
+
// Independent global ceiling. A LOW global with a HIGH per-source budget is
|
|
72
|
+
// the intended high-cardinality config (cap total topics regardless of how
|
|
73
|
+
// many distinct source keys appear), so we do NOT clamp it up to per-source.
|
|
74
|
+
maxTopicsGlobal: coerceNum(cfg.maxTopicsGlobal, d.maxTopicsGlobal, { int: true, min: 1 }),
|
|
75
|
+
maxTrackedSources: coerceNum(cfg.maxTrackedSources, d.maxTrackedSources, { int: true, min: 1 }),
|
|
76
|
+
};
|
|
77
|
+
this.now = now;
|
|
78
|
+
}
|
|
79
|
+
get config() {
|
|
80
|
+
return this.cfg;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Decide whether an item from `source` at `priority` may spawn its own topic.
|
|
84
|
+
* Returns the coalesce `bucket` (the source key, or GLOBAL_BUCKET when only the
|
|
85
|
+
* global cap tripped) so the adapter routes all global-flood notices into ONE
|
|
86
|
+
* shared topic rather than one-per-varying-source.
|
|
87
|
+
*/
|
|
88
|
+
decide(source, priority) {
|
|
89
|
+
if (!this.cfg.enabled)
|
|
90
|
+
return { action: 'allow' };
|
|
91
|
+
const p = (priority ?? '').toUpperCase();
|
|
92
|
+
if (CRITICAL_PRIORITIES.has(p))
|
|
93
|
+
return { action: 'allow' };
|
|
94
|
+
const key = source && source.trim() ? source : 'unknown';
|
|
95
|
+
const now = this.now();
|
|
96
|
+
const cutoff = now - this.cfg.windowMs;
|
|
97
|
+
const perRecent = (this.events.get(key) ?? []).filter((t) => t >= cutoff);
|
|
98
|
+
this.globalEvents = this.globalEvents.filter((t) => t >= cutoff);
|
|
99
|
+
const perTripped = perRecent.length >= this.cfg.maxTopicsPerSource;
|
|
100
|
+
const globalTripped = this.globalEvents.length >= this.cfg.maxTopicsGlobal;
|
|
101
|
+
// Record this event in both timelines so a sustained flood keeps the window
|
|
102
|
+
// full and stays in a single coalesce episode.
|
|
103
|
+
perRecent.push(now);
|
|
104
|
+
this.events.set(key, perRecent);
|
|
105
|
+
this.globalEvents.push(now);
|
|
106
|
+
this.evictStaleSources(cutoff);
|
|
107
|
+
if (perTripped || globalTripped) {
|
|
108
|
+
// Per-source flood → coalesce under the source (one topic per flooding
|
|
109
|
+
// source). Global-only flood (many low-volume sources) → coalesce under the
|
|
110
|
+
// shared global bucket (one topic total), defeating key-variation dodges.
|
|
111
|
+
const bucket = perTripped ? key : GLOBAL_BUCKET;
|
|
112
|
+
const count = (this.episode.get(bucket) ?? 0) + 1;
|
|
113
|
+
this.episode.set(bucket, count);
|
|
114
|
+
return { action: 'coalesce', firstInEpisode: count === 1, suppressedCount: count, bucket };
|
|
115
|
+
}
|
|
116
|
+
// Under both budgets: own topic, and any prior episode for this source is over.
|
|
117
|
+
this.episode.set(key, 0);
|
|
118
|
+
return { action: 'allow' };
|
|
119
|
+
}
|
|
120
|
+
/** Drop source keys whose events have all aged out, and hard-cap map size. */
|
|
121
|
+
evictStaleSources(cutoff) {
|
|
122
|
+
if (this.events.size <= this.cfg.maxTrackedSources) {
|
|
123
|
+
// cheap path: nothing to do until we approach the cap.
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
for (const [k, ts] of this.events) {
|
|
127
|
+
const live = ts.filter((t) => t >= cutoff);
|
|
128
|
+
if (live.length === 0) {
|
|
129
|
+
this.events.delete(k);
|
|
130
|
+
this.episode.delete(k);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
this.events.set(k, live);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// If still over the cap (many genuinely-active sources), drop the oldest.
|
|
137
|
+
while (this.events.size > this.cfg.maxTrackedSources) {
|
|
138
|
+
const oldest = this.events.keys().next().value;
|
|
139
|
+
if (oldest === undefined)
|
|
140
|
+
break;
|
|
141
|
+
this.events.delete(oldest);
|
|
142
|
+
this.episode.delete(oldest);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/** Test/inspection seam. */
|
|
146
|
+
episodeCount(bucket) {
|
|
147
|
+
return this.episode.get(bucket && bucket.trim() ? bucket : 'unknown') ?? 0;
|
|
148
|
+
}
|
|
149
|
+
/** Test/inspection seam — number of distinct source keys currently tracked. */
|
|
150
|
+
get trackedSourceCount() {
|
|
151
|
+
return this.events.size;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=AttentionTopicGuard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AttentionTopicGuard.js","sourceRoot":"","sources":["../../src/messaging/AttentionTopicGuard.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ import type { ContentValidationConfig } from './TopicContentValidator.js';
|
|
|
14
14
|
import { MessagingEventBus } from './shared/MessagingEventBus.js';
|
|
15
15
|
import type { DetectedPrompt } from '../monitoring/PromptGate.js';
|
|
16
16
|
import { type FormatMode } from './TelegramMarkdownFormatter.js';
|
|
17
|
+
import { type AttentionTopicGuardConfig } from './AttentionTopicGuard.js';
|
|
17
18
|
export interface TelegramConfig {
|
|
18
19
|
/** Bot token from @BotFather */
|
|
19
20
|
token: string;
|
|
@@ -72,6 +73,14 @@ export interface TelegramConfig {
|
|
|
72
73
|
getFormatMode?: () => FormatMode | undefined;
|
|
73
74
|
/** Hot-reloadable accessor for lint-strict mode. */
|
|
74
75
|
getLintStrict?: () => boolean | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Per-source forum-topic circuit breaker. Caps how many NEW topics a single
|
|
78
|
+
* attention `sourceContext` may spawn in a rolling window; past the budget,
|
|
79
|
+
* items coalesce into one running notice topic instead of a wall of topics.
|
|
80
|
+
* Defaults to DEFAULT_ATTENTION_TOPIC_GUARD (enabled) — the 2026-05-28
|
|
81
|
+
* topic-flood lockdown. See AttentionTopicGuard.
|
|
82
|
+
*/
|
|
83
|
+
attentionTopicGuard?: Partial<AttentionTopicGuardConfig>;
|
|
75
84
|
}
|
|
76
85
|
export interface SendResult {
|
|
77
86
|
/** Telegram message ID */
|
|
@@ -126,6 +135,13 @@ export interface AttentionItem {
|
|
|
126
135
|
createdAt: string;
|
|
127
136
|
updatedAt: string;
|
|
128
137
|
topicId?: number;
|
|
138
|
+
/**
|
|
139
|
+
* True when the topic-flood guard coalesced this item into a shared "notices
|
|
140
|
+
* coalesced" topic instead of giving it its own. Such items are NOT registered
|
|
141
|
+
* in the per-item topic maps and are managed via /attention (PATCH / dashboard),
|
|
142
|
+
* not per-topic /ack — so resolving one never closes the shared notice topic.
|
|
143
|
+
*/
|
|
144
|
+
coalesced?: boolean;
|
|
129
145
|
}
|
|
130
146
|
/**
|
|
131
147
|
* Standard topic styles for visual organization in Telegram forum.
|
|
@@ -209,6 +225,10 @@ export declare class TelegramAdapter implements MessagingAdapter {
|
|
|
209
225
|
private attentionTopicToItem;
|
|
210
226
|
private attentionItems;
|
|
211
227
|
private attentionFilePath;
|
|
228
|
+
private attentionTopicGuard;
|
|
229
|
+
private floodNoticeTopicByBucket;
|
|
230
|
+
private floodNoticePending;
|
|
231
|
+
private attentionSuppressedLogPath;
|
|
212
232
|
private pendingMessages;
|
|
213
233
|
private stallCheckInterval;
|
|
214
234
|
private pendingPromises;
|
|
@@ -792,6 +812,25 @@ export declare class TelegramAdapter implements MessagingAdapter {
|
|
|
792
812
|
* Create an attention item and its Telegram topic.
|
|
793
813
|
*/
|
|
794
814
|
createAttentionItem(item: Omit<AttentionItem, 'createdAt' | 'updatedAt' | 'status' | 'topicId'>): Promise<AttentionItem>;
|
|
815
|
+
/**
|
|
816
|
+
* Append a suppressed attention item to the audit trail. This is the
|
|
817
|
+
* "housekeeping goes to the logs" path for the topic-flood guard — the item
|
|
818
|
+
* is preserved, just not given its own forum topic. Size-capped with a single
|
|
819
|
+
* rotation (the flood is exactly the failure mode that grows this fastest).
|
|
820
|
+
*/
|
|
821
|
+
private writeSuppressedAttentionLog;
|
|
822
|
+
/**
|
|
823
|
+
* Route a coalesced attention item into ONE reused notice topic for its bucket
|
|
824
|
+
* (the source key, or the shared global bucket when the global cap tripped).
|
|
825
|
+
* The topic is created lazily once per bucket and reused thereafter (so a
|
|
826
|
+
* flapping source does not churn a new topic per episode). Concurrent coalesced
|
|
827
|
+
* items for one bucket share a single in-flight creation (no double-create
|
|
828
|
+
* race). Returns the notice topicId, or null if Telegram is unavailable (the
|
|
829
|
+
* item is still recorded + logged).
|
|
830
|
+
*/
|
|
831
|
+
private routeToFloodNotice;
|
|
832
|
+
/** Lazily create (once) and return the reused notice topic id for a bucket. */
|
|
833
|
+
private ensureFloodNoticeTopic;
|
|
795
834
|
/**
|
|
796
835
|
* Update attention item status. Called by /ack, /done, /wontdo, /reopen commands.
|
|
797
836
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TelegramAdapter.d.ts","sourceRoot":"","sources":["../../src/messaging/TelegramAdapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TelegramAdapter.d.ts","sourceRoot":"","sources":["../../src/messaging/TelegramAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,7 @@ import { formatForTelegram } from './TelegramMarkdownFormatter.js';
|
|
|
25
25
|
import { recordFormatApplied, recordFormatLintIssue, recordFormatFallbackPlainRetry, } from './telegramFormatMetrics.js';
|
|
26
26
|
import { SafeFsExecutor } from '../core/SafeFsExecutor.js';
|
|
27
27
|
import { stopAutonomousTopic } from '../core/AutonomousSessions.js';
|
|
28
|
+
import { AttentionTopicGuard } from './AttentionTopicGuard.js';
|
|
28
29
|
/**
|
|
29
30
|
* Telegram General topic convention:
|
|
30
31
|
* - Incoming: messages in General have message_thread_id=1 (or undefined in older API)
|
|
@@ -158,6 +159,14 @@ export class TelegramAdapter {
|
|
|
158
159
|
attentionTopicToItem = new Map();
|
|
159
160
|
attentionItems = new Map();
|
|
160
161
|
attentionFilePath;
|
|
162
|
+
// Per-source forum-topic circuit breaker (2026-05-28 topic-flood lockdown).
|
|
163
|
+
attentionTopicGuard;
|
|
164
|
+
// bucket -> the single reused "notices coalesced" topic for that bucket.
|
|
165
|
+
floodNoticeTopicByBucket = new Map();
|
|
166
|
+
// bucket -> in-flight createForumTopic promise, so concurrent coalesced items
|
|
167
|
+
// for one bucket share ONE topic creation (no double-create race).
|
|
168
|
+
floodNoticePending = new Map();
|
|
169
|
+
attentionSuppressedLogPath;
|
|
161
170
|
// Stall detection
|
|
162
171
|
pendingMessages = new Map(); // key = topicId-timestamp
|
|
163
172
|
stallCheckInterval = null;
|
|
@@ -340,6 +349,8 @@ export class TelegramAdapter {
|
|
|
340
349
|
this.messageLogPath = path.join(this.botStateDir, 'telegram-messages.jsonl');
|
|
341
350
|
this.offsetPath = path.join(this.botStateDir, 'telegram-poll-offset.json');
|
|
342
351
|
this.attentionFilePath = path.join(this.botStateDir, 'state', 'attention-items.json');
|
|
352
|
+
this.attentionSuppressedLogPath = path.join(this.botStateDir, 'state', 'attention-suppressed.jsonl');
|
|
353
|
+
this.attentionTopicGuard = new AttentionTopicGuard(config.attentionTopicGuard ?? {});
|
|
343
354
|
this.loadRegistry();
|
|
344
355
|
this.loadOffset();
|
|
345
356
|
this.loadAttentionItems();
|
|
@@ -2843,6 +2854,30 @@ export class TelegramAdapter {
|
|
|
2843
2854
|
createdAt: now,
|
|
2844
2855
|
updatedAt: now,
|
|
2845
2856
|
};
|
|
2857
|
+
// ── Topic-flood circuit breaker (2026-05-28 lockdown) ──────────────
|
|
2858
|
+
// Before spawning a per-item forum topic, consult the per-source guard.
|
|
2859
|
+
// HIGH/URGENT always pass (critical items must always be visible). A
|
|
2860
|
+
// non-critical source that exceeds its topic budget within the window has
|
|
2861
|
+
// its items COALESCED into one running notice topic + logged — never a
|
|
2862
|
+
// wall of new topics. No item is dropped; only the per-item topic is held.
|
|
2863
|
+
const guardSource = item.sourceContext || item.category || 'unknown';
|
|
2864
|
+
const decision = this.attentionTopicGuard.decide(guardSource, item.priority);
|
|
2865
|
+
if (decision.action === 'coalesce') {
|
|
2866
|
+
this.writeSuppressedAttentionLog(attention, decision.bucket, decision.suppressedCount);
|
|
2867
|
+
const noticeTopicId = await this.routeToFloodNotice(decision.bucket, attention, decision);
|
|
2868
|
+
// Mark coalesced and record the (shared) notice topic for reference ONLY.
|
|
2869
|
+
// Deliberately do NOT register the per-item topic maps: many items share one
|
|
2870
|
+
// notice topic, so registering them would (a) make `loadAttentionItems`
|
|
2871
|
+
// last-writer-win-corrupt the reverse map on restart and (b) make
|
|
2872
|
+
// `updateAttentionStatus` close the shared topic when ONE sibling resolves.
|
|
2873
|
+
// Coalesced items are managed via /attention (PATCH / dashboard), not /ack.
|
|
2874
|
+
attention.coalesced = true;
|
|
2875
|
+
if (noticeTopicId !== null)
|
|
2876
|
+
attention.topicId = noticeTopicId;
|
|
2877
|
+
this.attentionItems.set(item.id, attention);
|
|
2878
|
+
this.saveAttentionItems();
|
|
2879
|
+
return attention;
|
|
2880
|
+
}
|
|
2846
2881
|
// Create Telegram topic (uses the centralized method for forum detection)
|
|
2847
2882
|
try {
|
|
2848
2883
|
const emoji = PRIORITY_EMOJI[item.priority] || PRIORITY_EMOJI.NORMAL;
|
|
@@ -2893,6 +2928,109 @@ export class TelegramAdapter {
|
|
|
2893
2928
|
this.saveAttentionItems();
|
|
2894
2929
|
return attention;
|
|
2895
2930
|
}
|
|
2931
|
+
/**
|
|
2932
|
+
* Append a suppressed attention item to the audit trail. This is the
|
|
2933
|
+
* "housekeeping goes to the logs" path for the topic-flood guard — the item
|
|
2934
|
+
* is preserved, just not given its own forum topic. Size-capped with a single
|
|
2935
|
+
* rotation (the flood is exactly the failure mode that grows this fastest).
|
|
2936
|
+
*/
|
|
2937
|
+
writeSuppressedAttentionLog(item, bucket, episodeCount) {
|
|
2938
|
+
const entry = {
|
|
2939
|
+
ts: new Date().toISOString(),
|
|
2940
|
+
bucket,
|
|
2941
|
+
episodeCount,
|
|
2942
|
+
id: item.id,
|
|
2943
|
+
priority: item.priority,
|
|
2944
|
+
category: item.category,
|
|
2945
|
+
title: item.title,
|
|
2946
|
+
summary: item.summary,
|
|
2947
|
+
};
|
|
2948
|
+
try {
|
|
2949
|
+
fs.mkdirSync(path.dirname(this.attentionSuppressedLogPath), { recursive: true });
|
|
2950
|
+
// Rotate at ~2MB so a sustained flood can't grow the audit log unbounded.
|
|
2951
|
+
try {
|
|
2952
|
+
const st = fs.statSync(this.attentionSuppressedLogPath);
|
|
2953
|
+
if (st.size > 2 * 1024 * 1024) {
|
|
2954
|
+
fs.renameSync(this.attentionSuppressedLogPath, `${this.attentionSuppressedLogPath}.1`);
|
|
2955
|
+
}
|
|
2956
|
+
}
|
|
2957
|
+
catch { /* no existing file — nothing to rotate */ }
|
|
2958
|
+
fs.appendFileSync(this.attentionSuppressedLogPath, JSON.stringify(entry) + '\n');
|
|
2959
|
+
}
|
|
2960
|
+
catch {
|
|
2961
|
+
// @silent-fallback-ok — an audit-log write failure must never crash the
|
|
2962
|
+
// attention path; the item is still recorded in the in-memory store.
|
|
2963
|
+
}
|
|
2964
|
+
console.log(`[telegram] attention topic-flood guard: coalesced "${item.title}" (bucket=${bucket}, #${episodeCount}) — logged, no new topic`);
|
|
2965
|
+
}
|
|
2966
|
+
/**
|
|
2967
|
+
* Route a coalesced attention item into ONE reused notice topic for its bucket
|
|
2968
|
+
* (the source key, or the shared global bucket when the global cap tripped).
|
|
2969
|
+
* The topic is created lazily once per bucket and reused thereafter (so a
|
|
2970
|
+
* flapping source does not churn a new topic per episode). Concurrent coalesced
|
|
2971
|
+
* items for one bucket share a single in-flight creation (no double-create
|
|
2972
|
+
* race). Returns the notice topicId, or null if Telegram is unavailable (the
|
|
2973
|
+
* item is still recorded + logged).
|
|
2974
|
+
*/
|
|
2975
|
+
async routeToFloodNotice(bucket, item, decision) {
|
|
2976
|
+
let topicId;
|
|
2977
|
+
try {
|
|
2978
|
+
topicId = await this.ensureFloodNoticeTopic(bucket);
|
|
2979
|
+
}
|
|
2980
|
+
catch (err) {
|
|
2981
|
+
console.error(`[telegram] flood-notice topic creation failed for bucket "${bucket}": ${err}`);
|
|
2982
|
+
topicId = this.floodNoticeTopicByBucket.get(bucket) ?? null;
|
|
2983
|
+
}
|
|
2984
|
+
if (topicId === null)
|
|
2985
|
+
return null;
|
|
2986
|
+
const line = `• [#${decision.suppressedCount}] ${this.escapeHtml(item.title)} — ${this.escapeHtml(String(item.summary ?? '').slice(0, 200))}`;
|
|
2987
|
+
// @silent-fallback-ok — best-effort coalesce line; the item is already
|
|
2988
|
+
// recorded + audit-logged, so a transient send failure is non-fatal. If the
|
|
2989
|
+
// topic was deleted out from under us, drop the mapping so it's recreated.
|
|
2990
|
+
await this.sendToTopic(topicId, line).catch(() => {
|
|
2991
|
+
this.floodNoticeTopicByBucket.delete(bucket);
|
|
2992
|
+
});
|
|
2993
|
+
return topicId;
|
|
2994
|
+
}
|
|
2995
|
+
/** Lazily create (once) and return the reused notice topic id for a bucket. */
|
|
2996
|
+
async ensureFloodNoticeTopic(bucket) {
|
|
2997
|
+
const existing = this.floodNoticeTopicByBucket.get(bucket);
|
|
2998
|
+
if (existing !== undefined)
|
|
2999
|
+
return existing;
|
|
3000
|
+
const inFlight = this.floodNoticePending.get(bucket);
|
|
3001
|
+
if (inFlight)
|
|
3002
|
+
return inFlight;
|
|
3003
|
+
const creation = (async () => {
|
|
3004
|
+
const label = bucket === '*' ? 'multiple sources' : bucket;
|
|
3005
|
+
const title = `🔁 ${label}: notices coalesced (flood guard)`.slice(0, 128);
|
|
3006
|
+
const topic = await this.createForumTopic(title, PRIORITY_COLOR.LOW ?? PRIORITY_COLOR.NORMAL);
|
|
3007
|
+
const topicId = topic.topicId;
|
|
3008
|
+
this.floodNoticeTopicByBucket.set(bucket, topicId);
|
|
3009
|
+
this.topicToName.set(topicId, title);
|
|
3010
|
+
const intro = [
|
|
3011
|
+
`<b>${this.escapeHtml(label)}</b> raised more than its topic budget in a short window, so I'm collecting these notices HERE instead of spawning a new topic per item (housekeeping flood guard, 2026-05-28).`,
|
|
3012
|
+
``,
|
|
3013
|
+
`Each item is also recorded in <code>state/attention-suppressed.jsonl</code> and in the attention list — manage them via the dashboard / <code>/attention</code>, not per-item /ack here. Critical (HIGH/URGENT) items are never coalesced — they still get their own topic.`,
|
|
3014
|
+
].join('\n');
|
|
3015
|
+
const introParams = {
|
|
3016
|
+
chat_id: this.config.chatId,
|
|
3017
|
+
text: intro,
|
|
3018
|
+
parse_mode: 'HTML',
|
|
3019
|
+
_formatMode: 'html',
|
|
3020
|
+
};
|
|
3021
|
+
if (!isGeneralTopic(topicId))
|
|
3022
|
+
introParams.message_thread_id = topicId;
|
|
3023
|
+
await this.apiCall('sendMessage', introParams);
|
|
3024
|
+
return topicId;
|
|
3025
|
+
})();
|
|
3026
|
+
this.floodNoticePending.set(bucket, creation);
|
|
3027
|
+
try {
|
|
3028
|
+
return await creation;
|
|
3029
|
+
}
|
|
3030
|
+
finally {
|
|
3031
|
+
this.floodNoticePending.delete(bucket);
|
|
3032
|
+
}
|
|
3033
|
+
}
|
|
2896
3034
|
/**
|
|
2897
3035
|
* Update attention item status. Called by /ack, /done, /wontdo, /reopen commands.
|
|
2898
3036
|
*/
|
|
@@ -2983,7 +3121,10 @@ export class TelegramAdapter {
|
|
|
2983
3121
|
if (data.items) {
|
|
2984
3122
|
for (const item of data.items) {
|
|
2985
3123
|
this.attentionItems.set(item.id, item);
|
|
2986
|
-
|
|
3124
|
+
// Coalesced items share ONE notice topic; registering them in the
|
|
3125
|
+
// per-item maps would last-writer-win-corrupt the reverse map and make
|
|
3126
|
+
// resolving one close the shared topic. They are managed via /attention.
|
|
3127
|
+
if (item.topicId && !item.coalesced) {
|
|
2987
3128
|
this.attentionItemToTopic.set(item.id, item.topicId);
|
|
2988
3129
|
this.attentionTopicToItem.set(item.topicId, item.id);
|
|
2989
3130
|
}
|