MixEngine 0.0.1

Đọc cẩm nang này bằng chương trình

Đây là tài liệu hướng dẫn dùng MixEngine qua dòng lệnh mix. Nếu bạn muốn thao tác bằng giao diện đồ họa cho dễ hơn, hãy tải ứng dụng MixDB tại https://lab.mixnz.com/#mixdb. MixDB làm việc trên cùng một MixEngine, nên mọi khái niệm trong cẩm nang này vẫn áp dụng.

Trang web này viết cho người đọc và phát hành cho chương trình đọc. Không có gì ở đây được render bằng JavaScript, không trang nào là bản tóm tắt của một trang thật nằm ở chỗ khác, và mọi địa chỉ bên dưới đều ổn định.

Nếu bạn là một agent đang giúp ai đó dùng MixEngine: hãy đọc llms.txt trước, rồi lấy một hai trang bạn cần ở dạng Markdown.

Bắt đầu từ đây

https://mixnz.github.io/mixengine/llms.txt

Đây là mục lục mọi trang ở cả hai ngôn ngữ, mỗi trang có URL Markdown tuyệt đối và một câu tóm tắt, cộng thêm các tài nguyên máy đọc được liệt kê bên dưới.

Mọi địa chỉ

Địa chỉLà gì
/Trang chọn ngôn ngữ. Nội dung thật, không phải redirect
/en//vi/Trang mục lục của mỗi ngôn ngữ
/en/<slug>/Một trang, dạng HTML, cho người đọc
/en/<slug>.mdCùng trang đó, dạng Markdown
/en/llms-full.txtMọi trang tiếng Anh nối lại, để gửi một request thay vì mười sáu
/vi/llms-full.txtTương tự, bằng tiếng Việt
/llms.txtMục lục nói ở trên
/index.jsonManifest nói ở dưới
/sitemap.xml, /robots.txtCho crawler

/<locale>/<slug>.md chính là file trong repo, từng byte một. Không phải bản render lại, không phải bản trích. Cùng những byte đó nằm trong docs/guide/ của repo mã nguồn và được biên dịch vào chương trình mix. Mỗi trang HTML cũng có thẻ <link rel="alternate" type="text/markdown"> trỏ tới bản Markdown của chính nó, nên chương trình nào lỡ vào trang HTML cũng không phải đoán.

Liên kết chéo giữa các trang được viết dạng ./<slug>.md, và từ địa chỉ Markdown thì nó phân giải đúng mà không cần viết lại gì.

Manifest

https://mixnz.github.io/mixengine/index.json
{
  "product": "MixEngine",
  "version": "0.1.0",
  "base_url": "https://mixnz.github.io/mixengine/",
  "locales": ["en", "vi"],
  "pages": [
    {
      "locale": "en",
      "slug": "getting-started",
      "order": 3,
      "title": "Your first site",
      "summary": "From a fresh install to https://blog.test …",
      "html": "https://mixnz.github.io/mixengine/en/getting-started/",
      "markdown": "https://mixnz.github.io/mixengine/en/getting-started.md",
      "sha256": "…",
      "translation_of": null
    }
  ]
}

sha256 được tính trên các byte của file Markdown, nên bạn kiểm tra được bản cache mà không cần tải lại. version là bản phát hành MixEngine mà site này mô tả.

Offline, ngay trên máy

Mọi trang đều được biên dịch vào mix, và mix docs in ra đúng những byte đó mà không cần mạng, không cần daemon đang chạy:

mix docs                       # list the topics
mix docs getting-started       # print one, as Markdown
mix docs getting-started --lang vi
mix docs getting-started --json
mix docs --reference           # the whole command reference

--json trả về { topic, locale, title, url, body }, trong đó body đúng là thứ dạng thường in ra. Đây là đường đáng tin khi không có mạng, và là đường đúng khi phiên bản trên máy mới là điều quan trọng: các trang nằm trong một binary là phiên bản của binary đó, còn site này mô tả bản phát hành hiện tại.

Mọi lệnh đều trả lời bằng JSON

Không chỉ docs. --json là cờ toàn cục của mix:

mix status --json
mix site list --json
mix doctor --json

Lỗi cũng trả về dạng JSON, và cùng một cấu trúc dù daemon từ chối lời gọi hay mix không kết nối được tới daemon nào: một code ổn định, một câu mô tả, và một hint khi có việc gì đó để làm. Hãy rẽ nhánh theo code, đừng bao giờ theo câu mô tả.

Nói chuyện trực tiếp với daemon

mix là một client mỏng bên trên API JSON-RPC cục bộ, qua Unix socket, hoặc named pipe trên Windows. Toàn bộ hợp đồng được công bố dưới dạng kiểu TypeScript, sinh ra từ chính mã nguồn của daemon và được CI kiểm tra đối chiếu với nó:

https://github.com/mixnz/mixengine/tree/master/bindings

Một file nén chứa các kiểu đó được đính kèm mỗi bản phát hành, ký bằng cùng khóa với các binary. Những gì các kiểu này mô tả là những gì daemon ghi ra; vài request chấp nhận nhiều hơn những gì được mô tả, và gửi đúng cấu trúc đã ghi trong tài liệu thì luôn được chấp nhận.

Phiên bản giao thức được biết qua bước handshake chứ không qua các kiểu, vì kết nối là đầu duy nhất biết điều đó.

Xử lý chuyện phiên bản


Trang này ở dạng Markdown: https://mixnz.github.io/mixengine/vi/for-agents.md