openclaw-telegram-manager 1.2.0 → 1.3.1

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.
Files changed (48) hide show
  1. package/README.md +5 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +34 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/include-generator.d.ts +1 -1
  6. package/dist/lib/include-generator.d.ts.map +1 -1
  7. package/dist/lib/include-generator.js +33 -2
  8. package/dist/lib/include-generator.js.map +1 -1
  9. package/dist/plugin.js +11106 -0
  10. package/dist/setup.js +29 -97
  11. package/dist/setup.js.map +1 -1
  12. package/package.json +4 -4
  13. package/src/commands/archive.ts +0 -89
  14. package/src/commands/doctor-all.ts +0 -243
  15. package/src/commands/doctor.ts +0 -100
  16. package/src/commands/help.ts +0 -11
  17. package/src/commands/init.ts +0 -376
  18. package/src/commands/list.ts +0 -28
  19. package/src/commands/rename.ts +0 -140
  20. package/src/commands/snooze.ts +0 -69
  21. package/src/commands/status.ts +0 -59
  22. package/src/commands/sync.ts +0 -46
  23. package/src/commands/upgrade.ts +0 -64
  24. package/src/index.ts +0 -54
  25. package/src/lib/audit.ts +0 -44
  26. package/src/lib/auth.ts +0 -96
  27. package/src/lib/capsule.ts +0 -206
  28. package/src/lib/config-restart.ts +0 -167
  29. package/src/lib/doctor-checks.ts +0 -639
  30. package/src/lib/include-generator.ts +0 -174
  31. package/src/lib/registry.ts +0 -197
  32. package/src/lib/security.ts +0 -174
  33. package/src/lib/telegram.ts +0 -311
  34. package/src/lib/types.ts +0 -172
  35. package/src/setup.ts +0 -558
  36. package/src/templates/base/COMMANDS.md +0 -3
  37. package/src/templates/base/CRON.md +0 -3
  38. package/src/templates/base/LINKS.md +0 -3
  39. package/src/templates/base/NOTES.md +0 -3
  40. package/src/templates/base/README.md +0 -3
  41. package/src/templates/base/TODO.md +0 -11
  42. package/src/templates/overlays/coding/ARCHITECTURE.md +0 -3
  43. package/src/templates/overlays/coding/DEPLOY.md +0 -3
  44. package/src/templates/overlays/marketing/CAMPAIGNS.md +0 -3
  45. package/src/templates/overlays/marketing/METRICS.md +0 -3
  46. package/src/templates/overlays/research/FINDINGS.md +0 -3
  47. package/src/templates/overlays/research/SOURCES.md +0 -3
  48. package/src/tool.ts +0 -282
