Files
NeoTachyon/tachyon/files/usr/lib/cgi-bin/tachyon-agent
T
Dushnilin d097494b23 test(infra): shellcheck не-.sh скриптов, фикс BOM, регрессионный тест RAG
- workflow shellcheck теперь покрывает агентский CGI, hotplug WAN-монитор и
  точки входа usr/bin; в CGI перед shebang стоял UTF-8 BOM, из-за которого
  Linux вообще не мог исполнить скрипт (bad interpreter) - удалён вместе со
  случайными BOM в исходниках фронтенда
- новый rag_embeddings.sh фиксирует исправленный порядок аргументов push(),
  инвалидацию кэша по отпечатку индекса, нормализацию null model_override и
  порядок объявлений - ни один из починенных багов RAG не сможет вернуться
  незаметно
- hosts_li
2026-08-21 20:58:51 +03:00

49 lines
2.0 KiB
Bash

#!/bin/sh
# Tachyon AI Agent API — CGI handler for uhttpd
# Install at: /usr/lib/cgi-bin/tachyon-agent
# then symlink: ln -sf /usr/lib/cgi-bin/tachyon-agent /www/cgi-bin/tachyon-agent
#
# API is served at: http://<router>/cgi-bin/tachyon-agent/<endpoint>
# Examples:
# curl http://192.168.1.1/cgi-bin/tachyon-agent/health
# curl http://192.168.1.1/cgi-bin/tachyon-agent/snapshot
# curl http://192.168.1.1/cgi-bin/tachyon-agent/diagnose
# curl -X POST -H "Authorization: Bearer mytoken" \
# http://192.168.1.1/cgi-bin/tachyon-agent/heal
TACHYON_LIB=/usr/lib/tachyon
AGENT_UC="$TACHYON_LIB/service/agent_api.uc"
PATH_INFO="${PATH_INFO:-/}"
API_PATH="/tachyon/agent/v1${PATH_INFO}"
METHOD="${REQUEST_METHOD:-GET}"
AUTH="${HTTP_AUTHORIZATION:-}"
# Reject oversized bodies before reading them: CONTENT_LENGTH is client-
# controlled and dd would happily buffer an arbitrarily large request.
MAX_BODY_BYTES=65536
BODY="{}"
if [ "$METHOD" = "POST" ] || [ "$METHOD" = "PUT" ]; then
if [ -n "$CONTENT_LENGTH" ] && [ "$CONTENT_LENGTH" -gt "$MAX_BODY_BYTES" ] 2>/dev/null; then
printf 'Status: 413 Payload Too Large\r\n'
printf 'Content-Type: application/json\r\n'
printf '\r\n'
printf '{"success":false,"error":"Request body too large","code":413}\n'
exit 0
fi
if [ -n "$CONTENT_LENGTH" ] && [ "$CONTENT_LENGTH" -gt 0 ] 2>/dev/null; then
BODY=$(dd bs=1 count="$CONTENT_LENGTH" 2>/dev/null)
fi
fi
# Bearer token is passed through the environment: argv entries are visible to
# every local user via ps, environ is restricted to the owning user and root.
OUTPUT=$(TACHYON_AGENT_BEARER="$AUTH" ucode -L "$TACHYON_LIB" "$AGENT_UC" "$API_PATH" "$METHOD" "$BODY" 2>/dev/null)
# Deliberately no Access-Control-Allow-Origin: a wildcard would let any
# website visited from the LAN read router state cross-origin (including via
# DNS rebinding). Same-origin LuCI calls and non-browser agents need no CORS.
printf 'Content-Type: application/json\r\n'
printf 'Cache-Control: no-cache\r\n'
printf '\r\n'
printf '%s\n' "$OUTPUT"