Changelog
All notable changes to the TYPO3 LLM Extension are documented here.
The format follows Keep a Changelog and the project adheres to Semantic Versioning.
Version 0.8.0 (2026-06-02)
This release adds usage analytics and turns on real cost tracking, and completes the provider middleware pipeline that now powers fallback, pre-flight budget enforcement, usage accounting, and response caching around every provider call. It also migrates the domain API to typed value objects.
For the complete, itemised list see the canonical CHANGELOG.md.
Added
- Usage Analytics dashboard. A new Admin Tools → LLM → Analytics submodule with cost and request trends, breakdowns by provider, model, and service, KPI tiles, and per-user usage against each user's monthly budget. The Providers, Models, Configurations, and Tasks list views also gained per-row Cost / Requests / Tokens (last 30 days) columns. See Usage analytics.
- Real cost tracking. Usage is now priced from the configured model
rates (prompt/completion token split), so the AI cost this month widget
and the dashboard show real figures instead of
0. Thetx_table gained model and token-split columns plus per-task attribution.nrllm_ service_ usage - Automatic budget pre-flight. Completion, embedding, translation, and vision requests are checked against the configured budget before the call is made.
Changed
- The domain API moved to typed value objects (chat messages, tool specs, vision content, capability sets, provider options). The legacy string/array options accessors are deprecated in favour of the typed equivalents.
- Requires
netresearch/nr-vault^0.6.0.
Breaking
- The legacy
Model::class constants have been removed in favour of theCAPABILITY_* Modelbacked enum (for exampleCapability ModelCapability::CHAT->value). They had been deprecated since the enum was introduced.
Version 0.7.0 (2026-04-22)
Added
- Provider fallback chain.
Llmcan now list other configuration identifiers to retry against when the primary fails with a retryable error (connection / HTTP 5xx / 429 rate- limit). Non-retryable errors (4xx other than 429, configuration problems, unsupported feature) bubble up unchanged. Streaming is intentionally excluded from fallback because chunks cannot be replayed against a different provider. See ADR-021: Provider Fallback Chain and Fallback chain.Configuration - Attribute-based provider registration. New
#attribute. Providers bearing the attribute are automatically tagged and made public by[As Llm Provider (priority: N)] Providerat container compile time; noCompiler Pass services.yamledit required. Legacy yaml tagging still works for third-party providers and takes precedence when both mechanisms are present. See ADR-022: Attribute-Based Provider Registration and Registering a provider. - Per-capability BE group permissions. Every
Modelenum value is now a native TYPO3Capability customPermOptionsentry under thenrllmnamespace. BE group editors see a checkbox per capability (chat, completion, embeddings, vision, streaming, tools, json_mode, audio). NewCapabilityresolves checks against the current BE user with admin short-circuit and CLI / frontend bypass. See ADR-023: Native Backend Capability Permissions and BE group permission checks.Permission Service - Dashboard widgets. Two TYPO3 dashboard widgets sourced from
tx_: AI cost this month (nrllm_ service_ usage Number) and AI requests by provider (7d) (With Icon Widget Bar). Loaded conditionally fromChart Widget Configuration/only when typo3/cms-dashboard is installed. See ADR-024: Dashboard Widgets.Services. php - Per-user AI budgets. New
tx_table with six independent ceilings (requests / tokens / cost × daily / monthly). Newnrllm_ user_ budget Budgetaggregates usage on demand fromService:: check () tx_— one DB roundtrip for both windows via conditionalnrllm_ service_ usage SUM(). Orthogonal to the existing per-configuration daily limits: both checks must pass. See ADR-025: Per-User AI Budgets and Per-user AI budgets.
Changed
- CI: mutation testing runs only on
push,merge_groupandscheduleevents. PR CI gets the fuzz suite + unit / functional / PHPStan / rector / code style; the 15 min mutation job is deferred because its per-PR signal is hard for authors to action locally. - CI:
.semgrepignoreadded to excludeTests/,Build/and vendor directories from Opengrep SAST. Previously failing on legitimateScripts/ unlink()fixture cleanup. - CI: fuzz workflow now invoked with
fuzz-testsuite: fuzzymatching the phpunit.xml suite name.
Version 0.6.0 (2026-03-24)
Added
DocumentCapableInterface: providers can now advertise PDF/document support;ChatCapabilitiesInterfaceexposes this viagetProviderCapabilities().- Multimodal content arrays in
chatCompletion: pass images, PDFs, and text blocks as structured content arrays alongside regular string messages. - Tool message conversion:
tool_resultblocks are now mapped correctly when assembling provider payloads.
Changed
- Migrated CI infrastructure to
netresearch/typo3-ci-workflowsshared workflows (PHP tests, docs, E2E). - Replaced GrumPHP with CaptainHook for pre-commit hooks.
Fixed
- PHPStan baseline regenerated;
ignoreErrorspatterns broadened for deprecation and array function rules to handle phpstan-typo3 v2/v3 parameter name differences. - E2E tests stabilised: heading verification added, module overview landing page assertions updated.
Version 0.5.0 (2026-03-09)
Added
- AI-powered full-chain task wizard: describe a task in plain language, AI generates task + configuration + model recommendation in one step.
- AI-powered configuration wizard: generate configurations with system prompts, parameters, and model selection.
- Custom TCA
ModelIdElement: input field with "Fetch Models" button that populates from provider API, auto-fills capabilities and pricing. ModelConstraintsWizard: field wizard that loads parameter constraint bounds per model.- Dashboard improvements: side-by-side wizard callouts, fixed headline from "LLM Providers" to "LLM Integration".
- Task execution UI: collapsible prompt details, improved result display.
- Enhanced model discovery: better Anthropic, Google, DeepSeek, Mistral support.
- TER publish workflow.
- Documentation: wizards guide with screenshots, tasks section, updated configuration reference.
Changed
- Renamed
SafeCastTraitextracted from duplicated helpers inTaskControllerandWizardGeneratorService. - SQL injection defense: regex whitelist validation for
table/column names in
FetchRecordsRequestandLoadRecordDataRequest.
Fixed
- Restored
method_exists()guards forsetShortcutContext()(TYPO3 v13 compatibility). - PHPUnit 12: replaced
createStubwithcreateMockto fix deprecation warnings.
Version 0.4.8 (2026-03-07)
Changed
- Rewritten introduction with value-oriented positioning.
- Restructured README around value proposition and audience segments.
- Updated package metadata with value-oriented descriptions.
- Added integration guide for extension developers.
Version 0.4.7 (2026-03-07)
Added
- Help page in the LLM backend module.
- Setup wizard links on empty-state list pages.
Fixed
- Use canonical endpoint URLs for known providers in setup wizard.
- Remove container class from backend module templates.
Version 0.4.6 (2026-03-06)
Fixed
- Add Fluid-compatible
getHasApiKey()getter for{provider.hasApiKey}in templates.
Version 0.4.5 (2026-03-06)
Fixed
- Use
GET /v1/modelsfor Anthropic connection test.
Version 0.4.4 (2026-03-06)
Fixed
- Use table-specific connection and simplify column checks.
- Wrap test cleanup in try/finally and assert labelField.
Version 0.4.3 (2026-03-06)
Fixed
- Handle tables without
uidcolumn in TCA utilities. - Remove hardcoded temperature from chat completions.
Version 0.4.2 (2026-03-06)
Fixed
- Add
rootLevelto provider, configuration, and model TCA definitions.
Version 0.4.1 (2026-03-06)
Fixed
- Use
max_completion_tokensinstead ofmax_tokensfor OpenAI chat completions.
Version 0.4.0 (2026-03-06)
Breaking
- Prevent plaintext API key storage via setup wizard; keys now require vault encryption.
Fixed
- Cast ExtensionConfiguration timeout values to integer.
Changed
- Use Symfony
Uuid::v7()instead of manual UUID generation.
Version 0.3.2 (2026-03-04)
Added
- Extract thinking blocks from LLM responses (
<think>tag support).
Fixed
- Preserve newlines in
extractThinkingBlocks. - Restrict CI push trigger to main branch only.
- Add
merge_grouptrigger to CI workflow.
Version 0.3.1 (2026-03-02)
Fixed
- Add Overview submodule for TYPO3 v13 module overview compatibility.
Version 0.3.0 (2026-03-01)
Added
- Expose
chatWithConfigurationandstreamChatWithConfigurationonLlmServiceManagerInterface.
Fixed
- Use integer values for
f:be.infoboxstate attribute for TYPO3 v13 compatibility. - Explicitly enable fuzz and mutation tests.
Version 0.2.2 (2026-03-01)
Fixed
- Use
toolsparent for TYPO3 v13 module compatibility.
Changed
- Consolidate caller workflows into 4 grouped files.
- Fix documentation issues found by analysis.
Version 0.2.1 (2026-02-28)
Changed
- Require
netresearch/nr-vault^0.4.0 for API key encryption.
Version 0.2.0 (2026-02-28)
Added
- PHP 8.2+ and TYPO3 v13.4+ compatibility.
- TYPO3 v13.4 ddev install command.
- Coverage uploads and fuzz/mutation CI workflow.
- Unit tests for enums, WizardResult DTO, providers, services, and specialized classes.
- Coverage tests for PromptTemplateService and TranslationService.
Changed
- Moved
phpunit.xmlandphpstan-baseline.neonintoBuild/directory. - Expanded CI matrix to PHP 8.2-8.5 and TYPO3 v13.4/v14.
- Replaced TYPO3 v14-only APIs with v13-compatible equivalents.
- Narrowed testing-framework to ^9.0 for PHPUnit 12 compatibility.
- Removed dead ProviderRegistry class and orphaned phpstan baseline file.
- Removed 55 dead translation keys.
- Harmonized composer script naming to
ci:test:php:*convention. - Migrated CI to centralized workflows.
- Added SPDX copyright and license headers.
- Replaced generic emails with GitHub references.
Fixed
- Resolved CI failures for PHP 8.2 and TYPO3 v13 compatibility.
- Resolved PHPStan failures for dual TYPO3 v13/v14 support.
- Fixed PHPUnit deprecation warnings.
- Used
CoversNothingfor excluded exception and enum test classes. - Localized user-facing hardcoded strings in controllers.
- Disabled functional tests in CI (environment-specific).
- Fixed direct
php-cs-fixercall inci:test:php:cglscript.
Version 0.1.2 (2026-01-11)
Fixed
- Fixed CI: use correct org secret name for TER token.
- Simplified TER upload workflow.
Version 0.1.1 (2026-01-11)
Fixed
- Fixed CI: create zip archive for TER upload.
Version 0.1.0 (2026-01-11)
Initial release of the TYPO3 LLM Extension.
Added
Core Features
- Multi-provider support (OpenAI, Anthropic Claude, Google Gemini, Ollama, OpenRouter, Mistral, Groq).
- Unified API via
Llm.Service Manager - Provider abstraction layer with capability interfaces.
- Typed response objects (
Completion,Response Embedding).Response - Three-tier configuration architecture (Providers, Models, Configurations).
- Encrypted API key storage using sodium_crypto_secretbox.
Feature Services
Completion: Text completion with format control (JSON, Markdown).Service Embedding: Vector generation with caching and similarity calculations.Service Vision: Image analysis with alt-text, title, description generation.Service Translation: Translation with formality control and glossary support.Service Prompt: Centralized prompt management with database-driven templates.Template Service
Specialized Services
- Image generation (DALL-E).
- Text-to-speech (TTS) and speech transcription (Whisper).
- DeepL translation integration.
Provider Capabilities
- Chat completions across all providers.
- Embeddings (OpenAI, Gemini).
- Vision/image analysis (all providers).
- Streaming responses (all providers).
- Tool/function calling (all providers).
Infrastructure
- TYPO3 caching framework integration.
- Backend module for provider management and testing.
- Prompt template management with versioning and performance tracking.
- Comprehensive exception hierarchy.
- Type-safe enums and DTOs for domain constants.
Developer Experience
- Option objects with factory presets (
Chat).Options - Full backwards compatibility with array options.
- Extensive PHPDoc documentation.
- Type-safe method signatures.
Security
- Enterprise readiness security workflows and supply chain controls.
- SLSA Level 3 provenance, Cosign signatures, and SBOM generation.
- OpenSSF Scorecard and Best Practices compliance.
Testing
- Comprehensive unit and integration tests.
- E2E testing with Playwright.
- Property-based (fuzz) testing support.
Upgrade Guides
Upgrading from Pre-Release
If you used a pre-release version:
-
Remove old extension
Remove old extensioncomposer remove netresearch/nr-llmCopied! -
Clear caches
Clear cachesvendor/bin/typo3 cache:flushCopied! -
Install current version
Install current versioncomposer require netresearch/nr-llm:^0.2Copied! -
Run database migrations
Run database migrationsvendor/bin/typo3 database:updateschemaCopied! -
Update configuration
Review your TypoScript and extension configuration for any changed keys or deprecated options.
Breaking Changes Policy
This extension follows semantic versioning:
- Major versions (x.0.0): May contain breaking changes
- Minor versions (0.x.0): New features, backwards compatible
- Patch versions (0.0.x): Bug fixes only
Breaking Changes Documentation
Each major version will document:
- Removed or changed public APIs
- Migration steps with code examples
- Compatibility layer availability
- Deprecation timeline for removed features
Deprecation Policy
- Features are marked deprecated in minor versions
- Deprecated features remain functional for one major version
- Deprecated features are removed in the next major version
- Migration documentation provided before removal