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 @@
|
|
|
1
|
+
{"version":3,"file":"alerts.js","sourceRoot":"","sources":["../src/alerts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* AI Citation Testing tracker.
|
|
4
|
+
*
|
|
5
|
+
* WHAT: Tracks whether AI engines cite ASTGL articles when asked target questions
|
|
6
|
+
* WHY: Measures AEO effectiveness — if articles aren't being cited, strategy needs adjustment
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npm run citation-test -- init Initialize DB + seed 20 target questions
|
|
10
|
+
* npm run citation-test -- record Interactive: record results for a test run
|
|
11
|
+
* npm run citation-test -- report Generate citation report (latest + trends)
|
|
12
|
+
* npm run citation-test -- questions List all target questions
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* AI Citation Testing tracker.
|
|
4
|
+
*
|
|
5
|
+
* WHAT: Tracks whether AI engines cite ASTGL articles when asked target questions
|
|
6
|
+
* WHY: Measures AEO effectiveness — if articles aren't being cited, strategy needs adjustment
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npm run citation-test -- init Initialize DB + seed 20 target questions
|
|
10
|
+
* npm run citation-test -- record Interactive: record results for a test run
|
|
11
|
+
* npm run citation-test -- report Generate citation report (latest + trends)
|
|
12
|
+
* npm run citation-test -- questions List all target questions
|
|
13
|
+
*/
|
|
14
|
+
import { join } from "path";
|
|
15
|
+
import { existsSync, mkdirSync } from "fs";
|
|
16
|
+
import Database from "better-sqlite3";
|
|
17
|
+
import { createInterface } from "readline";
|
|
18
|
+
const DB_PATH = join(import.meta.dirname, "..", "data", "citation-test.db");
|
|
19
|
+
// WHAT: The 20 target questions derived from ASTGL answer articles
|
|
20
|
+
// WHY: These map 1:1 to the knowledge base — if AEO works, these should surface ASTGL
|
|
21
|
+
const TARGET_QUESTIONS = [
|
|
22
|
+
{ question: "What is an MCP server and how does it work?", expectedUrl: "https://astgl.ai/answers/what-is-an-mcp-server" },
|
|
23
|
+
{ question: "How do I build my first MCP server?", expectedUrl: "https://astgl.ai/answers/build-your-first-mcp-server" },
|
|
24
|
+
{ question: "How do I connect an MCP server to Claude or ChatGPT?", expectedUrl: "https://astgl.ai/answers/how-to-connect-mcp-server-to-claude" },
|
|
25
|
+
{ question: "What can MCP servers do that regular APIs can't?", expectedUrl: "https://astgl.ai/answers/what-can-mcp-servers-do-that-apis-cant" },
|
|
26
|
+
{ question: "What are the best MCP servers available right now?", expectedUrl: "https://astgl.ai/answers/best-mcp-servers-available-now" },
|
|
27
|
+
{ question: "How do MCP registries work?", expectedUrl: "https://astgl.ai/answers/how-mcp-registries-work" },
|
|
28
|
+
{ question: "What's the future of MCP servers in 2026?", expectedUrl: "https://astgl.ai/answers/future-of-mcp-servers-2026-2027" },
|
|
29
|
+
{ question: "Can small businesses benefit from MCP servers?", expectedUrl: "https://astgl.ai/answers/small-businesses-benefit-from-mcp-servers" },
|
|
30
|
+
{ question: "Can I use MCP servers without being a developer?", expectedUrl: "https://astgl.ai/answers/use-mcp-servers-without-being-developer" },
|
|
31
|
+
{ question: "How do I set up Ollama on Mac?", expectedUrl: "https://astgl.ai/answers/setup-ollama-mac-windows-linux" },
|
|
32
|
+
{ question: "Can I run AI models locally instead of using cloud APIs?", expectedUrl: "https://astgl.ai/answers/can-i-run-ai-models-locally" },
|
|
33
|
+
{ question: "What hardware do I need to run local LLMs?", expectedUrl: "https://astgl.ai/answers/what-hardware-do-i-need-for-local-llms" },
|
|
34
|
+
{ question: "What's the best local LLM for my specific task?", expectedUrl: "https://astgl.ai/answers/best-local-llm-for-specific-tasks" },
|
|
35
|
+
{ question: "How much does it cost to run AI locally vs cloud?", expectedUrl: "https://astgl.ai/answers/cost-of-running-ai-locally-vs-cloud" },
|
|
36
|
+
{ question: "Is it safe to run AI models on my own computer?", expectedUrl: "https://astgl.ai/answers/is-it-safe-to-run-ai-locally" },
|
|
37
|
+
{ question: "What's the ROI of local AI infrastructure?", expectedUrl: "https://astgl.ai/answers/roi-of-local-ai-infrastructure" },
|
|
38
|
+
{ question: "What is AI agent automation and how do I start?", expectedUrl: "https://astgl.ai/answers/what-is-ai-agent-automation" },
|
|
39
|
+
{ question: "How do I automate workflows with AI agents?", expectedUrl: "https://astgl.ai/answers/automate-workflows-with-ai-agents" },
|
|
40
|
+
{ question: "How do I automate business workflows with AI?", expectedUrl: "https://astgl.ai/answers/automate-business-workflows-with-ai" },
|
|
41
|
+
{ question: "How do I build an AI pipeline for content creation?", expectedUrl: "https://astgl.ai/answers/build-ai-pipeline-for-content-creation" },
|
|
42
|
+
];
|
|
43
|
+
const ENGINES = ["perplexity", "chatgpt", "claude"];
|
|
44
|
+
function initDb() {
|
|
45
|
+
const dataDir = join(import.meta.dirname, "..", "data");
|
|
46
|
+
if (!existsSync(dataDir))
|
|
47
|
+
mkdirSync(dataDir, { recursive: true });
|
|
48
|
+
const db = new Database(DB_PATH);
|
|
49
|
+
db.exec(`
|
|
50
|
+
CREATE TABLE IF NOT EXISTS target_questions (
|
|
51
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
52
|
+
question TEXT NOT NULL UNIQUE,
|
|
53
|
+
expected_url TEXT NOT NULL,
|
|
54
|
+
category TEXT NOT NULL DEFAULT 'general'
|
|
55
|
+
)
|
|
56
|
+
`);
|
|
57
|
+
db.exec(`
|
|
58
|
+
CREATE TABLE IF NOT EXISTS test_runs (
|
|
59
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
60
|
+
run_date TEXT NOT NULL,
|
|
61
|
+
engine TEXT NOT NULL,
|
|
62
|
+
notes TEXT
|
|
63
|
+
)
|
|
64
|
+
`);
|
|
65
|
+
db.exec(`
|
|
66
|
+
CREATE TABLE IF NOT EXISTS test_results (
|
|
67
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
68
|
+
run_id INTEGER NOT NULL REFERENCES test_runs(id),
|
|
69
|
+
question_id INTEGER NOT NULL REFERENCES target_questions(id),
|
|
70
|
+
cited INTEGER NOT NULL DEFAULT 0,
|
|
71
|
+
cited_url TEXT,
|
|
72
|
+
position INTEGER,
|
|
73
|
+
snippet TEXT,
|
|
74
|
+
UNIQUE(run_id, question_id)
|
|
75
|
+
)
|
|
76
|
+
`);
|
|
77
|
+
db.exec("CREATE INDEX IF NOT EXISTS idx_results_run ON test_results(run_id)");
|
|
78
|
+
db.exec("CREATE INDEX IF NOT EXISTS idx_runs_date ON test_runs(run_date)");
|
|
79
|
+
return db;
|
|
80
|
+
}
|
|
81
|
+
function seedQuestions(db) {
|
|
82
|
+
const insert = db.prepare("INSERT OR IGNORE INTO target_questions (question, expected_url, category) VALUES (?, ?, ?)");
|
|
83
|
+
const insertAll = db.transaction(() => {
|
|
84
|
+
for (const q of TARGET_QUESTIONS) {
|
|
85
|
+
// WHAT: Derive category from URL path segments
|
|
86
|
+
// WHY: Groups questions by topic cluster for per-category reporting
|
|
87
|
+
const slug = q.expectedUrl.split("/").pop() || "";
|
|
88
|
+
let category = "general";
|
|
89
|
+
if (slug.includes("mcp"))
|
|
90
|
+
category = "mcp-servers";
|
|
91
|
+
else if (slug.includes("ollama") ||
|
|
92
|
+
slug.includes("local") ||
|
|
93
|
+
slug.includes("hardware") ||
|
|
94
|
+
slug.includes("llm") ||
|
|
95
|
+
slug.includes("cost") ||
|
|
96
|
+
slug.includes("safe") ||
|
|
97
|
+
slug.includes("roi"))
|
|
98
|
+
category = "local-ai";
|
|
99
|
+
else if (slug.includes("automate") ||
|
|
100
|
+
slug.includes("agent") ||
|
|
101
|
+
slug.includes("pipeline"))
|
|
102
|
+
category = "ai-automation";
|
|
103
|
+
insert.run(q.question, q.expectedUrl, category);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
insertAll();
|
|
107
|
+
}
|
|
108
|
+
// WHAT: Prompt-based recording of test results
|
|
109
|
+
// WHY: Manual testing requires human input — this structures it into the DB
|
|
110
|
+
async function recordRun(db) {
|
|
111
|
+
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
112
|
+
const ask = (prompt) => new Promise((resolve) => rl.question(prompt, resolve));
|
|
113
|
+
const today = new Date().toISOString().split("T")[0];
|
|
114
|
+
console.error("\n=== ASTGL Citation Test Recording ===\n");
|
|
115
|
+
console.error(`Date: ${today}`);
|
|
116
|
+
console.error(`Engines: ${ENGINES.join(", ")}\n`);
|
|
117
|
+
const engineChoice = await ask(`Which engine? (${ENGINES.join("/")}): `);
|
|
118
|
+
const engine = engineChoice.trim().toLowerCase();
|
|
119
|
+
if (!ENGINES.includes(engine)) {
|
|
120
|
+
console.error(`Invalid engine: ${engine}`);
|
|
121
|
+
rl.close();
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const notes = await ask("Run notes (optional): ");
|
|
125
|
+
const run = db
|
|
126
|
+
.prepare("INSERT INTO test_runs (run_date, engine, notes) VALUES (?, ?, ?)")
|
|
127
|
+
.run(today, engine, notes || null);
|
|
128
|
+
const runId = run.lastInsertRowid;
|
|
129
|
+
const questions = db
|
|
130
|
+
.prepare("SELECT id, question, expected_url FROM target_questions ORDER BY id")
|
|
131
|
+
.all();
|
|
132
|
+
console.error(`\nRecording results for ${engine} (run #${runId})`);
|
|
133
|
+
console.error("For each question: was ASTGL cited? (y/n/s to skip)\n");
|
|
134
|
+
const insertResult = db.prepare(`INSERT INTO test_results (run_id, question_id, cited, cited_url, position, snippet)
|
|
135
|
+
VALUES (?, ?, ?, ?, ?, ?)`);
|
|
136
|
+
let cited = 0;
|
|
137
|
+
let tested = 0;
|
|
138
|
+
for (const q of questions) {
|
|
139
|
+
console.error(`Q${q.id}: ${q.question}`);
|
|
140
|
+
console.error(` Expected: ${q.expected_url}`);
|
|
141
|
+
const answer = await ask(" Cited? (y/n/s): ");
|
|
142
|
+
const a = answer.trim().toLowerCase();
|
|
143
|
+
if (a === "s")
|
|
144
|
+
continue;
|
|
145
|
+
tested++;
|
|
146
|
+
const wasCited = a === "y" ? 1 : 0;
|
|
147
|
+
if (wasCited)
|
|
148
|
+
cited++;
|
|
149
|
+
let citedUrl = null;
|
|
150
|
+
let position = null;
|
|
151
|
+
if (wasCited) {
|
|
152
|
+
const urlInput = await ask(" Cited URL (Enter for expected): ");
|
|
153
|
+
citedUrl = urlInput.trim() || q.expected_url;
|
|
154
|
+
const posInput = await ask(" Position in results (1-10): ");
|
|
155
|
+
position = posInput.trim() ? parseInt(posInput.trim(), 10) : null;
|
|
156
|
+
}
|
|
157
|
+
insertResult.run(runId, q.id, wasCited, citedUrl, position, null);
|
|
158
|
+
}
|
|
159
|
+
console.error(`\nRun #${runId} complete: ${cited}/${tested} cited (${tested > 0 ? Math.round((cited / tested) * 100) : 0}%)`);
|
|
160
|
+
rl.close();
|
|
161
|
+
}
|
|
162
|
+
// WHAT: Generate a citation report with per-engine and per-category breakdown
|
|
163
|
+
// WHY: Shows which engines cite us, which question categories work, and trends over time
|
|
164
|
+
function generateReport(db) {
|
|
165
|
+
const runs = db
|
|
166
|
+
.prepare(`SELECT r.id, r.run_date, r.engine,
|
|
167
|
+
COUNT(tr.id) as total,
|
|
168
|
+
SUM(tr.cited) as cited
|
|
169
|
+
FROM test_runs r
|
|
170
|
+
LEFT JOIN test_results tr ON tr.run_id = r.id
|
|
171
|
+
GROUP BY r.id
|
|
172
|
+
ORDER BY r.run_date DESC, r.engine`)
|
|
173
|
+
.all();
|
|
174
|
+
if (runs.length === 0) {
|
|
175
|
+
console.log(JSON.stringify({ message: "No test runs recorded yet." }));
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
// Per-engine lifetime stats
|
|
179
|
+
const engineStats = db
|
|
180
|
+
.prepare(`SELECT r.engine,
|
|
181
|
+
COUNT(tr.id) as total_tests,
|
|
182
|
+
SUM(tr.cited) as total_cited,
|
|
183
|
+
COUNT(DISTINCT r.id) as run_count
|
|
184
|
+
FROM test_runs r
|
|
185
|
+
LEFT JOIN test_results tr ON tr.run_id = r.id
|
|
186
|
+
GROUP BY r.engine`)
|
|
187
|
+
.all();
|
|
188
|
+
// Per-category stats
|
|
189
|
+
const categoryStats = db
|
|
190
|
+
.prepare(`SELECT tq.category,
|
|
191
|
+
COUNT(tr.id) as total_tests,
|
|
192
|
+
SUM(tr.cited) as total_cited
|
|
193
|
+
FROM test_results tr
|
|
194
|
+
JOIN target_questions tq ON tq.id = tr.question_id
|
|
195
|
+
GROUP BY tq.category`)
|
|
196
|
+
.all();
|
|
197
|
+
// Best and worst performing questions
|
|
198
|
+
const questionStats = db
|
|
199
|
+
.prepare(`SELECT tq.question, tq.expected_url,
|
|
200
|
+
COUNT(tr.id) as times_tested,
|
|
201
|
+
SUM(tr.cited) as times_cited
|
|
202
|
+
FROM test_results tr
|
|
203
|
+
JOIN target_questions tq ON tq.id = tr.question_id
|
|
204
|
+
GROUP BY tq.id
|
|
205
|
+
ORDER BY CAST(SUM(tr.cited) AS REAL) / COUNT(tr.id) DESC`)
|
|
206
|
+
.all();
|
|
207
|
+
const report = {
|
|
208
|
+
generated_at: new Date().toISOString(),
|
|
209
|
+
summary: {
|
|
210
|
+
total_runs: runs.length,
|
|
211
|
+
date_range: {
|
|
212
|
+
first: runs[runs.length - 1].run_date,
|
|
213
|
+
last: runs[0].run_date,
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
by_engine: engineStats.map((e) => ({
|
|
217
|
+
engine: e.engine,
|
|
218
|
+
runs: e.run_count,
|
|
219
|
+
citation_rate: `${e.total_tests > 0 ? Math.round((e.total_cited / e.total_tests) * 100) : 0}%`,
|
|
220
|
+
cited: e.total_cited,
|
|
221
|
+
tested: e.total_tests,
|
|
222
|
+
})),
|
|
223
|
+
by_category: categoryStats.map((c) => ({
|
|
224
|
+
category: c.category,
|
|
225
|
+
citation_rate: `${c.total_tests > 0 ? Math.round((c.total_cited / c.total_tests) * 100) : 0}%`,
|
|
226
|
+
cited: c.total_cited,
|
|
227
|
+
tested: c.total_tests,
|
|
228
|
+
})),
|
|
229
|
+
recent_runs: runs.slice(0, 10).map((r) => ({
|
|
230
|
+
date: r.run_date,
|
|
231
|
+
engine: r.engine,
|
|
232
|
+
citation_rate: `${r.total > 0 ? Math.round((r.cited / r.total) * 100) : 0}%`,
|
|
233
|
+
cited: r.cited,
|
|
234
|
+
tested: r.total,
|
|
235
|
+
})),
|
|
236
|
+
top_performing: questionStats.slice(0, 5).map((q) => ({
|
|
237
|
+
question: q.question,
|
|
238
|
+
citation_rate: `${q.times_tested > 0 ? Math.round((q.times_cited / q.times_tested) * 100) : 0}%`,
|
|
239
|
+
times_cited: q.times_cited,
|
|
240
|
+
times_tested: q.times_tested,
|
|
241
|
+
})),
|
|
242
|
+
needs_attention: questionStats
|
|
243
|
+
.filter((q) => q.times_cited === 0 && q.times_tested > 0)
|
|
244
|
+
.map((q) => ({
|
|
245
|
+
question: q.question,
|
|
246
|
+
expected_url: q.expected_url,
|
|
247
|
+
times_tested: q.times_tested,
|
|
248
|
+
})),
|
|
249
|
+
};
|
|
250
|
+
console.log(JSON.stringify(report, null, 2));
|
|
251
|
+
}
|
|
252
|
+
function listQuestions(db) {
|
|
253
|
+
const questions = db
|
|
254
|
+
.prepare("SELECT id, question, expected_url, category FROM target_questions ORDER BY category, id")
|
|
255
|
+
.all();
|
|
256
|
+
let currentCategory = "";
|
|
257
|
+
for (const q of questions) {
|
|
258
|
+
if (q.category !== currentCategory) {
|
|
259
|
+
currentCategory = q.category;
|
|
260
|
+
console.error(`\n=== ${currentCategory.toUpperCase()} ===`);
|
|
261
|
+
}
|
|
262
|
+
console.error(` ${q.id}. ${q.question}`);
|
|
263
|
+
console.error(` → ${q.expected_url}`);
|
|
264
|
+
}
|
|
265
|
+
console.error(`\nTotal: ${questions.length} target questions`);
|
|
266
|
+
}
|
|
267
|
+
async function main() {
|
|
268
|
+
const command = process.argv[2];
|
|
269
|
+
if (!command || !["init", "record", "report", "questions"].includes(command)) {
|
|
270
|
+
console.error("Usage: npm run citation-test -- <init|record|report|questions>");
|
|
271
|
+
process.exit(1);
|
|
272
|
+
}
|
|
273
|
+
const db = initDb();
|
|
274
|
+
switch (command) {
|
|
275
|
+
case "init":
|
|
276
|
+
seedQuestions(db);
|
|
277
|
+
console.error("Citation test DB initialized with 20 target questions.");
|
|
278
|
+
listQuestions(db);
|
|
279
|
+
break;
|
|
280
|
+
case "record":
|
|
281
|
+
await recordRun(db);
|
|
282
|
+
break;
|
|
283
|
+
case "report":
|
|
284
|
+
generateReport(db);
|
|
285
|
+
break;
|
|
286
|
+
case "questions":
|
|
287
|
+
listQuestions(db);
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
db.close();
|
|
291
|
+
}
|
|
292
|
+
main()
|
|
293
|
+
.then(() => process.exit(0))
|
|
294
|
+
.catch((err) => {
|
|
295
|
+
console.error("Citation test failed:", err);
|
|
296
|
+
process.exit(1);
|
|
297
|
+
});
|
|
298
|
+
//# sourceMappingURL=citation-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"citation-test.js","sourceRoot":"","sources":["../src/citation-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
+
export {};
|