Skip to main content

cedros_data/http_discovery/
mod.rs

1//! AI Discovery endpoints for LLMs and agent systems
2//!
3//! Provides multiple discovery formats for different AI consumers:
4//! - /llms.txt, /llms-full.txt, /llms-admin.txt — Text documentation
5//! - /skill.md, /skill.json — Skill metadata
6//! - /skills/*.md — Individual skill files
7//! - /agent.md — Integration guide
8//! - /heartbeat.md, /heartbeat.json — Health status
9//! - /.well-known/* — Standard manifests (OpenAI, A2A, MCP)
10//! - /.well-known/skills.zip — Downloadable skills bundle
11
12mod agent;
13mod bundle;
14pub mod content;
15mod heartbeat;
16mod llms;
17mod manifests;
18mod skill_content;
19mod skill_files;
20mod skills;
21pub mod types;
22
23use std::sync::Arc;
24
25use axum::routing::get;
26use axum::Router;
27
28use crate::http::AppState;
29
30/// Build the AI discovery router. Merged into the main app via `Router::merge`.
31pub(crate) fn discovery_routes() -> Router<Arc<AppState>> {
32    Router::new()
33        // LLM text endpoints
34        .route("/ai.txt", get(llms::ai_txt))
35        .route("/llms.txt", get(llms::llms_txt))
36        .route("/llms-full.txt", get(llms::llms_full_txt))
37        .route("/llms-admin.txt", get(llms::llms_admin_txt))
38        // Skill index
39        .route("/skill.md", get(skills::skill_md))
40        .route("/skill.json", get(skills::skill_json))
41        // Individual skill files
42        .route("/skills/data.md", get(skill_files::skill_data_md))
43        .route("/skills/admin.md", get(skill_files::skill_admin_md))
44        .route("/skills/schema.md", get(skill_files::skill_schema_md))
45        .route("/skills/storage.md", get(skill_files::skill_storage_md))
46        .route("/skills/site.md", get(skill_files::skill_site_md))
47        // Agent integration guide
48        .route("/agent.md", get(agent::agent_md))
49        // Health endpoints
50        .route("/heartbeat.md", get(heartbeat::heartbeat_md))
51        .route("/heartbeat.json", get(heartbeat::heartbeat_json))
52        // Standard manifests
53        .route(
54            "/.well-known/ai-discovery.json",
55            get(manifests::ai_discovery_index),
56        )
57        .route(
58            "/.well-known/ai-plugin.json",
59            get(manifests::ai_plugin_json),
60        )
61        .route("/.well-known/agent.json", get(manifests::agent_json))
62        .route("/.well-known/mcp", get(manifests::mcp_discovery))
63        .route("/.well-known/skills.zip", get(bundle::skills_bundle_zip))
64        // OpenAPI specification
65        .route("/openapi.json", get(manifests::openapi_json))
66}