Skip to main content
OpenClaw, giden Markdown’ı kanala özgü çıktıyı oluşturmadan önce paylaşılan bir ara gösterime (IR) dönüştürür. IR, düz metnin yanı sıra stil/bağlantı aralıklarını korur; böylece tek bir ayrıştırma adımı her kanalı besler ve parçalara ayırma, biçimlendirmeyi hiçbir zaman aralığın ortasından bölmez.

İşlem hattı

  1. Markdown’ı IR’ye ayrıştırın (markdownToIR) - düz metnin yanı sıra stil aralıkları (kalın, italik, üstü çizili, kod, kod bloğu, spoiler, blok alıntı, 1-6. düzey başlık) ve bağlantı aralıkları. Ofsetler UTF-16 kod birimleridir; böylece Signal stil aralıkları doğrudan API’siyle hizalanır. Tablolar yalnızca kanal bir tablo modunu etkinleştirdiğinde ayrıştırılır.
  2. IR’yi parçalara ayırın (chunkMarkdownIR / renderMarkdownIRChunksWithinLimit)
    • bölme, oluşturmadan önce IR metninde gerçekleşir; böylece satır içi stiller ve bağlantılar bir sınırı aşarak bozulmak yerine her parçaya göre dilimlenir.
  3. Kanal başına oluşturun (renderMarkdownWithMarkers) - bir stil işareti eşlemesi aralıkları kanalın yerel işaretlemesine dönüştürür.

IR örneği

Girdi Markdown’ı:
IR (şematik):

Tablo işleme

markdown.tables, bir kanalın Markdown tablolarını kanal başına ve isteğe bağlı olarak hesap başına nasıl dönüştüreceğini denetler: Kanal başına Plugin varsayılanları: Signal, WhatsApp ve Matrix için varsayılan bullets; Mattermost için off; Telegram için block değeridir (hesapta richMessages etkin değilse code olarak çözümlenir). Açık bir Plugin varsayılanı bulunmayan tüm kanallar code değerine geri döner.

Parçalama kuralları

  • Parça sınırları kanal bağdaştırıcılarından/yapılandırmasından gelir ve oluşturulan çıktıya değil IR metnine uygulanır.
  • Çitli kod blokları, kanalların kapanış çitini doğru oluşturabilmesi için sonunda yeni satır bulunan tek bir blok olarak korunur.
  • Liste ve blok alıntı önekleri IR metninin parçasıdır; bu nedenle parçalama hiçbir zaman önekin ortasından bölmez.
  • Satır içi stiller hiçbir zaman parçalar arasında bölünmez; oluşturucu, açık bir stili sonraki parçanın başında yeniden açar.
Kanallardaki parça sınırı ve teslim davranışı için Akış ve parçalama sayfasına bakın.

Bağlantı politikası

  • Slack: [label](url) -> <url|label>; çıplak URL’ler çıplak kalır.
  • Telegram: [label](url) -> <a href="url">label</a> (HTML ayrıştırma modu).
  • Signal: Etiket zaten URL ile eşleşmiyorsa [label](url) -> label (url).

Spoiler’lar

Spoiler işaretleri (||spoiler||) Signal için ayrıştırılır (SPOILER stil aralıklarına eşlenir) ve Telegram için ayrıştırılır (<tg-spoiler> olarak eşlenir). Diğer kanallar ||...|| değerini düz metin olarak işler.

Kanal biçimlendiricisi ekleme veya güncelleme

  1. Kanala uygun seçenekleri (autolink, headingStyle, blockquotePrefix, tableMode) ileterek markdownToIR(...) ile bir kez ayrıştırın.
  2. Bir stil işareti eşlemesiyle (veya Signal gibi aktarımlar için özel stil aralığı mantığıyla) renderMarkdownWithMarkers(...) kullanarak oluşturun.
  3. Her parçayı oluşturmadan önce chunkMarkdownIR(...) veya renderMarkdownIRChunksWithinLimit(...) ile parçalara ayırın.
  4. Giden gönderim yolundan yeni parçalayıcıyı ve oluşturucuyu çağırması için bağdaştırıcıyı bağlayın.
  5. Biçim testleriyle ve kanal parçalara ayırıyorsa bir giden teslim testiyle test edin.

Yaygın sorunlar

  • Slack açılı ayraç belirteçleri (<@U123>, <#C123>, <https://...>) kaçış işleminden sağ çıkmalıdır; ham HTML’nin yine de güvenli biçimde kaçışlanması gerekir.
  • Telegram HTML’sinde bozuk işaretlemeyi önlemek için etiketlerin dışındaki metnin kaçışlanması gerekir.
  • Signal stil aralıkları kod noktası ofsetlerini değil, UTF-16 ofsetlerini kullanır.
  • Kapanış işaretinin kendi satırına yerleşmesi için çitli kod bloklarının sonundaki yeni satırları koruyun.

İlgili

Akış ve parçalama

Giden akış davranışı, parça sınırları ve kanala özgü teslim.

Sistem istemi

Eklenen çalışma alanı dosyaları dahil olmak üzere modelin konuşmadan önce gördükleri.