Releases: netresearch/t3x-nr-llm-compat
Release list
v0.1.3
Changes
- Merge pull request #24 from netresearch/release/0.1.3
- Merge pull request #23 from netresearch/chore/nr-llm-033
Installation
composer require netresearch/nr-llm-compatPublication status
- TER: extensions.typo3.org/extension/nr_llm_compat — 0.1.3 verified
- Packagist: packagist.org/packages/netresearch/nr-llm-compat — 0.1.3 verified
- Documentation: skipped
Security
All release artifacts are signed with Sigstore keyless signing.
Verify signatures
cosign verify-blob \
--bundle nr-llm-compat-0.1.3.zip.sigstore.json \
--certificate-identity-regexp "https://github.com/netresearch/.*" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
nr-llm-compat-0.1.3.zipVerify checksums
sha256sum -c checksums.txtSoftware Bill of Materials (SBOM)
SBOMs are provided in both SPDX and CycloneDX formats for supply chain transparency.
v0.1.2
Changes
- Merge pull request #22 from netresearch/release/0.1.2
- Merge pull request #21 from netresearch/chore/nr-llm-032
Installation
composer require netresearch/nr-llm-compatPublication status
- TER: extensions.typo3.org/extension/nr_llm_compat — 0.1.2 verified
- Packagist: packagist.org/packages/netresearch/nr-llm-compat — 0.1.2 verified
- Documentation: skipped
Security
All release artifacts are signed with Sigstore keyless signing.
Verify signatures
cosign verify-blob \
--bundle nr-llm-compat-0.1.2.zip.sigstore.json \
--certificate-identity-regexp "https://github.com/netresearch/.*" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
nr-llm-compat-0.1.2.zipVerify checksums
sha256sum -c checksums.txtSoftware Bill of Materials (SBOM)
SBOMs are provided in both SPDX and CycloneDX formats for supply chain transparency.
v0.1.1
Highlights
Requires nr-llm ^0.31, which is where the bridges' work becomes visible. Every bridge in this extension already tags the calls it reroutes with the extension key of the third-party extension it stands in for. Until nr-llm 0.31.0 that tag only reached the telemetry log; now it sits next to the money, and the Analytics module breaks usage and cost down per calling extension. This extension is what makes that column non-empty on a real installation, so it should not be the package holding an installation back from reading it (@CybotTM).
A constraint mismatch this bump surfaced. ext_emconf.php still declared nr_llm as 0.29.0-0.99.99 while composer.json required ^0.30. In Composer mode the emconf range is not what resolves, which is exactly why the two could drift apart unnoticed — a classic-mode installation would have accepted a version the Composer-mode one refused. They now say the same thing (@CybotTM).
Upgrading
A patch release: a dependency's minor is not this extension's minor. No bridge changed, no contract changed, nothing in the interception behaviour moved. Requires nr-llm ^0.31.
Installation
composer require netresearch/nr-llm-compatPublication status
- TER: extensions.typo3.org/extension/nr_llm_compat — 0.1.1 verified
- Packagist: packagist.org/packages/netresearch/nr-llm-compat — 0.1.1 verified
- Documentation: skipped
Security
All release artifacts are signed with Sigstore keyless signing.
Verify signatures
cosign verify-blob \
--bundle nr-llm-compat-0.1.1.zip.sigstore.json \
--certificate-identity-regexp "https://github.com/netresearch/.*" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
nr-llm-compat-0.1.1.zipVerify checksums
sha256sum -c checksums.txtSoftware Bill of Materials (SBOM)
SBOMs are provided in both SPDX and CycloneDX formats for supply chain transparency.
v0.1.0
Highlights
First release: third-party AI extensions run through nr-llm without being modified. A TYPO3 installation that uses several AI extensions ends up with several provider configurations, several API keys and several places where cost appears — one per extension. This extension removes that duplication from the outside: it intercepts the provider calls of supported third-party extensions at runtime and routes them through nr-llm, so the installation has one provider configuration, one key store and one usage log. The third-party packages stay exactly as they came from Packagist; nothing is forked, patched or vendored (@CybotTM).
Five integrations ship in 0.1.0:
| Extension | Package | How it is intercepted |
|---|---|---|
| AI SEO Helper | passionweb/ai-seo-helper |
DI class replacement |
| T3AI | nitsan/ns-t3ai |
DI class replacement, both OpenAI-calling methods |
| AI File Metadata | mfd/ai-filemetadata |
DI class replacement, vision path |
| Texter | in2code/texter |
the extension's own provider hook |
| Exception Solver | eliashaeussler/typo3-solver |
the extension's own provider setting |
Nothing is intercepted until you say so, and a broken assumption disables rather than breaks. Every integration is opt-in per extension key. Before an interception is wired, the class, method and property contracts it depends on are verified by reflection against the version actually installed, and the Composer version range is checked. When an upstream refactoring invalidates a contract, the integration reports itself as inactive and the third-party extension keeps working as it always did — the alternative, a fatal error on a site whose only mistake was updating a dependency, is not an option. nrllm:compat:status prints the state of every known integration and exits non-zero when an enabled one cannot activate.
Fail closed. A bridge never falls back to the third-party extension's own provider, and it never reads that extension's API key. If nr-llm cannot serve the request, the request fails — silently spending on a second, unmanaged provider account would defeat the point of routing through nr-llm at all.
Notable details
- Prompt construction stays original code wherever possible: the ai_seo_helper and ns_t3ai bridges call the third-party prompt builders rather than reimplementing them, so per-request overrides and placeholders behave as upstream.
- ai_filemetadata's token usage is mirrored back into its own
TokenUsageService, so its dashboard widgets keep showing numbers. - typo3-solver cannot share a Composer resolution with ai-filemetadata — their
openai-php/clientconstraints are disjoint. Its integration is therefore tested in a dedicated environment underTests/SolverEnvironment/that installs the unmodified package, rather than being left untested or dropped. - TYPO3 13.4 and 14.3 are both supported.
passionweb/ai-seo-helperhas no v14 release, so on 14.3 its integration reports NOT INSTALLED — exactly as it would on a real site.
Requirements
TYPO3 ^13.4 || ^14.3, PHP ^8.2, and nr-llm ^0.30 (0.1.1 raises this to ^0.31).
Installation
composer require netresearch/nr-llm-compatPublication status
- TER: extensions.typo3.org/extension/nr_llm_compat — 0.1.0 verified
- Packagist: skipped
- Documentation: skipped
Security
All release artifacts are signed with Sigstore keyless signing.
Verify signatures
cosign verify-blob \
--bundle nr-llm-compat-0.1.0.zip.sigstore.json \
--certificate-identity-regexp "https://github.com/netresearch/.*" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
nr-llm-compat-0.1.0.zipVerify checksums
sha256sum -c checksums.txtSoftware Bill of Materials (SBOM)
SBOMs are provided in both SPDX and CycloneDX formats for supply chain transparency.