Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/components/SiteFooter.astro
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ const year = new Date().getFullYear();
<span class="sr-only">love</span>
<Icon name="heart" size="0.875rem" />
by
<a href="https://github.com/mnkiefer" rel="me">@mnkiefer</a>
<span aria-hidden="true">&middot;</span>
<span>GitHub Next</span>
<a href="https://githubnext.com/" target="_blank" rel="noopener noreferrer">GitHub Next</a>
&amp;
<a href="https://www.microsoft.com/en-us/research/" target="_blank" rel="noopener noreferrer">Microsoft Research</a>
</p>
<div class="legal sl-flex">
<span>&copy; {year} GitHub, Inc.</span>
Expand Down
74 changes: 74 additions & 0 deletions docs/pages/llms.txt.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import type { APIRoute } from "astro";
import { getCollection } from "astro:content";
import { catalogEntries } from "../lib/catalog";

const documentationOrder = [
"getting-started",
"architecture",
"configuration",
"authentication",
"bootstrap-configuration",
"rollout-and-routing",
"execution-and-safety",
"orchestrators-and-workers",
"deployment-and-governance",
"operations",
"dashboard-language-specification",
] as const;

function link(title: string, url: URL, description: string): string {
return `- [${title}](${url}): ${description}`;
}

export const GET: APIRoute = async ({ url }) => {
const baseUrl = new URL(".", url);
const docs = await getCollection("docs");
const docsById = new Map(docs.map((entry) => [entry.id, entry]));
const documentation = documentationOrder.map((id) => {
const entry = docsById.get(id);
if (!entry) throw new Error(`Missing documentation page for llms.txt: ${id}`);

return link(
entry.data.title,
new URL(`${id}/`, baseUrl),
entry.data.description ?? "",
);
});
const packages = catalogEntries.map((entry) =>
link(entry.name, new URL(`catalog/${entry.slug}/`, baseUrl), entry.description)
);

const body = [
"# Central Agentic Ops",
"",
"> Enterprise control planes for GitHub Agentic Workflows.",
"",
"Central Agentic Ops provides an open-source operation catalog and a governed model for running trusted workflows across many repositories from one private control plane.",
"",
"## Documentation",
"",
...documentation,
"",
"## Operation Packages",
"",
link(
"Package catalog",
new URL("catalog/", baseUrl),
"Browse the operations available for installation into a control plane.",
),
...packages,
"",
"## Source",
"",
link(
"GitHub repository",
new URL("https://github.com/githubnext/central-agentic-ops"),
"Read the source, package manifests, workflow definitions, and contribution history.",
),
"",
].join("\n");

return new Response(body, {
headers: { "Content-Type": "text/plain; charset=utf-8" },
});
};
Loading