Concept internals
Markdown biçimlendirmesi
OpenClaw, kanala özgü çıktıyı işlemeden önce giden Markdown içeriğini paylaşılan bir ara temsile (IR) dönüştürerek biçimlendirir. IR, kaynak metni olduğu gibi korurken stil/bağlantı aralıklarını taşır; böylece parçalara ayırma ve işleme kanallar arasında tutarlı kalabilir.
Hedefler
- Tutarlılık: tek ayrıştırma adımı, birden çok işleyici.
- Güvenli parçalara ayırma: metni işlemeden önce bölerek satır içi biçimlendirmenin parçalar arasında asla bozulmamasını sağlama.
- Kanala uyum: aynı IR'yi Markdown yeniden ayrıştırılmadan Slack mrkdwn, Telegram HTML ve Signal stil aralıklarına eşleme.
İş hattı
- Markdown ayrıştır -> IR
- IR, düz metin artı stil aralıkları (kalın/italik/üstü çizili/kod/spoiler) ve bağlantı aralıklarından oluşur.
- Ofsetler UTF-16 kod birimleridir, böylece Signal stil aralıkları API'siyle hizalanır.
- Tablolar yalnızca bir kanal tablo dönüştürmeyi seçtiğinde ayrıştırılır.
- IR'yi parçalara ayır (önce biçim)
- Parçalara ayırma, işlemeden önce IR metni üzerinde gerçekleşir.
- Satır içi biçimlendirme parçalar arasında bölünmez; aralıklar parça başına dilimlenir.
- Kanal başına işle
- Slack: mrkdwn belirteçleri (kalın/italik/üstü çizili/kod), bağlantılar
<url|label>olarak. - Telegram: HTML etiketleri (
<b>,<i>,<s>,<code>,<pre><code>,<a href>). - Signal: düz metin +
text-stylearalıkları; etiket farklıysa bağlantılarlabel (url)olur.
- Slack: mrkdwn belirteçleri (kalın/italik/üstü çizili/kod), bağlantılar
IR örneği
Girdi Markdown:
Hello **world** - see [docs](https://docs.openclaw.ai).IR (şematik):
{ "text": "Hello world - see docs.", "styles": [{ "start": 6, "end": 11, "style": "bold" }], "links": [{ "start": 19, "end": 23, "href": "https://docs.openclaw.ai" }]}Nerede kullanılır
- Slack, Telegram ve Signal giden bağdaştırıcıları IR'den işler.
- Diğer kanallar (WhatsApp, iMessage, Microsoft Teams, Discord) hâlâ düz metin veya kendi biçimlendirme kurallarını kullanır; etkinleştirildiğinde Markdown tablo dönüştürme, parçalara ayırmadan önce uygulanır.
Tablo işleme
Markdown tabloları sohbet istemcileri arasında tutarlı şekilde desteklenmez. Kanal başına (ve hesap başına) dönüştürmeyi kontrol etmek için markdown.tables kullanın.
code: tabloları kod blokları olarak işler (çoğu kanal için varsayılan).bullets: her satırı madde işaretlerine dönüştürür (Matrix, Signal ve WhatsApp için varsayılan).off: tablo ayrıştırmayı ve dönüştürmeyi devre dışı bırakır; ham tablo metni olduğu gibi geçer.
Yapılandırma anahtarları:
channels: discord: markdown: tables: code accounts: work: markdown: tables: offParçalara ayırma kuralları
- Parça sınırları kanal bağdaştırıcılarından/yapılandırmadan gelir ve IR metnine uygulanır.
- Kod çitleri, kanalların bunları doğru işlemesi için sonunda satır sonu olan tek bir blok olarak korunur.
- Liste önekleri ve blok alıntı önekleri IR metninin parçasıdır, bu yüzden parçalara ayırma önek ortasında bölmez.
- Satır içi stiller (kalın/italik/üstü çizili/satır içi kod/spoiler) parçalar arasında asla bölünmez; işleyici her parçanın içinde stilleri yeniden açar.
Kanallar arasında parçalara ayırma davranışı hakkında daha fazlasına ihtiyacınız varsa bkz. Streaming + chunking.
Bağlantı ilkesi
- Slack:
[label](url)-><url|label>; çıplak URL'ler çıplak kalır. Çift bağlantı oluşturmayı önlemek için ayrıştırma sırasında otomatik bağlantı devre dışıdır. - Telegram:
[label](url)-><a href="url">label</a>(HTML ayrıştırma modu). - Signal: etiket URL ile eşleşmediği sürece
[label](url)->label (url).
Spoilerlar
Spoiler işaretleri (||spoiler||) yalnızca Signal için ayrıştırılır; burada SPOILER stil aralıklarına eşlenir. Diğer kanallar bunları düz metin olarak ele alır.
Kanal biçimlendiricisi ekleme veya güncelleme
- Bir kez ayrıştır: kanala uygun seçeneklerle (otomatik bağlantı, başlık stili, blok alıntı öneki) paylaşılan
markdownToIR(...)yardımcısını kullanın. - İşle:
renderMarkdownWithMarkers(...)ve bir stil işareti haritası (veya Signal stil aralıkları) ile bir işleyici uygulayın. - Parçalara ayır: işlemeden önce
chunkMarkdownIR(...)çağırın; her parçayı işleyin. - Bağdaştırıcıyı bağla: yeni parçalayıcıyı ve işleyiciyi kullanmak için kanal giden bağdaştırıcısını güncelleyin.
- Test et: kanal parçalara ayırma kullanıyorsa biçim testleri ve bir giden teslimat testi ekleyin veya güncelleyin.
Sık karşılaşılan tuzaklar
- Slack açılı ayraç belirteçleri (
<@U123>,<#C123>,<https://...>) korunmalıdır; ham HTML'yi güvenli şekilde kaçışlayın. - Telegram HTML, bozuk işaretlemeyi önlemek için etiket dışındaki metnin kaçışlanmasını gerektirir.
- Signal stil aralıkları UTF-16 ofsetlerine bağlıdır; kod noktası ofsetleri kullanmayın.
- Çitli kod blokları için sondaki satır sonlarını koruyun, böylece kapanış işaretleri kendi satırlarına yerleşir.