feat: add MCP server for the website chatbot over a mirrored TYPO3 content feed

This commit is contained in:
fromme committed 2026-10-08 11:46:58 +02:00
1 parent ff7ddf7a9e
commit 1b4384e3f3
52 files changed
+5117 -4

No files matched your search

@@ -0,0 +1,15 @@
<?php
declare(strict_types=1);
namespace App\ContentFeed\Exception;
/**
* Ends the whole sync run, keeping everything as it is. The next scheduled run tries again.
*
* Thrown for a manifest that cannot be trusted, three consecutive 5xx responses or
* timeouts, and anything else that means TYPO3 is not in a state to be read.
*/
class ContentFeedStoppedException extends \RuntimeException
{
}
@@ -0,0 +1,16 @@
<?php
declare(strict_types=1);
namespace App\ContentFeed\Exception;
/**
* TYPO3 answered 503: the feed has been switched off on its side.
*/
class ContentFeedUnavailableException extends ContentFeedStoppedException
{
public function __construct(public readonly ?\DateTimeImmutable $retryAfter)
{
parent::__construct('TYPO3 switched the content feed off (503)'.(null !== $retryAfter ? ', retry after '.$retryAfter->format('c') : ''));
}
}
@@ -0,0 +1,13 @@
<?php
declare(strict_types=1);
namespace App\ContentFeed\Exception;
/**
* One request failed without ending the run. The items it was for keep their stored
* version and are retried next run.
*/
class ContentRequestFailedException extends \RuntimeException
{
}
@@ -0,0 +1,13 @@
<?php
declare(strict_types=1);
namespace App\ContentFeed\Exception;
/**
* Three slow responses in a row: TYPO3 is under load, so no more pages this run. The rest
* of the run (bookkeeping, merging) still completes.
*/
class PagePhaseEndedException extends \RuntimeException
{
}