package/dist/setup.js CHANGED
@@ -9,7 +9,8 @@ const PLUGIN_VERSION = JSON.parse(fs.readFileSync(new URL('../package.json', imp
9
9
  const MIN_OPENCLAW_VERSION = '2026.1.0';
10
10
  const INCLUDE_FILENAME = 'telegram-manager.generated.groups.json5';
11
11
  const REGISTRY_FILENAME = 'topics.json';
12
- const PLUGIN_FILES = ['openclaw.plugin.json', 'src', 'skills', 'package.json'];
12
+ const PLUGIN_FILES = ['openclaw.plugin.json', 'dist/plugin.js', 'skills', 'package.json'];
13
+ const REQUIRED_PLUGIN_FILES = ['openclaw.plugin.json', 'dist/plugin.js'];
13
14
  // ── Colors (zero dependencies, respects NO_COLOR / non-TTY) ──────────
14
15
  const useColor = process.stdout.isTTY === true &&
15
16
  !process.env['NO_COLOR'] &&
@@ -105,12 +106,12 @@ async function runSetup() {
105
106
  startSpinner('Installing plugin…');
106
107
  installPlugin(configDir);
107
108
  startSpinner('Patching config…');
108
- patchConfig(configDir);
109
+ const existingGroups = patchConfig(configDir);
109
110
  startSpinner('Preparing workspace…');
110
111
  const projectsDir = path.join(configDir, 'workspace', 'projects');
111
112
  ensureDir(projectsDir);
112
113
  initRegistry(projectsDir);
113
- createEmptyInclude(configDir);
114
+ createEmptyInclude(configDir, existingGroups);
114
115
  ok('Workspace ready');
115
116
  startSpinner('Restarting gateway…');
116
117
  triggerRestart();
@@ -209,15 +210,20 @@ function installPlugin(configDir) {
209
210
  }
210
211
  const pkgRoot = findPackageRoot();
211
212
  if (pkgRoot) {
213
+ for (const req of REQUIRED_PLUGIN_FILES) {
214
+ if (!fs.existsSync(path.join(pkgRoot, req))) {
215
+ fail(`Required file missing: ${req}. Was \`npm run build\` run before publishing?`);
216
+ process.exit(1);
217
+ }
218
+ }
212
219
  fs.mkdirSync(extDir, { recursive: true });
213
220
  for (const entry of PLUGIN_FILES) {
214
221
  const src = path.join(pkgRoot, entry);
215
222
  if (!fs.existsSync(src))
216
223
  continue;
217
- copyRecursive(src, path.join(extDir, entry));
218
- }
219
- if (!copyDepsFromSource(extDir, pkgRoot)) {
220
- installDeps(extDir);
224
+ const dest = path.join(extDir, entry);
225
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
226
+ copyRecursive(src, dest);
221
227
  }
222
228
  ok('Plugin installed');
223
229
  return;
@@ -237,7 +243,7 @@ function patchConfig(configDir) {
237
243
  const configPath = path.join(configDir, 'openclaw.json');
238
244
  if (!fs.existsSync(configPath)) {
239
245
  warn(`${configPath} not found. Skipping config patch.`);
240
- return;
246
+ return null;
241
247
  }
242
248
  let content;
243
249
  try {
@@ -245,11 +251,11 @@ function patchConfig(configDir) {
245
251
  }
246
252
  catch {
247
253
  warn(`Could not read ${configPath}. Skipping config patch.`);
248
- return;
254
+ return null;
249
255
  }
250
256
  if (content.includes(INCLUDE_FILENAME)) {
251
257
  ok('Config already patched');
252
- return;
258
+ return null;
253
259
  }
254
260
  let config;
255
261
  try {
@@ -258,7 +264,7 @@ function patchConfig(configDir) {
258
264
  catch {
259
265
  warn('Could not parse openclaw.json. Please manually add the $include reference.');
260
266
  info(`Add to channels.telegram.groups: { "$include": "./${INCLUDE_FILENAME}" }`);
261
- return;
267
+ return null;
262
268
  }
263
269
  if (!config['channels'])
264
270
  config['channels'] = {};
@@ -266,12 +272,19 @@ function patchConfig(configDir) {
266
272
  if (!channels['telegram'])
267
273
  channels['telegram'] = {};
268
274
  const telegram = channels['telegram'];
275
+ // Extract existing inline groups before overwriting
276
+ let existingGroups = null;
277
+ const groups = telegram['groups'];
278
+ if (groups && typeof groups === 'object' && !('$include' in groups)) {
279
+ existingGroups = groups;
280
+ }
269
281
  telegram['groups'] = { $include: `./${INCLUDE_FILENAME}` };
270
282
  const bakPath = configPath + '.bak';
271
283
  fs.copyFileSync(configPath, bakPath);
272
284
  const newContent = JSON.stringify(config, null, 2) + '\n';
273
285
  fs.writeFileSync(configPath, newContent, { mode: 0o600 });
274
286
  ok('Config patched');
287
+ return existingGroups;
275
288
  }
276
289
  function initRegistry(projectsDir) {
277
290
  const registryPath = path.join(projectsDir, REGISTRY_FILENAME);
@@ -291,14 +304,17 @@ function initRegistry(projectsDir) {
291
304
  mode: 0o600,
292
305
  });
293
306
  }
294
- function createEmptyInclude(configDir) {
307
+ function createEmptyInclude(configDir, seedGroups) {
295
308
  const includePath = path.join(configDir, INCLUDE_FILENAME);
296
309
  if (fs.existsSync(includePath)) {
297
310
  return;
298
311
  }
312
+ const body = seedGroups && Object.keys(seedGroups).length > 0
313
+ ? JSON.stringify(seedGroups, null, 2)
314
+ : '{}';
299
315
  const content = [
300
316
  '// This file is generated by telegram-manager. Do not hand-edit.',
301
- '{}',
317
+ body,
302
318
  '',
303
319
  ].join('\n');
304
320
  fs.writeFileSync(includePath, content, { mode: 0o600 });
@@ -383,90 +399,6 @@ function compareVersions(a, b) {
383
399
  }
384
400
  return 0;
385
401
  }
386
- /**
387
- * Copy production dependencies from the source execution context (e.g. npx
388
- * temp directory) so we don't rely on `npm install` in the target directory.
389
- * Handles both nested and hoisted node_modules layouts.
390
- */
391
- function copyDepsFromSource(extDir, pkgRoot) {
392
- const targetNM = path.join(extDir, 'node_modules');
393
- // Case 1: nested node_modules inside the source package
394
- const nestedNM = path.join(pkgRoot, 'node_modules');
395
- if (fs.existsSync(nestedNM)) {
396
- try {
397
- copyRecursive(nestedNM, targetNM);
398
- return true;
399
- }
400
- catch {
401
- return false;
402
- }
403
- }
404
- // Case 2: hoisted deps (typical npx layout)
405
- // pkgRoot = …/node_modules/openclaw-telegram-manager/
406
- const parentDir = path.dirname(pkgRoot);
407
- if (path.basename(parentDir) !== 'node_modules')
408
- return false;
409
- const pkgJsonPath = path.join(extDir, 'package.json');
410
- if (!fs.existsSync(pkgJsonPath))
411
- return false;
412
- let deps;
413
- try {
414
- const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));
415
- deps = Object.keys(pkg.dependencies ?? {});
416
- }
417
- catch {
418
- return false;
419
- }
420
- if (deps.length === 0)
421
- return true;
422
- // BFS to collect direct deps + transitive runtime deps
423
- const toCopy = new Set();
424
- const queue = [...deps];
425
- while (queue.length > 0) {
426
- const dep = queue.shift();
427
- if (toCopy.has(dep))
428
- continue;
429
- const depPath = path.join(parentDir, dep);
430
- if (!fs.existsSync(depPath))
431
- return false; // missing → fall back to npm
432
- toCopy.add(dep);
433
- try {
434
- const depPkg = JSON.parse(fs.readFileSync(path.join(depPath, 'package.json'), 'utf-8'));
435
- for (const tdep of Object.keys(depPkg.dependencies ?? {})) {
436
- if (!toCopy.has(tdep))
437
- queue.push(tdep);
438
- }
439
- }
440
- catch {
441
- // continue — transitive dep metadata unreadable
442
- }
443
- }
444
- try {
445
- for (const dep of Array.from(toCopy)) {
446
- const src = path.join(parentDir, dep);
447
- const dest = path.join(targetNM, dep);
448
- fs.mkdirSync(path.dirname(dest), { recursive: true });
449
- copyRecursive(src, dest);
450
- }
451
- return true;
452
- }
453
- catch {
454
- return false;
455
- }
456
- }
457
- function installDeps(dir) {
458
- try {
459
- execSync('npm install --production --ignore-scripts', {
460
- cwd: dir,
461
- encoding: 'utf-8',
462
- stdio: 'pipe',
463
- timeout: 60_000,
464
- });
465
- }
466
- catch {
467
- warn('Could not install dependencies. Run `npm install --production` in ' + dir);
468
- }
469
- }
470
402
  function findPackageRoot() {
471
403
  let dir = path.dirname(new URL(import.meta.url).pathname);
472
404
  for (let i = 0; i < 5; i++) {
package/dist/setup.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openclaw-telegram-manager",
3
- "version": "1.2.0",
3
+ "version": "1.3.1",
4
4
  "type": "module",
5
5
  "description": "Deterministic Telegram forum topic management for OpenClaw",
6
6
  "license": "MIT",
@@ -13,14 +13,13 @@
13
13
  "openclaw-telegram-manager": "./dist/setup.js"
14
14
  },
15
15
  "files": [
16
- "src/",
17
16
  "dist/",
18
17
  "skills/",
19
18
  "openclaw.plugin.json"
20
19
  ],
21
20
  "openclaw": {
22
21
  "extensions": [
23
- "./src/index.ts"
22
+ "./dist/plugin.js"
24
23
  ]
25
24
  },
26
25
  "peerDependencies": {
@@ -40,10 +39,11 @@
40
39
  "@types/proper-lockfile": "^4.1.4",
41
40
  "semantic-release": "^25.0.3",
42
41
  "typescript": "^5.9.3",
42
+ "esbuild": "^0.25.0",
43
43
  "vitest": "^4.0.18"
44
44
  },
45
45
  "scripts": {
46
- "build": "tsc --project tsconfig.build.json",
46
+ "build": "tsc --project tsconfig.build.json && esbuild src/index.ts --bundle --platform=node --target=node18 --format=esm --outfile=dist/plugin.js",
47
47
  "prepublishOnly": "npm run build",
48
48
  "test": "vitest run",
49
49
  "lint": "tsc --noEmit",
@@ -1,89 +0,0 @@
1
- import { withRegistry, readRegistry } from '../lib/registry.js';
2
- import { checkAuthorization } from '../lib/auth.js';
3
- import { topicKey } from '../lib/types.js';
4
- import { htmlEscape } from '../lib/security.js';
5
- import { appendAudit, buildAuditEntry } from '../lib/audit.js';
6
- import { generateInclude } from '../lib/include-generator.js';
7
- import { triggerRestart, getConfigWrites } from '../lib/config-restart.js';
8
- import type { CommandContext, CommandResult } from './help.js';
9
-
10
- export async function handleArchive(ctx: CommandContext): Promise<CommandResult> {
11
- return handleArchiveToggle(ctx, true);
12
- }
13
-
14
- export async function handleUnarchive(ctx: CommandContext): Promise<CommandResult> {
15
- return handleArchiveToggle(ctx, false);
16
- }
17
-
18
- async function handleArchiveToggle(ctx: CommandContext, archive: boolean): Promise<CommandResult> {
19
- const { workspaceDir, configDir, userId, groupId, threadId, rpc, logger } = ctx;
20
- const command = archive ? 'archive' : 'unarchive';
21
-
22
- if (!userId || !groupId || !threadId) {
23
- return { text: 'Missing context: userId, groupId, or threadId not available.' };
24
- }
25
-
26
- const registry = readRegistry(workspaceDir);
27
-
28
- // Auth check (admin tier)
29
- const auth = checkAuthorization(userId, command, registry);
30
- if (!auth.authorized) {
31
- return { text: auth.message ?? 'Not authorized.' };
32
- }
33
-
34
- const key = topicKey(groupId, threadId);
35
- const entry = registry.topics[key];
36
-
37
- if (!entry) {
38
- return { text: 'This topic is not registered. Run /topic init first.' };
39
- }
40
-
41
- if (archive && entry.status === 'archived') {
42
- return { text: `Topic <code>${htmlEscape(entry.slug)}</code> is already archived.` };
43
- }
44
-
45
- if (!archive && entry.status !== 'archived') {
46
- return { text: `Topic <code>${htmlEscape(entry.slug)}</code> is not archived.` };
47
- }
48
-
49
- const newStatus = archive ? 'archived' : 'active';
50
-
51
- await withRegistry(workspaceDir, (data) => {
52
- const topic = data.topics[key];
53
- if (topic) {
54
- topic.status = newStatus;
55
- if (!archive) {
56
- topic.snoozeUntil = null;
57
- }
58
- }
59
- });
60
-
61
- // Regenerate include if configWrites enabled
62
- let restartMsg = '';
63
- const configWritesEnabled = await getConfigWrites(ctx.rpc);
64
- if (configWritesEnabled) {
65
- try {
66
- const updatedRegistry = readRegistry(workspaceDir);
67
- generateInclude(workspaceDir, updatedRegistry, configDir);
68
- } catch (err) {
69
- const msg = err instanceof Error ? err.message : String(err);
70
- restartMsg = `\nWarning: include generation failed: ${htmlEscape(msg)}`;
71
- }
72
- const result = await triggerRestart(rpc, logger);
73
- if (!result.success && result.fallbackMessage) {
74
- restartMsg += '\n' + result.fallbackMessage;
75
- }
76
- }
77
-
78
- appendAudit(
79
- workspaceDir,
80
- buildAuditEntry(userId, command, entry.slug, `Status changed to ${newStatus}`),
81
- );
82
-
83
- const action = archive ? 'archived' : 'unarchived';
84
- return {
85
- text: `Topic <code>${htmlEscape(entry.slug)}</code> ${action}.${restartMsg}`,
86
- parseMode: 'HTML',
87
- };
88
- }
89
-
@@ -1,243 +0,0 @@
1
- import * as fs from 'node:fs';
2
- import * as path from 'node:path';
3
- import { readRegistry, withRegistry } from '../lib/registry.js';
4
- import { checkAuthorization } from '../lib/auth.js';
5
- import {
6
- DOCTOR_ALL_COOLDOWN_MS,
7
- DOCTOR_PER_TOPIC_CAP_MS,
8
- INACTIVE_AFTER_DAYS,
9
- SPAM_THRESHOLD,
10
- } from '../lib/types.js';
11
- import type { TopicEntry, InlineKeyboardMarkup } from '../lib/types.js';
12
- import { htmlEscape } from '../lib/security.js';
13
- import { buildDoctorReport, buildDoctorButtons } from '../lib/telegram.js';
14
- import { runAllChecksForTopic } from '../lib/doctor-checks.js';
15
- import { includePath } from '../lib/include-generator.js';
16
- import type { CommandContext, CommandResult } from './help.js';
17
-
18
- interface TopicReport {
19
- slug: string;
20
- groupId: string;
21
- threadId: string;
22
- text: string;
23
- keyboard: InlineKeyboardMarkup;
24
- error?: string;
25
- }
26
-
27
- export async function handleDoctorAll(ctx: CommandContext): Promise<CommandResult> {
28
- const { workspaceDir, configDir, userId, logger } = ctx;
29
-
30
- if (!userId) {
31
- return { text: 'Missing context: userId not available.' };
32
- }
33
-
34
- const registry = readRegistry(workspaceDir);
35
-
36
- // Auth check (admin tier)
37
- const auth = checkAuthorization(userId, 'doctor-all', registry);
38
- if (!auth.authorized) {
39
- return { text: auth.message ?? 'Not authorized.' };
40
- }
41
-
42
- // Global cooldown check
43
- if (registry.lastDoctorAllRunAt) {
44
- const lastRun = new Date(registry.lastDoctorAllRunAt).getTime();
45
- const elapsed = Date.now() - lastRun;
46
- if (elapsed < DOCTOR_ALL_COOLDOWN_MS) {
47
- const remainingMin = Math.ceil((DOCTOR_ALL_COOLDOWN_MS - elapsed) / 60_000);
48
- return {
49
- text: `Doctor-all was run ${Math.floor(elapsed / 60_000)} minutes ago. Try again in ${remainingMin} minute(s).`,
50
- };
51
- }
52
- }
53
-
54
- const now = new Date();
55
- const projectsBase = path.join(workspaceDir, 'projects');
56
-
57
- // Read include content for config checks (optional)
58
- let includeContent: string | undefined;
59
- const incPath = includePath(configDir);
60
- try {
61
- if (fs.existsSync(incPath)) {
62
- includeContent = fs.readFileSync(incPath, 'utf-8');
63
- }
64
- } catch {
65
- // Not critical
66
- }
67
-
68
- const cronJobsPath = path.join(configDir, 'cron', 'jobs.json');
69
- const allEntries = Object.entries(registry.topics);
70
- const reports: TopicReport[] = [];
71
- const errors: string[] = [];
72
- let processed = 0;
73
- let skipped = 0;
74
-
75
- // Group tracking for migration detection
76
- const groupPostResults = new Map<string, { total: number; failed: number }>();
77
-
78
- for (const [_key, entry] of allEntries) {
79
- // Eligibility gating
80
- if (!isEligible(entry, now)) {
81
- skipped++;
82
- continue;
83
- }
84
-
85
- try {
86
- const results = runAllChecksForTopic(
87
- entry,
88
- projectsBase,
89
- includeContent,
90
- registry,
91
- cronJobsPath,
92
- );
93
-
94
- // Spam control: auto-snooze if threshold reached
95
- const isSpam = entry.consecutiveSilentDoctors >= SPAM_THRESHOLD;
96
- if (isSpam) {
97
- // Auto-snooze is handled via the check result; we just note it
98
- logger.info(`[doctor-all] Auto-snoozing ${entry.slug} (${entry.consecutiveSilentDoctors} silent runs)`);
99
- }
100
-
101
- const reportText = buildDoctorReport(entry.slug, results);
102
- const keyboard = buildDoctorButtons(
103
- entry.slug,
104
- entry.groupId,
105
- entry.threadId,
106
- registry.callbackSecret,
107
- );
108
-
109
- reports.push({
110
- slug: entry.slug,
111
- groupId: entry.groupId,
112
- threadId: entry.threadId,
113
- text: reportText,
114
- keyboard,
115
- });
116
-
117
- // Track group post results for migration detection
118
- const gk = entry.groupId;
119
- if (!groupPostResults.has(gk)) {
120
- groupPostResults.set(gk, { total: 0, failed: 0 });
121
- }
122
- const group = groupPostResults.get(gk)!;
123
- group.total++;
124
-
125
- processed++;
126
- } catch (err) {
127
- const msg = err instanceof Error ? err.message : String(err);
128
- errors.push(`${entry.slug}: ${msg}`);
129
- logger.error(`[doctor-all] Error processing ${entry.slug}: ${msg}`);
130
-
131
- // Track failures for migration detection
132
- const gk = entry.groupId;
133
- if (!groupPostResults.has(gk)) {
134
- groupPostResults.set(gk, { total: 0, failed: 0 });
135
- }
136
- const group = groupPostResults.get(gk)!;
137
- group.total++;
138
- group.failed++;
139
- }
140
- }
141
-
142
- // Migration detection: all topics in a group failed
143
- const migrationGroups: string[] = [];
144
- for (const [gid, stats] of groupPostResults) {
145
- if (stats.total > 0 && stats.failed === stats.total) {
146
- migrationGroups.push(gid);
147
- }
148
- }
149
-
150
- // Update registry: lastDoctorAllRunAt and per-topic timestamps
151
- await withRegistry(workspaceDir, (data) => {
152
- data.lastDoctorAllRunAt = now.toISOString();
153
-
154
- for (const [_key, entry] of Object.entries(data.topics)) {
155
- if (!isEligible(entry, now)) continue;
156
-
157
- // Update consecutiveSilentDoctors (compare against old lastDoctorRunAt before overwriting)
158
- if (entry.lastMessageAt) {
159
- const lastMsg = new Date(entry.lastMessageAt).getTime();
160
- const lastDoctor = entry.lastDoctorRunAt
161
- ? new Date(entry.lastDoctorRunAt).getTime()
162
- : 0;
163
-
164
- if (lastMsg > lastDoctor) {
165
- // User interacted since last doctor run — reset counter
166
- entry.consecutiveSilentDoctors = 0;
167
- } else {
168
- entry.consecutiveSilentDoctors++;
169
- }
170
- } else {
171
- entry.consecutiveSilentDoctors++;
172
- }
173
-
174
- entry.lastDoctorRunAt = now.toISOString();
175
-
176
- // Auto-snooze for spam control
177
- if (entry.consecutiveSilentDoctors >= SPAM_THRESHOLD) {
178
- entry.snoozeUntil = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString();
179
- entry.status = 'snoozed';
180
- entry.consecutiveSilentDoctors = 0;
181
- }
182
- }
183
- });
184
-
185
- // Build summary
186
- const lines: string[] = [
187
- `<b>Doctor All Summary</b>`,
188
- '',
189
- `Processed: ${processed}`,
190
- `Skipped (ineligible): ${skipped}`,
191
- `Total: ${allEntries.length}`,
192
- ];
193
-
194
- if (errors.length > 0) {
195
- lines.push('');
196
- lines.push(`<b>Errors (${errors.length}):</b>`);
197
- for (const e of errors.slice(0, 10)) {
198
- lines.push(`- ${htmlEscape(e)}`);
199
- }
200
- if (errors.length > 10) {
201
- lines.push(`... and ${errors.length - 10} more`);
202
- }
203
- }
204
-
205
- if (migrationGroups.length > 0) {
206
- lines.push('');
207
- lines.push('<b>Possible group migrations detected:</b>');
208
- for (const gid of migrationGroups) {
209
- lines.push(`- Group ${htmlEscape(gid)}: all topics failed. Check for group migration.`);
210
- }
211
- }
212
-
213
- // Per-topic reports are returned as a summary for the calling context.
214
- // The tool router is responsible for posting individual reports to each topic.
215
- // Here we return the summary to the current thread.
216
- return {
217
- text: lines.join('\n'),
218
- parseMode: 'HTML',
219
- };
220
- }
221
-
222
- function isEligible(entry: TopicEntry, now: Date): boolean {
223
- // Skip archived
224
- if (entry.status === 'archived') return false;
225
-
226
- // Skip snoozed
227
- if (entry.snoozeUntil && new Date(entry.snoozeUntil).getTime() > now.getTime()) return false;
228
-
229
- // Skip inactive (no activity for INACTIVE_AFTER_DAYS)
230
- if (entry.lastMessageAt) {
231
- const lastActive = new Date(entry.lastMessageAt).getTime();
232
- const inactiveMs = INACTIVE_AFTER_DAYS * 24 * 60 * 60 * 1000;
233
- if (now.getTime() - lastActive > inactiveMs) return false;
234
- }
235
-
236
- // Skip if reported in last 24 hours
237
- if (entry.lastDoctorReportAt) {
238
- const lastReport = new Date(entry.lastDoctorReportAt).getTime();
239
- if (now.getTime() - lastReport < DOCTOR_PER_TOPIC_CAP_MS) return false;
240
- }
241
-
242
- return true;
243
- }