Pijplijn
- Markdown naar IR parsen (
markdownToIR) - platte tekst plus stijlbereiken (vet, cursief, doorgestreept, code, codeblok, spoiler, blokcitaat, kop 1-6) en linkbereiken. Offsets zijn UTF-16-code-eenheden, zodat de stijlbereiken van Signal rechtstreeks aansluiten op de API. Tabellen worden alleen geparseerd wanneer het kanaal een tabelmodus inschakelt. - De IR opdelen in chunks (
chunkMarkdownIR/renderMarkdownIRChunksWithinLimit)- het splitsen gebeurt vóór het renderen op de IR-tekst, zodat inline stijlen en links per chunk worden opgesplitst in plaats van over een grens heen te breken.
- Per kanaal renderen (
renderMarkdownWithMarkers) - een toewijzing van stijlmarkeringen zet bereiken om in de eigen opmaak van het kanaal.
IR-voorbeeld
Markdown-invoer:Tabelverwerking
markdown.tables bepaalt hoe een kanaal Markdown-tabellen converteert, per
kanaal en optioneel per account:
Standaardwaarden van plugins per kanaal: Signal, WhatsApp en Matrix gebruiken standaard
bullets; Mattermost gebruikt standaard off; Telegram gebruikt standaard block (wat
wordt omgezet in code, tenzij richMessages voor het account is ingeschakeld). Elk
kanaal zonder een expliciete standaardwaarde van de plugin valt terug op code.
Regels voor het opdelen in chunks
- Chunklimieten zijn afkomstig van kanaaladapters/configuratie en gelden voor IR-tekst, niet voor gerenderde uitvoer.
- Omheinde codeblokken worden als één blok behouden met een afsluitende nieuwe regel, zodat kanalen de afsluitende omheining correct renderen.
- Voorvoegsels van lijsten en blokcitaten maken deel uit van de IR-tekst, zodat het opdelen in chunks nooit midden in een voorvoegsel splitst.
- Inline stijlen worden nooit over chunks gesplitst; de renderer heropent een geopende stijl aan het begin van de volgende chunk.
Linkbeleid
- Slack:
[label](url)-><url|label>; kale URL’s blijven kaal. - Telegram:
[label](url)-><a href="url">label</a>(HTML-parseermodus). - Signal:
[label](url)->label (url), tenzij het label al overeenkomt met de URL.
Spoilers
Spoilermarkeringen (||spoiler||) worden geparseerd voor Signal (toegewezen aan
SPOILER-stijlbereiken) en Telegram (toegewezen aan <tg-spoiler>). Andere kanalen behandelen
||...|| als platte tekst.
Een kanaalformatter toevoegen of bijwerken
- Eenmaal parsen met
markdownToIR(...), met voor het kanaal geschikte opties (autolink,headingStyle,blockquotePrefix,tableMode). - Renderen met
renderMarkdownWithMarkers(...)en een toewijzing van stijlmarkeringen (of aangepaste stijlbereiklogica voor transportsystemen zoals Signal). - Opdelen in chunks met
chunkMarkdownIR(...)ofrenderMarkdownIRChunksWithinLimit(...)voordat elke chunk wordt gerenderd. - De adapter koppelen zodat deze de nieuwe chunker en renderer aanroept vanuit het uitgaande verzendpad.
- Testen met opmaaktests plus een test voor uitgaande aflevering als het kanaal chunks gebruikt.
Veelvoorkomende valkuilen
- Slack-tokens met punthaken (
<@U123>,<#C123>,<https://...>) moeten het escapen overleven; onbewerkte HTML moet nog steeds veilig worden geëscapet. - Voor Telegram-HTML moet tekst buiten tags worden geëscapet om gebroken opmaak te voorkomen.
- Signal-stijlbereiken gebruiken UTF-16-offsets, geen codepuntafwijkingen.
- Behoud afsluitende nieuwe regels bij omheinde codeblokken, zodat de afsluitende markering op een eigen regel terechtkomt.
Gerelateerd
Streaming en opdelen in chunks
Gedrag van uitgaande streaming, chunkgrenzen en kanaalspecifieke aflevering.
Systeemprompt
Wat het model vóór het gesprek ziet, inclusief geïnjecteerde werkruimtebestanden.