Compare commits

...
2 Commits
Author SHA1 Message Date
westfarnandCursor 3174c34a6f Merge master and keep both the webhook proxy and crawler file locations.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-17 07:20:48 -05:00
westfarnandCursor dce0879e62 Serve Hesychia crawler files as static text instead of the app shell.
Exact locations return robots.txt, sitemap.xml, and llms.txt, or 404.
Closes #43.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-17 07:19:05 -05:00
2 changed files with 18 additions and 0 deletions

No files matched your search

+2
View File
@@ -123,6 +123,8 @@ app_catalog:
# to chat_backend so POST is not answered 405 by the SPA index.html. # to chat_backend so POST is not answered 405 by the SPA index.html.
api_backend: chat_backend api_backend: chat_backend
api_proxy_prefix: /api/finance/webhooks/ api_proxy_prefix: /api/finance/webhooks/
# /robots.txt, /sitemap.xml, and /llms.txt must not fall through to index.html.
exact_root_files: true
chat_backend: chat_backend:
type: django type: django
repo: "{{ git_base_url }}/ai_ml_operations/chat_backend.git" repo: "{{ git_base_url }}/ai_ml_operations/chat_backend.git"
+16
View File
@@ -58,6 +58,22 @@ server {
{%- endif %} {%- endif %}
{%- endif %} {%- endif %}
{% if app_catalog[a.name].exact_root_files | default(false) %}
# Crawlers must get these files, never the SPA index.html fallback.
location = /robots.txt {
default_type text/plain;
try_files /robots.txt =404;
}
location = /sitemap.xml {
default_type application/xml;
try_files /sitemap.xml =404;
}
location = /llms.txt {
default_type text/plain;
try_files /llms.txt =404;
}
{% endif %}
{% if app_catalog[a.name].error_page_404 | default('') %} {% if app_catalog[a.name].error_page_404 | default('') %}
error_page 404 {{ app_catalog[a.name].error_page_404 }}; error_page 404 {{ app_catalog[a.name].error_page_404 }};