mcp-astgl-knowledge 1.0.2 → 1.1.0
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 +146 -38
- package/data/knowledge.db +0 -0
- package/dist/alerts.d.ts +22 -0
- package/dist/alerts.js +433 -0
- package/dist/alerts.js.map +1 -0
- package/dist/citation-test.d.ts +14 -0
- package/dist/citation-test.js +298 -0
- package/dist/citation-test.js.map +1 -0
- package/dist/daily-report.d.ts +15 -0
- package/dist/daily-report.js +441 -0
- package/dist/daily-report.js.map +1 -0
- package/dist/discover.js +3 -1
- package/dist/discover.js.map +1 -1
- package/dist/freshness.d.ts +20 -0
- package/dist/freshness.js +508 -0
- package/dist/freshness.js.map +1 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.js +253 -14
- package/dist/index.js.map +1 -1
- package/dist/ingest-projects.d.ts +16 -0
- package/dist/ingest-projects.js +196 -0
- package/dist/ingest-projects.js.map +1 -0
- package/dist/knowledge-db.d.ts +13 -0
- package/dist/knowledge-db.js +156 -0
- package/dist/knowledge-db.js.map +1 -0
- package/dist/pipeline.d.ts +12 -0
- package/dist/pipeline.js +83 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/query-log.d.ts +15 -0
- package/dist/query-log.js +93 -0
- package/dist/query-log.js.map +1 -0
- package/dist/rate-limit.d.ts +34 -0
- package/dist/rate-limit.js +206 -0
- package/dist/rate-limit.js.map +1 -0
- package/dist/related-articles.d.ts +15 -0
- package/dist/related-articles.js +217 -0
- package/dist/related-articles.js.map +1 -0
- package/dist/search.d.ts +13 -4
- package/dist/search.js +274 -39
- package/dist/search.js.map +1 -1
- package/dist/structure.d.ts +11 -0
- package/dist/structure.js +451 -0
- package/dist/structure.js.map +1 -0
- package/dist/types.d.ts +65 -0
- package/dist/types.js.map +1 -1
- package/package.json +10 -2
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* Daily AEO report generator.
|
|
4
|
+
*
|
|
5
|
+
* WHAT: Aggregates query logs, content stats, and health metrics into a daily report
|
|
6
|
+
* WHY: Tracks AEO effectiveness — query volume, top topics, gaps, stale content
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npm run daily-report Print report to stdout (JSON)
|
|
10
|
+
* npm run daily-report -- --discord Send report to Discord webhook
|
|
11
|
+
* npm run daily-report -- --days 7 Look back 7 days instead of 1
|
|
12
|
+
*
|
|
13
|
+
* Env: DISCORD_WEBHOOK_URL — Discord webhook for automated delivery
|
|
14
|
+
*/
|
|
15
|
+
import { join } from "path";
|
|
16
|
+
import { existsSync } from "fs";
|
|
17
|
+
import Database from "better-sqlite3";
|
|
18
|
+
const DATA_DIR = join(import.meta.dirname, "..", "data");
|
|
19
|
+
const QUERY_LOG_PATH = join(DATA_DIR, "query-log.db");
|
|
20
|
+
const KNOWLEDGE_PATH = join(DATA_DIR, "knowledge.db");
|
|
21
|
+
const DISCOVERY_PATH = join(DATA_DIR, "discovery.db");
|
|
22
|
+
const DISCORD_WEBHOOK_URL = process.env.DISCORD_WEBHOOK_URL || "";
|
|
23
|
+
// WHAT: Parse CLI args for --discord flag and --days N
|
|
24
|
+
// WHY: Keeps the script flexible for both cron (Discord) and manual (stdout) use
|
|
25
|
+
function parseArgs() {
|
|
26
|
+
const args = process.argv.slice(2);
|
|
27
|
+
return {
|
|
28
|
+
sendToDiscord: args.includes("--discord"),
|
|
29
|
+
days: (() => {
|
|
30
|
+
const idx = args.indexOf("--days");
|
|
31
|
+
return idx >= 0 && args[idx + 1] ? parseInt(args[idx + 1], 10) : 1;
|
|
32
|
+
})(),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function getQueryStats(days, fromDate) {
|
|
36
|
+
const defaults = {
|
|
37
|
+
total: 0,
|
|
38
|
+
by_tool: {},
|
|
39
|
+
unique_sessions: 0,
|
|
40
|
+
avg_response_ms: 0,
|
|
41
|
+
avg_confidence: 0,
|
|
42
|
+
top_queries: [],
|
|
43
|
+
top_cited: [],
|
|
44
|
+
low_confidence: [],
|
|
45
|
+
};
|
|
46
|
+
if (!existsSync(QUERY_LOG_PATH))
|
|
47
|
+
return defaults;
|
|
48
|
+
let db;
|
|
49
|
+
try {
|
|
50
|
+
db = new Database(QUERY_LOG_PATH, { readonly: true });
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return defaults;
|
|
54
|
+
}
|
|
55
|
+
// WHAT: Check if table exists (DB may be empty/corrupt)
|
|
56
|
+
const tableCheck = db
|
|
57
|
+
.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='query_log'")
|
|
58
|
+
.get();
|
|
59
|
+
if (!tableCheck) {
|
|
60
|
+
db.close();
|
|
61
|
+
return defaults;
|
|
62
|
+
}
|
|
63
|
+
const summary = db
|
|
64
|
+
.prepare(`SELECT
|
|
65
|
+
COUNT(*) as total,
|
|
66
|
+
COUNT(DISTINCT client_id) as unique_sessions,
|
|
67
|
+
ROUND(AVG(response_time_ms)) as avg_response_ms,
|
|
68
|
+
ROUND(AVG(confidence_score), 3) as avg_confidence
|
|
69
|
+
FROM query_log
|
|
70
|
+
WHERE timestamp >= ?`)
|
|
71
|
+
.get(fromDate);
|
|
72
|
+
const byTool = db
|
|
73
|
+
.prepare(`SELECT tool_name, COUNT(*) as count
|
|
74
|
+
FROM query_log WHERE timestamp >= ?
|
|
75
|
+
GROUP BY tool_name ORDER BY count DESC`)
|
|
76
|
+
.all(fromDate);
|
|
77
|
+
// WHAT: Extract the actual query text from JSON params
|
|
78
|
+
// WHY: query_params is stored as JSON — need to parse for readability
|
|
79
|
+
const topQueries = db
|
|
80
|
+
.prepare(`SELECT query_params, tool_name, COUNT(*) as count
|
|
81
|
+
FROM query_log WHERE timestamp >= ?
|
|
82
|
+
GROUP BY query_params, tool_name
|
|
83
|
+
ORDER BY count DESC LIMIT 10`)
|
|
84
|
+
.all(fromDate);
|
|
85
|
+
// WHAT: Count how often each URL was cited across all queries
|
|
86
|
+
// WHY: Shows which content is most valuable to AI consumers
|
|
87
|
+
const allCited = db
|
|
88
|
+
.prepare(`SELECT content_cited FROM query_log
|
|
89
|
+
WHERE timestamp >= ? AND content_cited IS NOT NULL`)
|
|
90
|
+
.all(fromDate);
|
|
91
|
+
const citedCounts = new Map();
|
|
92
|
+
for (const row of allCited) {
|
|
93
|
+
try {
|
|
94
|
+
const urls = JSON.parse(row.content_cited);
|
|
95
|
+
for (const url of urls) {
|
|
96
|
+
citedCounts.set(url, (citedCounts.get(url) || 0) + 1);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// Skip malformed JSON
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const topCited = [...citedCounts.entries()]
|
|
104
|
+
.sort((a, b) => b[1] - a[1])
|
|
105
|
+
.slice(0, 10)
|
|
106
|
+
.map(([url, count]) => ({ url, times_cited: count }));
|
|
107
|
+
// WHAT: Queries with low confidence scores (< 0.6)
|
|
108
|
+
// WHY: These represent content gaps — users asking questions we can't answer well
|
|
109
|
+
const lowConf = db
|
|
110
|
+
.prepare(`SELECT query_params, confidence_score, tool_name
|
|
111
|
+
FROM query_log
|
|
112
|
+
WHERE timestamp >= ? AND confidence_score < 0.6 AND confidence_score IS NOT NULL
|
|
113
|
+
ORDER BY confidence_score ASC LIMIT 10`)
|
|
114
|
+
.all(fromDate);
|
|
115
|
+
db.close();
|
|
116
|
+
return {
|
|
117
|
+
total: summary.total,
|
|
118
|
+
by_tool: Object.fromEntries(byTool.map((r) => [r.tool_name, r.count])),
|
|
119
|
+
unique_sessions: summary.unique_sessions,
|
|
120
|
+
avg_response_ms: summary.avg_response_ms || 0,
|
|
121
|
+
avg_confidence: summary.avg_confidence || 0,
|
|
122
|
+
top_queries: topQueries.map((r) => {
|
|
123
|
+
let query = r.query_params;
|
|
124
|
+
try {
|
|
125
|
+
const parsed = JSON.parse(r.query_params);
|
|
126
|
+
query = parsed.query || parsed.question || parsed.topic_a || r.query_params;
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// Use raw string
|
|
130
|
+
}
|
|
131
|
+
return { query, tool: r.tool_name, count: r.count };
|
|
132
|
+
}),
|
|
133
|
+
top_cited: topCited,
|
|
134
|
+
low_confidence: lowConf.map((r) => {
|
|
135
|
+
let query = r.query_params;
|
|
136
|
+
try {
|
|
137
|
+
const parsed = JSON.parse(r.query_params);
|
|
138
|
+
query = parsed.query || parsed.question || r.query_params;
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// Use raw
|
|
142
|
+
}
|
|
143
|
+
return { query, confidence: r.confidence_score, tool: r.tool_name };
|
|
144
|
+
}),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
function getContentStats(days, fromDate) {
|
|
148
|
+
const defaults = {
|
|
149
|
+
total_articles: 0,
|
|
150
|
+
total_chunks: 0,
|
|
151
|
+
by_type: {},
|
|
152
|
+
recently_indexed: [],
|
|
153
|
+
stale: [],
|
|
154
|
+
freshnessSummary: {},
|
|
155
|
+
};
|
|
156
|
+
if (!existsSync(KNOWLEDGE_PATH))
|
|
157
|
+
return defaults;
|
|
158
|
+
const db = new Database(KNOWLEDGE_PATH, { readonly: true });
|
|
159
|
+
const articleCount = db
|
|
160
|
+
.prepare("SELECT COUNT(*) as count FROM articles")
|
|
161
|
+
.get();
|
|
162
|
+
const chunkCount = db
|
|
163
|
+
.prepare("SELECT COUNT(*) as count FROM chunks")
|
|
164
|
+
.get();
|
|
165
|
+
const byType = db
|
|
166
|
+
.prepare(`SELECT COALESCE(content_type, 'article') as content_type, COUNT(*) as count
|
|
167
|
+
FROM articles GROUP BY content_type`)
|
|
168
|
+
.all();
|
|
169
|
+
const recentlyIndexed = db
|
|
170
|
+
.prepare(`SELECT title, url, processed_at
|
|
171
|
+
FROM articles
|
|
172
|
+
WHERE processed_at >= ?
|
|
173
|
+
ORDER BY processed_at DESC LIMIT 10`)
|
|
174
|
+
.all(fromDate);
|
|
175
|
+
// WHAT: Articles not updated in 90+ days
|
|
176
|
+
// WHY: Stale content may have outdated info that hurts citation quality
|
|
177
|
+
const STALE_DAYS = 90;
|
|
178
|
+
const staleDate = new Date();
|
|
179
|
+
staleDate.setDate(staleDate.getDate() - STALE_DAYS);
|
|
180
|
+
const stale = db
|
|
181
|
+
.prepare(`SELECT title, url, processed_at
|
|
182
|
+
FROM articles
|
|
183
|
+
WHERE processed_at IS NOT NULL AND processed_at < ?
|
|
184
|
+
ORDER BY processed_at ASC LIMIT 10`)
|
|
185
|
+
.all(staleDate.toISOString());
|
|
186
|
+
// WHAT: Count articles by freshness_status
|
|
187
|
+
// WHY: Shows at a glance how many articles need attention
|
|
188
|
+
let freshnessSummary = {};
|
|
189
|
+
try {
|
|
190
|
+
const byStatus = db
|
|
191
|
+
.prepare(`SELECT COALESCE(freshness_status, 'current') as status, COUNT(*) as count
|
|
192
|
+
FROM articles GROUP BY freshness_status`)
|
|
193
|
+
.all();
|
|
194
|
+
freshnessSummary = Object.fromEntries(byStatus.map((r) => [r.status, r.count]));
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
// freshness_status column may not exist yet
|
|
198
|
+
}
|
|
199
|
+
db.close();
|
|
200
|
+
const now = Date.now();
|
|
201
|
+
return {
|
|
202
|
+
total_articles: articleCount.count,
|
|
203
|
+
total_chunks: chunkCount.count,
|
|
204
|
+
by_type: Object.fromEntries(byType.map((r) => [r.content_type, r.count])),
|
|
205
|
+
recently_indexed: recentlyIndexed.map((r) => ({
|
|
206
|
+
title: r.title,
|
|
207
|
+
url: r.url,
|
|
208
|
+
indexed_at: r.processed_at,
|
|
209
|
+
})),
|
|
210
|
+
stale: stale.map((r) => ({
|
|
211
|
+
title: r.title,
|
|
212
|
+
url: r.url,
|
|
213
|
+
days_since_indexed: Math.floor((now - new Date(r.processed_at).getTime()) / (1000 * 60 * 60 * 24)),
|
|
214
|
+
})),
|
|
215
|
+
freshnessSummary,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
function getDiscoveryStats() {
|
|
219
|
+
if (!existsSync(DISCOVERY_PATH))
|
|
220
|
+
return { pending: 0, total_discovered: 0 };
|
|
221
|
+
const db = new Database(DISCOVERY_PATH, { readonly: true });
|
|
222
|
+
const tableCheck = db
|
|
223
|
+
.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='discovered_content'")
|
|
224
|
+
.get();
|
|
225
|
+
if (!tableCheck) {
|
|
226
|
+
db.close();
|
|
227
|
+
return { pending: 0, total_discovered: 0 };
|
|
228
|
+
}
|
|
229
|
+
const stats = db
|
|
230
|
+
.prepare(`SELECT
|
|
231
|
+
COUNT(*) as total,
|
|
232
|
+
SUM(CASE WHEN is_new = 1 THEN 1 ELSE 0 END) as pending
|
|
233
|
+
FROM discovered_content`)
|
|
234
|
+
.get();
|
|
235
|
+
db.close();
|
|
236
|
+
return { pending: stats.pending, total_discovered: stats.total };
|
|
237
|
+
}
|
|
238
|
+
function buildReport(days) {
|
|
239
|
+
const now = new Date();
|
|
240
|
+
const from = new Date(now);
|
|
241
|
+
from.setDate(from.getDate() - days);
|
|
242
|
+
const fromDate = from.toISOString();
|
|
243
|
+
const queryStats = getQueryStats(days, fromDate);
|
|
244
|
+
const contentStats = getContentStats(days, fromDate);
|
|
245
|
+
const discoveryStats = getDiscoveryStats();
|
|
246
|
+
const issues = [];
|
|
247
|
+
if (!existsSync(QUERY_LOG_PATH))
|
|
248
|
+
issues.push("query-log.db not found — MCP server may not have been used yet");
|
|
249
|
+
if (!existsSync(KNOWLEDGE_PATH))
|
|
250
|
+
issues.push("knowledge.db not found — run 'npm run ingest'");
|
|
251
|
+
if (!existsSync(DISCOVERY_PATH))
|
|
252
|
+
issues.push("discovery.db not found — run 'npm run discover'");
|
|
253
|
+
if (discoveryStats.pending > 0)
|
|
254
|
+
issues.push(`${discoveryStats.pending} discovered items pending structuring`);
|
|
255
|
+
if (queryStats.avg_confidence > 0 && queryStats.avg_confidence < 0.6)
|
|
256
|
+
issues.push("Average confidence below 0.6 — content may need expansion");
|
|
257
|
+
return {
|
|
258
|
+
generated_at: now.toISOString(),
|
|
259
|
+
period: {
|
|
260
|
+
days,
|
|
261
|
+
from: fromDate,
|
|
262
|
+
to: now.toISOString(),
|
|
263
|
+
},
|
|
264
|
+
query_volume: {
|
|
265
|
+
total: queryStats.total,
|
|
266
|
+
by_tool: queryStats.by_tool,
|
|
267
|
+
unique_sessions: queryStats.unique_sessions,
|
|
268
|
+
avg_response_ms: queryStats.avg_response_ms,
|
|
269
|
+
avg_confidence: queryStats.avg_confidence,
|
|
270
|
+
},
|
|
271
|
+
top_queries: queryStats.top_queries,
|
|
272
|
+
top_cited: queryStats.top_cited,
|
|
273
|
+
low_confidence: queryStats.low_confidence,
|
|
274
|
+
content_stats: {
|
|
275
|
+
total_articles: contentStats.total_articles,
|
|
276
|
+
total_chunks: contentStats.total_chunks,
|
|
277
|
+
by_type: contentStats.by_type,
|
|
278
|
+
recently_indexed: contentStats.recently_indexed,
|
|
279
|
+
},
|
|
280
|
+
stale_content: contentStats.stale,
|
|
281
|
+
freshness_summary: contentStats.freshnessSummary,
|
|
282
|
+
discovery_stats: discoveryStats,
|
|
283
|
+
health: {
|
|
284
|
+
query_log_exists: existsSync(QUERY_LOG_PATH),
|
|
285
|
+
knowledge_db_exists: existsSync(KNOWLEDGE_PATH),
|
|
286
|
+
discovery_db_exists: existsSync(DISCOVERY_PATH),
|
|
287
|
+
issues,
|
|
288
|
+
},
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
// WHAT: Format report as a Discord embed message
|
|
292
|
+
// WHY: Embeds are structured, scannable, and look professional in Discord channels
|
|
293
|
+
function formatDiscordEmbed(report) {
|
|
294
|
+
const fields = [];
|
|
295
|
+
// Query volume
|
|
296
|
+
const toolBreakdown = Object.entries(report.query_volume.by_tool)
|
|
297
|
+
.map(([tool, count]) => `${tool}: ${count}`)
|
|
298
|
+
.join("\n") || "No queries";
|
|
299
|
+
fields.push({
|
|
300
|
+
name: "Query Volume",
|
|
301
|
+
value: [
|
|
302
|
+
`**Total:** ${report.query_volume.total}`,
|
|
303
|
+
`**Sessions:** ${report.query_volume.unique_sessions}`,
|
|
304
|
+
`**Avg Response:** ${report.query_volume.avg_response_ms}ms`,
|
|
305
|
+
`**Avg Confidence:** ${report.query_volume.avg_confidence}`,
|
|
306
|
+
].join("\n"),
|
|
307
|
+
inline: true,
|
|
308
|
+
});
|
|
309
|
+
fields.push({
|
|
310
|
+
name: "By Tool",
|
|
311
|
+
value: toolBreakdown,
|
|
312
|
+
inline: true,
|
|
313
|
+
});
|
|
314
|
+
// Content stats
|
|
315
|
+
const typeBreakdown = Object.entries(report.content_stats.by_type)
|
|
316
|
+
.map(([type, count]) => `${type}: ${count}`)
|
|
317
|
+
.join(", ");
|
|
318
|
+
fields.push({
|
|
319
|
+
name: "Knowledge Base",
|
|
320
|
+
value: [
|
|
321
|
+
`**Articles:** ${report.content_stats.total_articles}`,
|
|
322
|
+
`**Chunks:** ${report.content_stats.total_chunks}`,
|
|
323
|
+
`**Types:** ${typeBreakdown}`,
|
|
324
|
+
].join("\n"),
|
|
325
|
+
inline: true,
|
|
326
|
+
});
|
|
327
|
+
// Top queries
|
|
328
|
+
if (report.top_queries.length > 0) {
|
|
329
|
+
fields.push({
|
|
330
|
+
name: "Top Queries",
|
|
331
|
+
value: report.top_queries
|
|
332
|
+
.slice(0, 5)
|
|
333
|
+
.map((q, i) => `${i + 1}. "${q.query}" (${q.count}x)`)
|
|
334
|
+
.join("\n"),
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
// Top cited
|
|
338
|
+
if (report.top_cited.length > 0) {
|
|
339
|
+
fields.push({
|
|
340
|
+
name: "Most Cited",
|
|
341
|
+
value: report.top_cited
|
|
342
|
+
.slice(0, 5)
|
|
343
|
+
.map((c, i) => `${i + 1}. ${c.url} (${c.times_cited}x)`)
|
|
344
|
+
.join("\n"),
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
// Low confidence (content gaps)
|
|
348
|
+
if (report.low_confidence.length > 0) {
|
|
349
|
+
fields.push({
|
|
350
|
+
name: "Content Gaps (Low Confidence)",
|
|
351
|
+
value: report.low_confidence
|
|
352
|
+
.slice(0, 5)
|
|
353
|
+
.map((q) => `"${q.query}" → ${q.confidence}`)
|
|
354
|
+
.join("\n"),
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
// New content
|
|
358
|
+
if (report.content_stats.recently_indexed.length > 0) {
|
|
359
|
+
fields.push({
|
|
360
|
+
name: "Recently Indexed",
|
|
361
|
+
value: report.content_stats.recently_indexed
|
|
362
|
+
.slice(0, 5)
|
|
363
|
+
.map((a) => `[${a.title}](${a.url})`)
|
|
364
|
+
.join("\n"),
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
// Freshness summary
|
|
368
|
+
if (Object.keys(report.freshness_summary).length > 0) {
|
|
369
|
+
const statusLine = Object.entries(report.freshness_summary)
|
|
370
|
+
.map(([status, count]) => `**${status}:** ${count}`)
|
|
371
|
+
.join(" | ");
|
|
372
|
+
fields.push({ name: "Content Freshness", value: statusLine });
|
|
373
|
+
}
|
|
374
|
+
// Stale content
|
|
375
|
+
if (report.stale_content.length > 0) {
|
|
376
|
+
fields.push({
|
|
377
|
+
name: "Stale Content (90+ days)",
|
|
378
|
+
value: report.stale_content
|
|
379
|
+
.slice(0, 5)
|
|
380
|
+
.map((a) => `${a.title} (${a.days_since_indexed}d)`)
|
|
381
|
+
.join("\n"),
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
// Health issues
|
|
385
|
+
if (report.health.issues.length > 0) {
|
|
386
|
+
fields.push({
|
|
387
|
+
name: "Issues",
|
|
388
|
+
value: report.health.issues.map((i) => `⚠ ${i}`).join("\n"),
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
// Discovery
|
|
392
|
+
fields.push({
|
|
393
|
+
name: "Discovery Pipeline",
|
|
394
|
+
value: `**Total discovered:** ${report.discovery_stats.total_discovered} | **Pending:** ${report.discovery_stats.pending}`,
|
|
395
|
+
});
|
|
396
|
+
const color = report.health.issues.length > 0 ? 0xffa500 : 0x00c853;
|
|
397
|
+
return {
|
|
398
|
+
embeds: [
|
|
399
|
+
{
|
|
400
|
+
title: `ASTGL AEO Daily Report — ${report.period.days}d`,
|
|
401
|
+
color,
|
|
402
|
+
fields,
|
|
403
|
+
footer: { text: `Generated ${report.generated_at}` },
|
|
404
|
+
},
|
|
405
|
+
],
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
async function sendToDiscord(report) {
|
|
409
|
+
if (!DISCORD_WEBHOOK_URL) {
|
|
410
|
+
console.error("DISCORD_WEBHOOK_URL not set. Set it in your environment to enable Discord delivery.");
|
|
411
|
+
console.error("Example: export DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...");
|
|
412
|
+
process.exit(1);
|
|
413
|
+
}
|
|
414
|
+
const payload = formatDiscordEmbed(report);
|
|
415
|
+
const resp = await fetch(DISCORD_WEBHOOK_URL, {
|
|
416
|
+
method: "POST",
|
|
417
|
+
headers: { "Content-Type": "application/json" },
|
|
418
|
+
body: JSON.stringify(payload),
|
|
419
|
+
});
|
|
420
|
+
if (!resp.ok) {
|
|
421
|
+
const body = await resp.text();
|
|
422
|
+
throw new Error(`Discord webhook failed: ${resp.status} ${body}`);
|
|
423
|
+
}
|
|
424
|
+
console.error("Report sent to Discord successfully.");
|
|
425
|
+
}
|
|
426
|
+
async function main() {
|
|
427
|
+
const { sendToDiscord: shouldSend, days } = parseArgs();
|
|
428
|
+
const report = buildReport(days);
|
|
429
|
+
// Always output JSON to stdout (for OpenClaw logging)
|
|
430
|
+
console.log(JSON.stringify(report, null, 2));
|
|
431
|
+
if (shouldSend) {
|
|
432
|
+
await sendToDiscord(report);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
main()
|
|
436
|
+
.then(() => process.exit(0))
|
|
437
|
+
.catch((err) => {
|
|
438
|
+
console.error("Daily report failed:", err);
|
|
439
|
+
process.exit(1);
|
|
440
|
+
});
|
|
441
|
+
//# sourceMappingURL=daily-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daily-report.js","sourceRoot":"","sources":["../src/daily-report.ts"],"names":[],"mappings":"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"}
|
package/dist/discover.js
CHANGED
|
@@ -140,7 +140,9 @@ async function main() {
|
|
|
140
140
|
closeDb();
|
|
141
141
|
console.error("Content discovery complete");
|
|
142
142
|
}
|
|
143
|
-
main()
|
|
143
|
+
main()
|
|
144
|
+
.then(() => process.exit(0))
|
|
145
|
+
.catch((err) => {
|
|
144
146
|
console.error("Discovery failed:", err);
|
|
145
147
|
process.exit(1);
|
|
146
148
|
});
|
package/dist/discover.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../src/discover.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../src/discover.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* Content freshness automation.
|
|
4
|
+
*
|
|
5
|
+
* WHAT: Detects stale content and ecosystem version changes, sends Discord alerts
|
|
6
|
+
* WHY: Proactive freshness tracking prevents serving outdated info that hurts
|
|
7
|
+
* citation quality and reader trust
|
|
8
|
+
*
|
|
9
|
+
* Checks:
|
|
10
|
+
* 1. Stale content — articles older than 90 days (pub_date or processed_at)
|
|
11
|
+
* 2. MCP SDK version — polls npm registry for @modelcontextprotocol/sdk updates
|
|
12
|
+
* 3. Key tool releases — polls GitHub releases for Ollama, MCP servers, Open WebUI
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* npm run freshness Check all, print to stdout (JSON)
|
|
16
|
+
* npm run freshness -- --discord Also send triggered alerts to Discord
|
|
17
|
+
*
|
|
18
|
+
* Env: DISCORD_WEBHOOK_URL — Discord webhook for alert delivery
|
|
19
|
+
*/
|
|
20
|
+
export {};
|