---
title: "Hubungkan DeepSeek Harness ke Buzz Lewat Gateway Nostr"
description: "Integrasikan DeepSeek Harness ke Block Buzz lewat jembatan Nostr. Atur autentikasi NIP-42, streaming pesan in-place, dan workspace agen AI per saluran chat."
canonical_url: "https://techvoyage.dev/id/article/bringing-buzz-to-deepseek-harness"
last_updated: "2026-10-20T09:53:43.949Z"
---

![Tinjauan gateway pesan DeepSeek Harness terhubung ke saluran obrolan Block Buzz](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-buzz-nostr-gateway-overview.webp)

Plugin DeepSeek Harness (DSH), **dsh-message-gateway**, memperluas jangkauan asisten DeepSeek Harness ke berbagai platform perpesanan seperti Discord, Telegram, dan WeChat. Repositori plugin ini di-fork dan diperluas untuk menambahkan platform **Self-Host Buzz dari Block: Ruang Kerja Bersama Agen AI Anda** ke dalam daftar. Repositori hasil fork tersedia di GitHub di [https://github.com/Tech-Voyage-Dev/dsh-message-gateway](https://github.com/Tech-Voyage-Dev/dsh-message-gateway).

<article-card description="Pelajari cara self-host relay Buzz Block pada Linux VPS di balik Cloudflare. Kelola ruang kerja berbasis Nostr tempat kolaborasi manusia dan agen AI." image="https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/ID-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp" image-alt="Kartu teknologi premium 16:9 dengan aksen biru tua dan oranye yang mengilustrasikan cara self-host relay Buzz Block pada Ubuntu VPS, menampilkan panel bergaya glassmorphism bersih dengan tipografi terpusat." label="Panduan prasyarat" min-read="12" title="Self-Host Buzz dari Block: Ruang Kerja Bersama Agen AI Anda" to="/article/self-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues">



</article-card>

Asisten DSH bergabung ke relay Buzz sebagai anggota, menerima pesan langsung (DM) serta pesan saluran tempat asisten di-@mention, dan menjawab melalui pipeline agen per-obrolan yang sama persis dengan yang digunakan oleh antarmuka Web.

## Arsitektur Plugin dsh-message-gateway

Arsitektur plugin **dsh-message-gateway** terbagi menjadi dua bagian utama:

- **Host** (Node): `gateway-store` (kredensial, `~/.dsh/gateway.json`), `platforms.ts` (definisi platform dan uji koneksi), `routes.ts` (endpoint `/gateway/*`), dan `bridge-manager.ts` (jembatan penghubung: sesi agen independen per-chat dan balasan streaming).
- **Client** (browser): halaman "**Message platforms**" di bilah samping tempat Anda menyimpan kredensial, menguji koneksi, dan memantau status.

Menambahkan platform baru melibatkan langkah-langkah berikut:

1. **Kelas jembatan (bridge class)**: menyediakan fungsi `start/stop/status` ditambah callback `onText(text, frame)`, mencerminkan pola `wecom-bridge.ts`.
2. **Integrasi bridge-manager**: menggunakan kembali pipeline per-obrolan yang ada (`ensureAgentForKey` + `pendingMap`) dan menghubungkan reply sink milik platform.
3. **Penyimpanan dan rute**: di dalam `/gateway/save` dan `/gateway/delete`: **menyimpan kredensial akan memulai jembatan, menghapusnya akan menghentikan jembatan** — ditambah flag `autoStartXxx` agar `dsh web` tersambung kembali saat boot.

## Implementasi Jembatan Buzz: Protokol Nostr & Siklus Hidup Event

**DeepSeek Harness** digunakan untuk mengimplementasikan jembatan Buzz. Implementasi ini sepenuhnya mematuhi spesifikasi protokol Nostr berikut:

<table>
<thead>
  <tr>
    <th>
      <strong>
        Transportasi
      </strong>
    </th>
    
    <th>
      Satu WebSocket yang diautentikasi NIP-42; default <code>
        ws://localhost:3000
      </code>
      
      ; <code>
        http(s)://
      </code>
      
       dinormalkan menjadi <code>
        ws(s)://
      </code>
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        Autentikasi
      </strong>
    </td>
    
    <td>
      Event AUTH <code>
        kind 22242
      </code>
      
      , tag <code>
        [["relay", url], ["challenge", challenge]]
      </code>
      
      , konten kosong, ditandatangani dengan kunci agen
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Langganan (Subs)
      </strong>
    </td>
    
    <td>
      <strong>
        Cakupan saluran
      </strong>
      
      : <code>
        REQ {"kinds":[9], "#h":[<uuid>]}
      </code>
      
       — satu REQ per saluran. REQ global <code>
        kinds:[9]
      </code>
      
       menerima EOSE tetapi tidak membagikan event; filter <code>
        #h
      </code>
      
       multi-nilai <strong>
        tidak
      </strong>
      
       bekerja
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Penemuan (Discovery)
      </strong>
    </td>
    
    <td>
      <code>
        REQ {kinds:[39000]}
      </code>
      
       historis untuk metadata saluran (<code>
        type == "dm"
      </code>
      
       menandai saluran pesan langsung)
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Keanggotaan
      </strong>
    </td>
    
    <td>
      <code>
        REQ {kinds:[44100,44101], "#p":[pubkey kita], since: now-60s}
      </code>
      
       live — 44100 = ditambahkan, 44101 = dihapus, membawa <code>
        p
      </code>
      
      +<code>
        h
      </code>
      
      ; perubahan keanggotaan memperbarui langganan <strong>
        tanpa reconnect
      </strong>
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Event Obrolan
      </strong>
    </td>
    
    <td>
      <code>
        kind 9
      </code>
      
       dengan tag <code>
        ["h", channel]
      </code>
      
      , opsional <code>
        ["e", replyTo]
      </code>
      
      , <code>
        ["p", mention]
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Edit In-Place
      </strong>
    </td>
    
    <td>
      <code>
        kind 40003
      </code>
      
       dengan <code>
        h
      </code>
      
       + <code>
        e
      </code>
      
      →target; konten diganti; batas relay 64 KB → jaga payload ≤ 60.000 B; balasan panjang dipecah — bagian 0 menggantikan edit, bagian sisa ditambahkan sebagai pesan <code>
        kind 9
      </code>
      
       berulir (<code>
        e
      </code>
      
      →root)
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Frame CLOSED
      </strong>
    </td>
    
    <td>
      <code>
        auth-required
      </code>
      
       pra-AUTH adalah bootstrap normal (selesaikan AUTH, buka kembali langganan); pasca-AUTH → langganan ulang terbatas (3 percobaan, jeda 0/1/2 detik); reconnect membangun ulang semua
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Batas Relay
      </strong>
    </td>
    
    <td>
      ≤ 2000 event historis per langganan, diurutkan dari yang terbaru bahkan saat menggunakan <code>
        since
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Penyaringan Mention
      </strong>
    </td>
    
    <td>
      Proses event <code>
        kind 9
      </code>
      
       masuk hanya jika: (a) tag <code>
        p
      </code>
      
       menyertakan pubkey kita, (b) saluran adalah DM, atau (c) root <code>
        e
      </code>
      
       adalah event kita sendiri. Abaikan pubkey sendiri (cegah loop)
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Mention Keluar
      </strong>
    </td>
    
    <td>
      Teks keluar dipublikasikan apa adanya — relay tidak memvalidasi token <code>
        @
      </code>
      
      ; tag <code>
        p
      </code>
      
       menyertakan penulis pesan masuk ditambah hingga 7 pubkey lain yang disebutkan (maksimal 8)
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Pesan Langsung (DM)
      </strong>
    </td>
    
    <td>
      Saluran teks biasa dengan cakupan relay (metadata <code>
        type: "dm"
      </code>
      
      ) — tanpa enkripsi NIP-04/44 pada jembatan ini
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Lampiran (Masuk)
      </strong>
    </td>
    
    <td>
      NIP-92 <code>
        imeta
      </code>
      
       (<code>
        url
      </code>
      
      , <code>
        sha256
      </code>
      
      , <code>
        m
      </code>
      
      ) → unduh http(s) biasa, verifikasi SHA-256, batas 20 MB, maksimal 4 per pesan; gambar keluar tidak didukung
    </td>
  </tr>
</tbody>
</table>

Diagram berikut mengilustrasikan alur inisialisasi (bootstrap) jembatan Buzz:

![Diagram urutan yang mengilustrasikan proses bootstrap dan autentikasi NIP-42 jembatan Buzz](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-buzz-bootstrap.webp)### Streaming Real-Time Lewat Pengeditan In-Place Nostr (Kind 40003)

Nostr tidak memiliki indikator mengetik bawaan dan event-nya bersifat append-only. Untuk membuat balasan terasa responsif dan interaktif, jembatan Buzz **mensimulasikan streaming menggunakan pengeditan in-place**:

![Diagram alur pengeditan in-place yang mensimulasikan respons streaming dengan event kind 40003](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-buzz-reply.webp)- *Jembatan Buzz menerbitkan event placeholder kind 9, kemudian secara progresif menulis ulang event tersebut dengan pengeditan in-place kind 40003 yang dibatasi lajunya, dan menuliskan edit final saat agen menyelesaikan tugasnya. Ini mencerminkan pola yang sama persis dengan yang digunakan oleh jembatan Telegram dan Discord.*

### Menghubungkan Workspace DeepSeek Harness Lewat Perintah Chat

Fitur "Workspaces" pada antarmuka Web DSH dikelola oleh layanan `workspaceRegistry` (`@deepseek-ai/dsh-workspace`):

```typescript
const existing = await ctx.workspaceRegistry.resolveByPath(request.path);
```

Jembatan Buzz menyediakan perintah obrolan, `/workspace <folder>`, yang mendaftarkan folder yang ada ke DSH. Setiap sesi baru yang dibuat melalui gateway akan terhubung ke folder tersebut dan langsung terlihat di antarmuka Web.

![Arsitektur pendaftaran workspace DeepSeek Harness dari perintah obrolan melalui gateway](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-buzz-workspace.webp)Tiga pertimbangan desain yang perlu diperhatikan:

- **Beralih folder = sesi baru.** Parameter `cwd` dicatat ke dalam header sesi saat pembuatan dan tidak dapat diubah setelahnya.
- **Folder harus sudah ada sebelumnya.** Fungsi `create` menolak jalur folder yang belum ada di disk.
- **Perintah sensitif keamanan.** Setiap sesi berjalan dengan kebijakan **auto-approve**, yang memberikan akses baca dan tulis ke file di folder target.

## Panduan Langkah Demi Langkah: Instalasi & Konfigurasi

1. Jalankan perintah berikut di terminal Anda:

```bash
dsh plugin --profile web add https://github.com/Tech-Voyage-Dev/dsh-message-gateway.git

# Start DSH web
dsh web
```

1. Setelah antarmuka Web DSH terbuka di peramban web, klik ikon "**Message platforms**":

![Bilah samping antarmuka Web DeepSeek Harness menyorot menu konfigurasi Message platforms](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-web-ui-message-platforms-sidebar-icon.webp)

1. Klik menu "**Buzz**" di panel sebelah kiri:

![Panel pengaturan konfigurasi jembatan Buzz di gateway pesan DeepSeek Harness](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-message-gateway-buzz-config-panel.webp)

1. Klik "**Generate keypair**" untuk membuat pasangan kunci Nostr baru. Salin public key `npub` ke tempat yang aman.
2. Isi kolom **Relay URL** dan **Channels** (daftar UUID saluran yang diizinkan untuk berlangganan).
3. Klik tombol "**Save**".

Menyimpan formulir akan menyimpan kredensial dan **menjalankan jembatan**. Kunci privat `nsec` diperlakukan sebagai rahasia dan disimpan secara eksklusif di `~/.dsh/gateway.json`.

### Mendaftarkan Pasangan Kunci Agen ke Relay Nostr Buzz

**Tambahkan asisten DSH ke relay sebagai anggota.** Gunakan pubkey `npub` yang telah dibuat sebelumnya:

```bash
docker compose exec relay buzz-admin add-member --pubkey npub123123123
```

**Tambahkan asisten DSH ke saluran tertentu.** Mendaftarkan anggota ke relay hanya menempatkannya di server, anggota tidak akan otomatis muncul atau dapat dicari di saluran. Saat menjalankan langkah ini menggunakan `buzz-cli`, perhatikan bahwa parameter `--pubkey` harus dalam format **HEX**, bukan npub (perintah `buzz-admin add-member` mencetak pubkey HEX anggota):

```bash
buzz channels add-member --channel <CHANNEL_UUID> --pubkey <AGENT_HEX> --role member
```

<article-card description="Petunjuk langkah demi langkah untuk menginstal dan mengonfigurasi buzz-cli untuk mengelola saluran Nostr, kunci anggota, dan izin agen AI." image="https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/ID-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp" image-alt="Kartu teknologi premium 16:9 dengan aksen biru tua dan oranye yang mengilustrasikan cara self-host relay Buzz Block pada Ubuntu VPS, menampilkan panel bergaya glassmorphism bersih dengan tipografi terpusat." label="Panduan CLI" min-read="5" title="Cara Menginstal dan Menggunakan buzz-cli" to="/article/self-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#install-buzz-cli">



</article-card>

Perbarui profil asisten DSH di relay Nostr agar memiliki nama tampilan yang jelas dengan `buzz-cli`:

![Memperbarui nama tampilan asisten DeepSeek Harness pada relay Nostr menggunakan buzz-cli](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-assistant-buzz-cli-profile-update.webp)

Kirim salam **Wave** (sapaan DM khas Buzz) ke asisten DSH. Balasan konfirmasi akan segera diterima:

![Uji koneksi dengan mengirim sapaan Wave sebagai DM ke asisten DeepSeek Harness di Buzz](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-buzz-dm-wave-greeting-reply.webp)

*Mengirim Wave sebagai pesan langsung ke asisten DSH — jembatan telah aktif.*

### Mengaktifkan Akses Folder Lokal dengan `/workspace`

Karena opsi `allowWorkspace` dinonaktifkan (`false`) secara default, perintah `/workspace` awalnya akan ditolak:

![Pemberitahuan kesalahan saat perintah workspace ditolak karena allowWorkspace dinonaktifkan](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-buzz-workspace-command-rejected-error.webp)

Aktifkan opsi tersebut di file `~/.dsh/profiles/web/cordis.patch.yml`, lalu mulai ulang `dsh web`:

```yml
- id: ui-message-gateway
  config:
    allowWorkspace: true
```

Setelah dimulai ulang:

![Pesan konfirmasi keberhasilan setelah menjalankan perintah pendaftaran workspace di Buzz](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-buzz-workspace-command-success-confirmation.webp)

Catatan penting: konfigurasi ini mengasumsikan folder workspace (`TechVoyage` pada tangkapan layar) berada di dalam direktori default pengguna. Jika tidak, tentukan jalur absolut lengkap. Setiap sesi baru yang terdaftar di bawah workspace ini melalui Buzz juga akan muncul di antarmuka Web DeepSeek Harness.

![Antarmuka Web DeepSeek Harness menampilkan sesi workspace yang disinkronkan dari Buzz](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-web-ui-synced-workspace-session.webp)

### Perintah yang Tersedia di Buzz

Semua perintah yang didukung di platform lain dapat digunakan secara mulus di Buzz:

<table>
<thead>
  <tr>
    <th>
      Perintah
    </th>
    
    <th>
      Fungsi
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        /workspace <folder>
      </code>
    </td>
    
    <td>
      Daftarkan folder yang ada sebagai workspace obrolan (wajib diaktifkan di konfigurasi)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        /help
      </code>
    </td>
    
    <td>
      Tampilkan daftar perintah yang tersedia
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        /time
      </code>
    </td>
    
    <td>
      Tampilkan waktu sistem saat ini
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        /new
      </code>
    </td>
    
    <td>
      Mulai sesi obrolan baru yang bersih
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        /clear
      </code>
    </td>
    
    <td>
      Bersihkan riwayat percakapan saat ini
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        /status
      </code>
    </td>
    
    <td>
      Tampilkan status operasional jembatan
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        /stats
      </code>
    </td>
    
    <td>
      Tampilkan jumlah obrolan dan status per jembatan (semua platform, termasuk Buzz)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        /commands
      </code>
    </td>
    
    <td>
      Tampilkan deskripsi lengkap semua perintah
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @path/to/file
      </code>
    </td>
    
    <td>
      Bekerja persis seperti mention file di Web: model membaca file relatif terhadap workspace obrolan; <code>
        @
      </code>
      
      , <code>
        @awalan
      </code>
      
      , atau <code>
        /files <awalan>
      </code>
      
       membalas dengan file/folder yang cocok
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        /model
      </code>
    </td>
    
    <td>
      <code>
        [provider model effort]
      </code>
      
       — divalidasi terhadap katalog LLM aktif, mengubah model dan effort obrolan; <code>
        /model
      </code>
      
       menampilkan opsi, <code>
        /model reset
      </code>
      
       mengembalikan default
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        /effort
      </code>
    </td>
    
    <td>
      <code>
        <id>
      </code>
      
       menyesuaikan level penalaran model saja; <code>
        /effort reset
      </code>
      
       mengembalikan pengaturan default
    </td>
  </tr>
</tbody>
</table>

### Ikhtisar Keamanan

- Kunci privat **nsec** hanya tersimpan di `~/.dsh/gateway.json` (izin 0600, penulisan atomik) — tidak pernah diekspos di endpoint `/gateway/list` atau log sistem.
- Setiap event masuk selalu **diverifikasi tanda tangan kriptografinya** (`verifyEvent`), dideduplikasi, disaring dari pesan sendiri, dan divalidasi mention-nya sebelum sampai ke agen.
- **Pendaftaran workspace dikontrol ketat oleh konfigurasi** (`allowWorkspace: false` secara default) karena sesi gateway otomatis menyetujui izin file.

## Kesimpulan: Kolaborasi AI Terdesentralisasi di Buzz

Tantangan utama dalam menambahkan Buzz ke `dsh-message-gateway` terletak pada pemenuhan kontrak protokol Nostr. Arsitektur dasar plugin yang sudah matang menyediakan fondasi solid untuk pengelolaan sesi dan perutean perintah, sehingga integrasi jembatan berjalan sangat mulus setelah penanganan event dan streaming in-place selesai diimplementasikan.

## Referensi:

- [dsh-message-gateway architecture guide](https://github.com/a792883583/dsh-message-gateway/blob/main/docs/architecture.md) — panduan arsitektur, resep ekstensi, dan catatan keamanan
- [nostr-tools](https://github.com/nbd-wtf/nostr-tools) — pustaka Nostr yang digunakan di balik layar
- [deer-flow IM channel connections](https://github.com/bytedance/deer-flow/blob/main/backend/docs/IM_CHANNEL_CONNECTIONS.md) — referensi pola koneksi saluran pesan instan
