Skip to content

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 18 Aug 22:26
· 20 commits to main since this release
v0.1.0
132c7b8

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/client constraints are disjoint. Its integration is therefore tested in a dedicated environment under Tests/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-helper has 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-compat

Publication status

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.zip

Verify checksums

sha256sum -c checksums.txt

Software Bill of Materials (SBOM)

SBOMs are provided in both SPDX and CycloneDX formats for supply chain transparency.