This is an automated email from the ASF dual-hosted git repository.
moonming pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-website.git
The following commit(s) were added to refs/heads/master by this push:
new c45c02a0b61 fix(llms): keep the curated index, put the generated one
after it (#2082)
c45c02a0b61 is described below
commit c45c02a0b61259b2b3dc32f8242f17aded765bab
Author: Ming Wen <[email protected]>
AuthorDate: Wed Jul 29 21:40:15 2026 +0800
fix(llms): keep the curated index, put the generated one after it (#2082)
The site already ships a hand-written llms.txt (website/static/llms.txt):
~48 entries grouped by topic — Core Documentation, Authentication &
Security, Traffic Control, AI Gateway, … — each with a sentence on what it
is for. The generated index was silently replacing it during the overlay,
trading that editorial judgement for a flat list of 1,186 URLs.
An agent gets more from "here are the twenty pages that matter, and what
each is for" than from everything in alphabetical order. So the curated
list now leads, and the generated full index follows under its own
heading. The curated file stays the place to edit the front section.
---
next/scripts/generate-md-twins.mjs | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/next/scripts/generate-md-twins.mjs
b/next/scripts/generate-md-twins.mjs
index 3d686917866..5eedba7a15d 100644
--- a/next/scripts/generate-md-twins.mjs
+++ b/next/scripts/generate-md-twins.mjs
@@ -150,6 +150,20 @@ const group = (items, frag) => {
return items.filter((p) => prefix.test(p.url));
};
+/**
+ * The site ships a hand-curated llms.txt (website/static/llms.txt): ~48
entries
+ * grouped by topic, each with a sentence on what it is for. That editorial
+ * judgement is worth more to an agent than a flat list, so it stays at the top
+ * — trimmed of its own heading — and the generated full index follows it.
+ */
+const curatedFile = path.join(root, '..', 'website', 'static', 'llms.txt');
+const curated = fs.existsSync(curatedFile)
+ ? fs.readFileSync(curatedFile, 'utf8')
+ .replace(/^#[^\n]*\n+/, '') // drop its H1; ours is the page
title
+ .replace(/^>.*\n+/m, '') // and its blurb; ours carries one
+ .trim()
+ : '';
+
const llms = [
'# Apache APISIX',
'',
@@ -157,6 +171,8 @@ const llms = [
'',
'Every page below is available as Markdown — append `index.md` to any page
URL.',
'',
+ ...(curated ? [curated, ''] : []),
+ ...(curated ? ['# Full index', ''] : []),
...section('Documentation', group(en, '/docs/')),
...section('Learning center', group(en, '/learning-center/')),
...section('Blog', group(en, '/blog/')),