PHPackages                             arnaudmoncondhuy/synapse-chat - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. arnaudmoncondhuy/synapse-chat

ActiveSymfony-bundle

arnaudmoncondhuy/synapse-chat
=============================

Composant interface de chat pour Synapse — Contrôleur Stimulus avec streaming, points de terminaison API NDJSON et templates Twig intégrables.

v1.0.2(2mo ago)0260↑15.4%1PolyForm-Noncommercial-1.0.0JavaScriptPHP &gt;=8.2

Since Mar 2Pushed 1mo agoCompare

[ Source](https://github.com/arnaudmoncondhuy/synapse-chat)[ Packagist](https://packagist.org/packages/arnaudmoncondhuy/synapse-chat)[ RSS](/packages/arnaudmoncondhuy-synapse-chat/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (7)Versions (4)Used By (1)

Synapse Chat
============

[](#synapse-chat)

> Chat UI component for Synapse — Stimulus streaming controller, NDJSON API endpoints, and embeddable Twig templates.

Widget de chat embeddable pour Synapse Core. Composant Stimulus + Twig pour afficher une interface conversationnelle en streaming temps réel.

**Dépend de** : `arnaudmoncondhuy/synapse-core`

Installation
------------

[](#installation)

```
composer require arnaudmoncondhuy/synapse-chat:^0.1
```

Caractéristiques
----------------

[](#caractéristiques)

### 💬 Chat UI moderne

[](#-chat-ui-moderne)

- Interface conversationnelle en Twig
- Streaming en temps réel via NDJSON/SSE
- **Auto-titling** : Génération automatique du titre de conversation après le premier échange
- **Estimation de Coût** : Affichage prédictif du coût avant l'envoi
- Support des tool calls affichés en live
- Historique conversationnel persistant

### ⚡ Stimulus Controller

[](#-stimulus-controller)

- `synapse_chat_controller` - Gestion du chat interactif
    - Envoi de messages
    - Streaming de réponses
    - Display des tool calls
    - Gestion d'erreurs gracieuse

### 🔗 API Endpoints NDJSON

[](#-api-endpoints-ndjson)

- `POST /api/chat` - Envoi de message et streaming (NDJSON)
- `POST /api/estimate-cost` - Estimation du coût d'un message
- `POST /api/reset` - Réinitialiser la conversation
- `POST /api/csrf` - Obtenir token CSRF

### 🎨 Templates Twig

[](#-templates-twig)

- `@Synapse/chat/page.html.twig` - Page chat complète
- `@Synapse/chat/component.html.twig` - Composant embeddable
- `@Synapse/chat/sidebar.html.twig` - Historique conversations

Configuration minimale
----------------------

[](#configuration-minimale)

**config/bundles.php** :

```
ArnaudMoncondhuy\SynapseChat\SynapseChatBundle::class => ['all' => true],
```

**config/routes.yaml** :

```
synapse_chat:
    resource: '@SynapseChatBundle/config/routes.yaml'
    prefix: /api
```

**config/packages/security.yaml** :

```
access_control:
    - { path: ^/api/chat, roles: ROLE_USER }  # Chat restreint
    - { path: ^/api/csrf, roles: PUBLIC_ACCESS }
```

**CSRF (Optionel mais recommandé)** : Le bundle vérifie le header `X-CSRF-Token` par défaut.

```
synapse_chat:
    api_csrf_enabled: true
```

Utilisation basique
-------------------

[](#utilisation-basique)

### Page chat complète

[](#page-chat-complète)

```
// Dans un contrôleur
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class ChatController extends AbstractController {
    public function chat() {
        return $this->render('@Synapse/chat/page.html.twig');
    }
}
```

```
# config/routes.yaml
chat_page:
    path: /chat
    controller: App\Controller\ChatController::chat
```

### Composant embeddable

[](#composant-embeddable)

```
{# Dans votre template #}

    Mon application

    {% include '@Synapse/chat/component.html.twig' with {
        title: 'Assistant IA',
        placeholder: 'Posez une question...'
    } %}

```

### JavaScript Stimulus

[](#javascript-stimulus)

Le controller Stimulus gère :

- Écoute du formulaire de chat
- Envoi AJAX vers `/api/chat`
- Streaming SSE de la réponse
- Affichage des chunks en temps réel
- Gestion des erreurs

```
// Déclaration automatique via AssetMapper
//
```

Format NDJSON
-------------

[](#format-ndjson)

Chaque ligne est un objet JSON distinct :

```
{"text":"Bonjour,","chunk_id":0,"type":"text"}
{"text":" comment","chunk_id":1,"type":"text"}
{"tool_use":{"id":"call_123","name":"calculator","input":{"a":2,"b":3}},"chunk_id":2,"type":"tool_call"}
{"text":"ça donne 5.","chunk_id":3,"type":"text"}
{"usage":{"input_tokens":15,"output_tokens":24},"chunk_id":4,"type":"usage"}
{"final":true,"chunk_id":5}
```

Événements frontend
-------------------

[](#événements-frontend)

```
// Dans votre composant Stimulus
messageReceived(event) {
    // Déclenché à chaque chunk reçu
    console.log(event.detail.chunk);
}

responseComplete(event) {
    // Déclenché à la fin du streaming
    console.log(event.detail.fullResponse);
}
```

Intégration avec Synapse Core
-----------------------------

[](#intégration-avec-synapse-core)

Le bundle expose :

- Les routes API du core (ChatApiController)
- Les contrôleurs de conversation
- Gestion des presets depuis la DB

Configuration du preset actif :

```
synapse_chat:
    default_preset_name: "default"  # Depuis DB
```

Assets
------

[](#assets)

CSS et JS inclusos automatiquement via AssetMapper :

```
packages/chat/assets/
├── controllers/
│   └── synapse_chat_controller.js
└── styles/
    └── synapse.css

```

À importer dans votre layout Twig :

```
{% include '@Synapse/chat/assets.html.twig' %}
```

Structure des dépendances
-------------------------

[](#structure-des-dépendances)

```
synapse-chat
  ├── arnaudmoncondhuy/synapse-core
  ├── symfony/twig-bundle
  ├── symfony/asset-mapper
  ├── symfony/stimulus-bundle
  └── symfony/asset

```

Internationalisation
--------------------

[](#internationalisation)

L'interface de chat et les messages d'erreur API sont traduisibles.

- **Domaine de traduction** : `synapse_chat`
- **Composants traduits** : Interface Twig, contrôleurs API, prompts internes.

---

Licence
-------

[](#licence)

Support
-------

[](#support)

- 📖 [Documentation Chat](https://arnaudmoncondhuy.github.io/synapse-bundle/chat/)
- 🐛 [Issues](https://github.com/arnaudmoncondhuy/synapse-bundle/issues)

Auteur
------

[](#auteur)

[Arnaud Moncondhuy](https://github.com/arnaudmoncondhuy)

###  Health Score

45

—

FairBetter than 92% of packages

Maintenance95

Actively maintained with recent releases

Popularity17

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

3

Last Release

67d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/a67f658f39efed4faeedf6da245792aaa7a78b69f89ea148ca01af52c586e348?d=identicon)[arnaudmoncondhuy](/maintainers/arnaudmoncondhuy)

---

Top Contributors

[![actions-user](https://avatars.githubusercontent.com/u/65916846?v=4)](https://github.com/actions-user "actions-user (144 commits)")

---

Tags

symfonybundleaistreamingNDJSONssechatstimulus

###  Code Quality

Code StylePHP CS Fixer

### Embed Badge

![Health badge](/badges/arnaudmoncondhuy-synapse-chat/health.svg)

```
[![Health](https://phpackages.com/badges/arnaudmoncondhuy-synapse-chat/health.svg)](https://phpackages.com/packages/arnaudmoncondhuy-synapse-chat)
```

###  Alternatives

[sonata-project/admin-bundle

The missing Symfony Admin Generator

2.1k19.0M298](/packages/sonata-project-admin-bundle)[lexik/translation-bundle

This bundle allows to import translation files content into the database and provide a GUI to edit translations.

4362.7M19](/packages/lexik-translation-bundle)[pentatrion/vite-bundle

Vite integration for your Symfony app

2725.3M13](/packages/pentatrion-vite-bundle)[artgris/filemanager-bundle

FileManager is a simple Multilingual File Manager Bundle for Symfony

182420.8k9](/packages/artgris-filemanager-bundle)[spomky-labs/pwa-bundle

Progressive Web App Manifest Generator Bundle for Symfony.

6144.4k1](/packages/spomky-labs-pwa-bundle)[easycorp/easyadmin-demo

EasyAdmin Demo Application

145.7k](/packages/easycorp-easyadmin-demo)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
