{"id":52045841,"url":"https://github.com/dirnbauer/typo3-ai-chat","last_synced_at":"2026-08-02T06:01:45.910Z","repository":{"id":373239043,"uuid":"1312725057","full_name":"dirnbauer/typo3-ai-chat","owner":"dirnbauer","description":"Modern governed AI operator chat for the TYPO3 backend, inspired by Netresearch nr-mcp-agent","archived":false,"fork":false,"pushed_at":"2026-07-26T12:39:49.000Z","size":12197,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-26T14:10:15.777Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dirnbauer.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-07-26T11:02:03.000Z","updated_at":"2026-07-26T12:40:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dirnbauer/typo3-ai-chat","commit_stats":null,"previous_names":["dirnbauer/typo3-ai-chat"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/dirnbauer/typo3-ai-chat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Ftypo3-ai-chat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Ftypo3-ai-chat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Ftypo3-ai-chat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Ftypo3-ai-chat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dirnbauer","download_url":"https://codeload.github.com/dirnbauer/typo3-ai-chat/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirnbauer%2Ftypo3-ai-chat/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36182791,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-02T02:00:06.915Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-08-02T06:01:45.254Z","updated_at":"2026-08-02T06:01:45.904Z","avatar_url":"https://github.com/dirnbauer.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TYPO3 AI Chat by Webconsulting\n\n[![CI](https://github.com/dirnbauer/typo3-ai-chat/actions/workflows/ci.yml/badge.svg)](https://github.com/dirnbauer/typo3-ai-chat/actions)\n\nA modern, governed operator console for the TYPO3 backend. Editors can converse\nwith their installation, inspect live TYPO3 context, execute nr-llm tools, review\nevery tool argument/result, approve sensitive work, and optionally dispatch\ndurable MCP workflows through Webconsulting Flue.\n\nThis project is derived from\n[Netresearch nr-mcp-agent](https://github.com/netresearch/t3x-nr-mcp-agent).\nThank you, Netresearch, for publishing the original extension, for the excellent\nnr-llm and nr-vault foundations, and for making this work possible. The upstream\nGit history is retained in this repository and the detailed attribution is in\n[THANKS-NETRESEARCH.md](THANKS-NETRESEARCH.md).\n\n## What is different\n\n- **Operator console, not a bubble widget** — conversation rail, focused thread,\n  live status, and a separate execution ledger.\n- **Real governed execution** — tool calls run as the authenticated TYPO3 actor.\n  Approval-required calls pause visibly and can be allowed once or denied.\n- **MCP through Flue** — optional durable workflows use Flue's MCP token minting,\n  tool allowlists, run store, and draft-workspace write safety.\n- **Rich attachments** — multiple PNG/JPEG/WebP images, PDFs, DOCX, TXT and XLSX\n  files, with image thumbnails and an inline first-page PDF preview before send.\n- **Modern chat foundation** — the interface uses\n  [assistant-ui](https://www.assistant-ui.com/) with a custom TYPO3 runtime,\n  React 19, Vite and Lucide. It does not require Vercel or a JavaScript AI\n  backend at runtime.\n- **Two native surfaces** — the same modern conversation and execution UI is\n  available as a fast top-right inline drawer and as a spacious Tools module.\n- **TYPO3-native authority** — TYPO3 permissions, nr-llm governance, provider\n  configuration, FAL validation and server-side document extraction remain the\n  source of truth.\n- **Safe migration** — an idempotent command copies conversations and MCP server\n  records from nr-mcp-agent before the old extension is removed.\n\n![Full TYPO3 AI Chat operator console](Documentation/Images/OperatorConsole.jpg)\n\nThe compact toolbar surface keeps the same conversations and governed execution\ncontrols available without leaving the current TYPO3 module:\n\n![Inline TYPO3 AI Chat drawer](Documentation/Images/InlineDrawer.jpg)\n\n## Architecture\n\n```text\nassistant-ui operator console\n        |\n        +-- Direct lane --\u003e TYPO3 AJAX --\u003e nr-llm AgentRuntime\n        |                                  |-- tool registry\n        |                                  |-- guardrails\n        |                                  `-- human approval/resume\n        |\n        `-- Flue lane ----\u003e Webconsulting Flue control plane\n                                           |-- durable run\n                                           |-- MCP allowlist + PAT\n                                           `-- draft-workspace writes\n```\n\nThere is deliberately no unrestricted shell executor. “Cursor-like” means that\nthe model can select well-described tools, show its intent and arguments, and\ncontinue after a human decision. It does not mean bypassing TYPO3 permissions.\n\n## Requirements\n\n- PHP 8.2+\n- TYPO3 13.4 or 14\n- `netresearch/nr-llm ^0.25`\n- a configured nr-llm Task\n- optional: `netresearch/nr-vault`\n- optional: `hn/typo3-mcp-server`\n- optional on TYPO3 14/PHP 8.3+: `webconsulting/flue`\n\n## Installation\n\n```bash\ncomposer require webconsulting/typo3-ai-chat\nvendor/bin/typo3 extension:setup\n```\n\nThen open **Admin Tools → Settings → Extension Configuration → Webconsulting\nTYPO3 AI Chat** and set:\n\n| Setting | Purpose |\n|---|---|\n| `llmTaskUid` | nr-llm Task used by the direct operator lane |\n| `processingStrategy` | `exec` for one process per turn or `worker` |\n| `allowedGroups` | Optional comma-separated backend group UIDs |\n| `maxMessageLength` | Server-side request bound |\n| `maxActiveConversationsPerUser` | Concurrency bound |\n| `enableFlue` | Expose the durable Flue lane |\n| `flueFlowUid` | Existing, governed Flue flow to trigger |\n\nThe backend module appears under **Tools → TYPO3 AI Chat**.\n\n## Safe replacement of nr-mcp-agent\n\nKeep both extensions installed during verification:\n\n```bash\nvendor/bin/typo3 extension:setup\nvendor/bin/typo3 webconsulting-ai-chat:migrate-nr-mcp-agent\n```\n\nThe migration command:\n\n- copies `tx_nrmcpagent_conversation` rows without overwriting target UIDs;\n- copies configured MCP server records;\n- is safe to run repeatedly;\n- leaves all source data untouched.\n\nOnly after the new module, conversations, uploads, tool execution and approvals\nhave been verified should the original package be removed:\n\n```bash\ncomposer remove netresearch/nr-mcp-agent\nvendor/bin/typo3 extension:setup\n```\n\nThank you again to Netresearch: retaining and migrating the original data is a\nfirst-class requirement, not an afterthought.\n\n## Attachments\n\nUpload validation is performed twice: the browser provides the preview and the\nTYPO3 endpoint verifies size, actual MIME type, FAL permissions and document\nreadability. Files are stored per backend user below\n`fileadmin/typo3-ai-chat/\u003cbe-user-uid\u003e/`.\n\n| Format | Handling |\n|---|---|\n| PNG, JPEG, WebP | Native vision when the configured provider supports it |\n| PDF | Native document input or server-side text extraction |\n| DOCX | Native document input or PHPWord extraction |\n| TXT | Server-side text extraction |\n| XLSX | PhpSpreadsheet extraction when installed |\n\nThe current server limit is 20 MB per file and five files per conversation.\n\n## Flue workflow lane\n\nThe Flue lane is shown only when `webconsulting/flue` is installed,\n`enableFlue=1`, and `flueFlowUid` points to a flow. The operator supplies a page\nUID. Flue remains responsible for:\n\n- resolving the page/workspace context;\n- exporting Agent Skills;\n- minting a short-lived MCP PAT;\n- retrieving the provider key from nr-vault;\n- enforcing the flow's MCP tool allowlist;\n- keeping writes in a draft workspace;\n- persisting the durable run and its event stream.\n\nThe chat mirrors the final Flue output and adds the run to its execution ledger.\n\n## Frontend development\n\nThe built bundle is committed so TYPO3 installations do not need Node.js.\n\n```bash\nnpm install\nnpm run build\nnpm run test:js\n```\n\nProduction dependencies have no known npm audit findings at the time of this\nrelease (`npm audit --omit=dev`). The existing test toolchain may report\ntransitive development-only advisories and should be reviewed with each update.\n\n## Quality\n\n```bash\ncomposer validate --strict\ncomposer ci:phpstan\ncomposer ci:cgl\ncomposer ci:tests\nnpm run build\nnpm run test:js\n```\n\n## Credits — thank you, Netresearch\n\nThe original architecture, conversation lifecycle, FAL upload endpoint,\ndocument extractors, worker/exec processing modes and much of the PHP test\nfoundation came from Netresearch's GPL-licensed nr-mcp-agent. Webconsulting's\nreplacement keeps the upstream history and copyright notices.\n\nThank you to **Netresearch DTT GmbH** for:\n\n- [nr-mcp-agent](https://github.com/netresearch/t3x-nr-mcp-agent);\n- [nr-llm](https://github.com/netresearch/t3x-nr-llm);\n- [nr-vault](https://github.com/netresearch/t3x-nr-vault);\n- investing in open TYPO3 AI infrastructure.\n\nThank you, Netresearch — in the README, in the TYPO3 backend, in the manuals,\nin package metadata, and in the preserved source history.\n\nAlso thank you to [hauptsache.net](https://hauptsache.net/) for\n[`hn/typo3-mcp-server`](https://github.com/hauptsache-net/typo3-mcp-server).\n\n## License\n\nGPL-2.0-or-later, matching the original extension. See [LICENSE](LICENSE) and\n[THANKS-NETRESEARCH.md](THANKS-NETRESEARCH.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdirnbauer%2Ftypo3-ai-chat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdirnbauer%2Ftypo3-ai-chat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdirnbauer%2Ftypo3-ai-chat/lists"}