---
title: "Kết nối DeepSeek Harness với Buzz qua Gateway Nostr"
description: "Tích hợp DeepSeek Harness với Block Buzz bằng cầu nối Nostr. Thiết lập xác thực NIP-42, truyền phát tin nhắn chỉnh sửa tại chỗ và workspace đa tác nhân AI."
canonical_url: "https://techvoyage.dev/vi/article/bringing-buzz-to-deepseek-harness"
last_updated: "2026-10-20T09:53:51.047Z"
---

![Tổng quan về cổng tin nhắn DeepSeek Harness kết nối với kênh 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**, mở rộng trợ lý DeepSeek Harness tới nhiều nền tảng nhắn tin phổ biến như Discord, Telegram và WeChat. Kho lưu trữ plugin này đã được fork và phát triển mở rộng để đưa nền tảng **Tự host Buzz của Block: Không gian cộng tác giữa người và AI** vào danh sách hỗ trợ. Kho lưu trữ được fork hiện có sẵn công khai trên GitHub tại [https://github.com/Tech-Voyage-Dev/dsh-message-gateway](https://github.com/Tech-Voyage-Dev/dsh-message-gateway).

<article-card description="Tìm hiểu cách tự host Block's Buzz trên VPS Linux phía sau Cloudflare. Vận hành không gian làm việc Nostr bảo mật giúp con người và AI cộng tác hiệu quả." image="https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/VI-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp" image-alt="Một thẻ công nghệ 16:9 cao cấp với các điểm nhấn màu xanh đậm và màu cam minh họa cách tự lưu trữ (self-host) cổng relay Buzz của Block trên Ubuntu VPS, có bảng glassmorphic sạch sẽ với kiểu chữ chính giữa." label="Hướng dẫn điều kiện tiên quyết" min-read="12" title="Tự host Buzz của Block: Không gian cộng tác giữa người và AI" to="/article/self-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues">



</article-card>

Trợ lý DSH tham gia vào relay Buzz như một thành viên chính thức, nhận tin nhắn trực tiếp (DM) cũng như tin nhắn trong các kênh mà nó được @mention, và phản hồi thông qua cùng một quy trình agent pipeline theo từng phiên trò chuyện tương tự giao diện Web.

## Kiến trúc của Plugin dsh-message-gateway

Kiến trúc của plugin **dsh-message-gateway** được chia làm hai phần cốt lõi:

- **Host** (môi trường Node): `gateway-store` (quản lý thông tin xác thực tại `~/.dsh/gateway.json`), `platforms.ts` (định nghĩa nền tảng và kiểm tra kết nối), `routes.ts` (các endpoint `/gateway/*`), và `bridge-manager.ts` (các cầu nối thường trú: quản lý phiên tác nhân độc lập cho từng cuộc trò chuyện và luồng phản hồi streaming).
- **Client** (phía trình duyệt): trang "**Message platforms**" ở thanh bên nơi bạn lưu thông tin đăng nhập, kiểm tra kết nối mạng và giám sát trạng thái hoạt động.

Việc tích hợp một nền tảng mới bao gồm các bước sau:

1. **Lớp cầu nối (bridge class)**: cung cấp các phương thức `start/stop/status` kèm theo một hàm gọi lại (callback) `onText(text, frame)`, tương tự mẫu thiết kế của `wecom-bridge.ts`.
2. **Đấu nối vào bridge-manager**: tái sử dụng pipeline theo từng đoạn chat sẵn có (`ensureAgentForKey` + `pendingMap`) và gắn kết luồng trả lời của nền tảng vào.
3. **Lưu trữ và định tuyến**: trong `/gateway/save` và `/gateway/delete`: **lưu thông tin đăng nhập sẽ khởi động cầu nối, xóa sẽ dừng cầu nối** — kèm theo cờ `autoStartXxx` để `dsh web` tự động kết nối lại khi hệ thống khởi động.

## Hiện thực Cầu nối Buzz: Giao thức Nostr & Vòng đời sự kiện

**DeepSeek Harness** đã được sử dụng trực tiếp để hiện thực hóa cầu nối Buzz. Quá trình triển khai tuân thủ nghiêm ngặt các đặc tả kỹ thuật của giao thức Nostr sau:

<table>
<thead>
  <tr>
    <th>
      <strong>
        Hạng mục
      </strong>
    </th>
    
    <th>
      Đặc tả chi tiết
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        Giao vận (Transport)
      </strong>
    </td>
    
    <td>
      Một kết nối WebSocket duy nhất có xác thực NIP-42; mặc định <code>
        ws://localhost:3000
      </code>
      
      ; <code>
        http(s)://
      </code>
      
       được chuẩn hóa thành <code>
        ws(s)://
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Xác thực (Auth)
      </strong>
    </td>
    
    <td>
      Sự kiện AUTH <code>
        kind 22242
      </code>
      
      , gắn thẻ <code>
        [["relay", url], ["challenge", challenge]]
      </code>
      
      , nội dung trống, ký bằng khóa riêng của tác nhân
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Đăng ký nhận tin
      </strong>
    </td>
    
    <td>
      <strong>
        Theo từng kênh
      </strong>
      
      : <code>
        REQ {"kinds":[9], "#h":[<uuid>]}
      </code>
      
       — một REQ cho mỗi kênh. Lệnh REQ toàn cục <code>
        kinds:[9]
      </code>
      
       nhận EOSE nhưng không phân phối sự kiện; bộ lọc <code>
        #h
      </code>
      
       đa giá trị <strong>
        không
      </strong>
      
       chạy
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Khám phá (Discovery)
      </strong>
    </td>
    
    <td>
      Truy vấn lịch sử <code>
        REQ {kinds:[39000]}
      </code>
      
       để lấy metadata của kênh (<code>
        type == "dm"
      </code>
      
       đánh dấu kênh tin nhắn trực tiếp)
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Tư cách thành viên
      </strong>
    </td>
    
    <td>
      Lắng nghe trực tiếp <code>
        REQ {kinds:[44100,44101], "#p":[pubkey của ta], since: now-60s}
      </code>
      
       — 44100 = thêm, 44101 = xóa (chứa <code>
        p
      </code>
      
      +<code>
        h
      </code>
      
      ); cập nhật gói đăng ký <strong>
        không cần kết nối lại
      </strong>
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Sự kiện trò chuyện
      </strong>
    </td>
    
    <td>
      <code>
        kind 9
      </code>
      
       với thẻ <code>
        ["h", channel]
      </code>
      
      , tùy chọn <code>
        ["e", replyTo]
      </code>
      
      , <code>
        ["p", mention]
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Chỉnh sửa tại chỗ
      </strong>
    </td>
    
    <td>
      <code>
        kind 40003
      </code>
      
       với <code>
        h
      </code>
      
       + <code>
        e
      </code>
      
      →mục tiêu; thay thế nội dung; giới hạn relay 64 KB → giữ tải ≤ 60.000 B; phản hồi dài được cắt mảnh — mảnh 0 ghi đè, phần dư nối tiếp dạng luồng <code>
        kind 9
      </code>
      
       (<code>
        e
      </code>
      
      →gốc)
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Khung CLOSED
      </strong>
    </td>
    
    <td>
      <code>
        auth-required
      </code>
      
       trước AUTH là khởi động bình thường (hoàn tất AUTH, mở lại đăng ký); sau AUTH → thử lại có giới hạn (3 lần, lùi 0/1/2 giây); kết nối lại sẽ dựng lại toàn bộ trạng thái
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Giới hạn relay
      </strong>
    </td>
    
    <td>
      Tối đa 2000 sự kiện lịch sử trên mỗi đăng ký, sắp xếp mới nhất trước ngay cả khi sử dụng bộ lọc <code>
        since
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Kiểm soát mention
      </strong>
    </td>
    
    <td>
      Chỉ xử lý <code>
        kind 9
      </code>
      
       gửi đến khi: (a) thẻ <code>
        p
      </code>
      
       có pubkey của ta, (b) kênh là DM, hoặc (c) gốc <code>
        e
      </code>
      
       là sự kiện của chính ta. Bỏ qua pubkey của bản thân (chống lặp vô tận)
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Mention gửi đi
      </strong>
    </td>
    
    <td>
      Văn bản gửi đi được xuất bản nguyên văn — relay không kiểm tra cú pháp <code>
        @
      </code>
      
      ; thẻ <code>
        p
      </code>
      
       mang tác giả nguồn cùng tối đa 7 pubkey khác được nhắc đến (tổng tối đa 8)
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Tin nhắn riêng (DM)
      </strong>
    </td>
    
    <td>
      Kênh văn bản thuần túy trong phạm vi relay (metadata <code>
        type: "dm"
      </code>
      
      ) — không áp dụng mã hóa NIP-04/44 trong cầu nối này
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Tệp đính kèm (Đến)
      </strong>
    </td>
    
    <td>
      NIP-92 <code>
        imeta
      </code>
      
       (<code>
        url
      </code>
      
      , <code>
        sha256
      </code>
      
      , <code>
        m
      </code>
      
      ) → tải xuống qua http(s), kiểm tra mã băm SHA-256, giới hạn 20 MB, tối đa 4 tệp/tin; hình ảnh gửi đi hiện không được hỗ trợ
    </td>
  </tr>
</tbody>
</table>

Sơ đồ dưới đây minh họa toàn bộ quy trình khởi tạo (bootstrap) kết nối của cầu nối Buzz:

![Sơ đồ trình tự minh họa quy trình khởi tạo bootstrap và xác thực NIP-42 của cầu nối Buzz](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-buzz-bootstrap.webp)### Truyền phát thời gian thực thông qua chỉnh sửa tại chỗ Nostr (Kind 40003)

Do Nostr không có chỉ báo đang gõ tin nhắn tự nhiên và các sự kiện đều là dạng ghi tiếp (append-only), cầu nối Buzz **mô phỏng hiệu ứng truyền phát streaming bằng cách chỉnh sửa tại chỗ**:

![Sơ đồ luồng chỉnh sửa tại chỗ mô phỏng phản hồi truyền phát streaming với sự kiện kind 40003](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-buzz-reply.webp)- *Cầu nối Buzz xuất bản trước một sự kiện giữ chỗ kind 9, sau đó liên tục ghi đè nội dung theo tốc độ định sẵn bằng các sự kiện chỉnh sửa tại chỗ kind 40003, và thực hiện lần chỉnh sửa cuối cùng khi tác nhân hoàn tất phản hồi. Điều này tái hiện chính xác mô hình "gửi rồi sửa" đã được kiểm chứng trên các cầu nối Telegram và Discord.*

### Kết nối Workspace của DeepSeek Harness thông qua lệnh chat

Tính năng "Workspaces" trên giao diện Web DSH được quản lý bởi dịch vụ nền tảng `workspaceRegistry` (`@deepseek-ai/dsh-workspace`):

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

Cầu nối Buzz cung cấp lệnh trò chuyện `/workspace <thư mục>`, cho phép đăng ký một thư mục sẵn có vào DSH. Mọi phiên làm việc mới được tạo qua gateway sẽ tự động gắn vào thư mục này và xuất hiện đồng bộ trên giao diện Web.

![Kiến trúc đăng ký workspace DeepSeek Harness từ các lệnh trò chuyện qua gateway](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-buzz-workspace.webp)Ba lưu ý quan trọng về mặt thiết kế:

- **Đổi thư mục = Tạo phiên mới.** Tham số `cwd` được ghi cố định vào tiêu đề phiên khi khởi tạo và không thể chỉnh sửa về sau.
- **Thư mục bắt buộc phải tồn tại.** Hàm `create` sẽ từ chối các đường dẫn không có thực trên ổ đĩa.
- **Lệnh có yêu cầu bảo mật cao.** Mỗi phiên làm việc đều hoạt động theo chính sách **auto-approve** (tự động phê duyệt), cấp quyền truy cập tệp trong thư mục mục tiêu.

## Hướng dẫn cài đặt và cấu hình từng bước

1. Chạy các lệnh sau trong cửa sổ dòng lệnh terminal của bạn:

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

# Start DSH web
dsh web
```

1. Khi giao diện Web DSH mở ra trong trình duyệt web, nhấp vào biểu tượng "**Message platforms**":

![Thanh bên giao diện Web DeepSeek Harness làm nổi bật menu cấu hình Message platforms](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-web-ui-message-platforms-sidebar-icon.webp)

1. Chọn mục "**Buzz**" ở bảng điều khiển bên trái:

![Bảng cài đặt cấu hình cầu nối Buzz trong cổng tin nhắn DeepSeek Harness](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-message-gateway-buzz-config-panel.webp)

1. Nhấp vào "**Generate keypair**" để tạo cặp khóa Nostr mới. Hãy sao chép khóa công khai `npub` vào nơi an toàn.
2. Điền thông tin vào ô **Relay URL** và **Channels** (danh sách UUID các kênh cho phép đăng ký).
3. Nhấp vào nút "**Save**".

Lưu biểu mẫu sẽ lưu trữ thông tin đăng nhập và **kích hoạt cầu nối khởi chạy**. Khóa bí mật `nsec` được coi là thông tin mật tuyệt đối và chỉ lưu trữ duy nhất trong tệp `~/.dsh/gateway.json`.

### Đăng ký cặp khóa tác nhân lên Buzz Nostr Relay

**Thêm trợ lý DSH vào relay với tư cách là một thành viên.** Sử dụng khóa công khai `npub` vừa tạo ở bước trên:

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

**Thêm trợ lý DSH vào một kênh cụ thể.** Việc thêm thành viên vào relay chỉ mới đưa tác nhân lên máy chủ, nó sẽ chưa tự động hiển thị hay tìm kiếm được trong các kênh. Khi thực hiện bước này bằng công cụ `buzz-cli`, cần lưu ý rằng tham số `--pubkey` phải ở định dạng **HEX**, không phải npub (lệnh `buzz-admin add-member` trước đó sẽ in ra khóa HEX tương ứng):

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

<article-card description="Hướng dẫn từng bước để cài đặt và định cấu hình buzz-cli nhằm quản lý các kênh Nostr, khóa thành viên và quyền của tác nhân AI." image="https://inimages.techvoyage.dev/articles/Self-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues/VI-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp" image-alt="Một thẻ công nghệ 16:9 cao cấp với các điểm nhấn màu xanh đậm và màu cam minh họa cách tự lưu trữ (self-host) cổng relay Buzz của Block trên Ubuntu VPS, có bảng glassmorphic sạch sẽ với kiểu chữ chính giữa." label="Hướng dẫn CLI" min-read="5" title="Cách cài đặt và sử dụng buzz-cli" to="/article/self-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#install-buzz-cli">



</article-card>

Cập nhật hồ sơ của trợ lý DSH trên Nostr relay thành một tên hiển thị trực quan và thân thiện hơn bằng `buzz-cli`:

![Cập nhật tên hiển thị của trợ lý DeepSeek Harness trên Nostr relay bằng buzz-cli](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-assistant-buzz-cli-profile-update.webp)

Gửi một lời chào **Wave** (hành động vẫy tay chào qua DM của Buzz) tới trợ lý DSH. Phản hồi gửi ngược lại báo hiệu hệ thống đã vận hành trơn tru:

![Kiểm tra kết nối bằng cách gửi tin nhắn Wave dạng DM tới trợ lý DeepSeek Harness trong Buzz](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-buzz-dm-wave-greeting-reply.webp)

*Gửi tin nhắn Wave dạng DM tới trợ lý DSH — cầu nối phản hồi ngay lập tức.*

### Cho phép mở quyền thư mục cục bộ với lệnh `/workspace`

Do thiết lập `allowWorkspace` được đặt mặc định là `false` để bảo vệ an toàn, lệnh `/workspace` ban đầu sẽ bị từ chối:

![Thông báo lỗi lệnh workspace bị từ chối khi tùy chọn allowWorkspace đang bị tắt](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-buzz-workspace-command-rejected-error.webp)

Bật tính năng này trong tệp `~/.dsh/profiles/web/cordis.patch.yml`, sau đó khởi động lại `dsh web`:

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

Sau khi khởi động lại:

![Thông báo xác nhận thành công sau khi thực thi lệnh đăng ký workspace trong Buzz](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-buzz-workspace-command-success-confirmation.webp)

Điểm cần nhớ: cấu hình mặc định này giả định thư mục không gian làm việc (`TechVoyage` trong hình minh họa) nằm trong thư mục gốc của người dùng hiện tại. Nếu nằm ở vị trí khác, hãy điền đầy đủ đường dẫn tuyệt đối. Bất kỳ phiên làm việc mới nào được tạo dưới workspace này qua Buzz cũng sẽ đồng bộ hiển thị trên giao diện Web của DeepSeek Harness.

![Giao diện Web DeepSeek Harness hiển thị phiên làm việc được đồng bộ hóa từ Buzz](https://inimages.techvoyage.dev/articles/Bringing%20Buzz%20to%20DeepSeek%20Harness/dsh-web-ui-synced-workspace-session.webp)

### Danh sách các lệnh khả dụng trên Buzz

Tất cả các lệnh mà các nền tảng khác hỗ trợ đều hoạt động mượt mà trên Buzz:

<table>
<thead>
  <tr>
    <th>
      Lệnh
    </th>
    
    <th>
      Chức năng
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        /workspace <folder>
      </code>
    </td>
    
    <td>
      Đăng ký một thư mục sẵn có làm workspace cho cuộc hội thoại (yêu cầu bật quyền trong cấu hình)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        /help
      </code>
    </td>
    
    <td>
      Liệt kê tất cả các lệnh khả dụng
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        /time
      </code>
    </td>
    
    <td>
      Hiển thị thời gian hiện tại của hệ thống
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        /new
      </code>
    </td>
    
    <td>
      Khởi tạo một phiên trò chuyện hoàn toàn mới
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        /clear
      </code>
    </td>
    
    <td>
      Xóa trắng lịch sử trò chuyện hiện tại
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        /status
      </code>
    </td>
    
    <td>
      Kiểm tra trạng thái hoạt động của cầu nối
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        /stats
      </code>
    </td>
    
    <td>
      Xem số lượng đoạn chat và dòng trạng thái chi tiết của từng bridge (trên tất cả nền tảng, bao gồm cả Buzz)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        /commands
      </code>
    </td>
    
    <td>
      Xem bảng mô tả chi tiết của từng lệnh
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @path/to/file
      </code>
    </td>
    
    <td>
      Hoạt động hệt như tính năng mention tệp trên Web: mô hình đọc nội dung tệp tương đối theo workspace; gõ <code>
        @
      </code>
      
      , <code>
        @tiền_tố
      </code>
      
       hoặc <code>
        /files <tiền_tố>
      </code>
      
       để hiển thị danh sách tệp/thư mục phù hợp
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        /model
      </code>
    </td>
    
    <td>
      <code>
        [provider model effort]
      </code>
      
       — xác thực với danh mục LLM đang kích hoạt để đổi mô hình và mức suy luận; gõ <code>
        /model
      </code>
      
       để xem tùy chọn, <code>
        /model reset
      </code>
      
       để khôi phục mặc định
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        /effort
      </code>
    </td>
    
    <td>
      <code>
        <id>
      </code>
      
       chỉ điều chỉnh mức độ suy luận (reasoning effort); <code>
        /effort reset
      </code>
      
       khôi phục lại giá trị mặc định
    </td>
  </tr>
</tbody>
</table>

### Tóm lược về bảo mật

- Khóa riêng **nsec** chỉ nằm duy nhất trong `~/.dsh/gateway.json` (phân quyền tệp 0600, ghi nguyên tử) — không bao giờ bị lộ ra ngoài qua endpoint `/gateway/list` hay tệp nhật ký log.
- Mọi sự kiện gửi đến đều được **xác thực chữ ký mật mã** (`verifyEvent`), loại bỏ tin trùng lặp, lọc thông điệp tự phát và kiểm tra đề cập @mention trước khi chuyển tiếp tới tác nhân.
- **Việc đăng ký workspace được kiểm soát chặt bằng cấu hình** (`allowWorkspace: false` theo mặc định) nhằm ngăn ngừa tình trạng các phiên gateway tự động phê duyệt quyền mở tệp ngoài ý muốn.

## Lời kết: Cộng tác AI phi tập trung cùng Buzz

Khía cạnh phức tạp nhất khi tích hợp Buzz vào `dsh-message-gateway` nằm ở việc đáp ứng chuẩn xác quy chuẩn giao thức Nostr. Nhờ nền tảng plugin sẵn có đã trừu tượng hóa rất tốt việc quản lý phiên và điều hướng lệnh, quá trình xây dựng cầu nối diễn ra vô cùng thuận lợi và ổn định ngay khi cơ chế xử lý sự kiện và truyền phát luồng chỉnh sửa tại chỗ được thiết lập.

## Tài liệu tham khảo:

- [dsh-message-gateway architecture guide](https://github.com/a792883583/dsh-message-gateway/blob/main/docs/architecture.md) — tài liệu kiến trúc, hướng dẫn viết extension và lưu ý bảo mật
- [nostr-tools](https://github.com/nbd-wtf/nostr-tools) — thư viện Nostr cốt lõi được sử dụng bên dưới
- [deer-flow IM channel connections](https://github.com/bytedance/deer-flow/blob/main/backend/docs/IM_CHANNEL_CONNECTIONS.md) — mô hình tham khảo cho kết nối kênh nhắn tin tức thời
