Trên trang này

Phát triển & Triển khai Plugin

Seer cung cấp kiến trúc plugin dạng mô-đun cho phép các nhà phát triển mở rộng khả năng của ứng dụng trên nhiều bề mặt. Chọn một tính năng plugin bên dưới để khám phá các đặc tả phát triển:

Plugin Trình xem (Viewers)

Plugin trình xem mở rộng cửa sổ xem trước bằng phím cách. Hỗ trợ hai kiến trúc triển khai: Plugin Chuyển đổi (Convert Plugins) và Plugin DLL (SDK v3).

Xây dựng Plugin Trình xem với Agent AI

Thay thế phần giữ chỗ bên dưới, sau đó cung cấp toàn bộ hướng dẫn cho agent lập trình của bạn:

Đọc và làm theo hướng dẫn phát triển plugin Seer tại https://raw.githubusercontent.com/ccseer/Seer-Plugins/refs/heads/master/plugin_development_guide.md. Coi đây là nguồn sự thật duy nhất cho kiến trúc, plugin.json, triển khai, xác minh và đóng gói. Nếu hướng dẫn không khả dụng, hãy dừng lại và báo cáo trước khi tiếp tục.

Trước khi thực hiện bất kỳ công việc nào, hãy kiểm tra Requirement (Yêu cầu) bên dưới. Nếu nó thiếu, là văn bản giữ chỗ chưa thay đổi hoặc quá mơ hồ để triển khai, hãy đặt một câu hỏi làm rõ và chờ đợi. Không suy đoán yêu cầu bị thiếu.

Sau khi rõ ràng, hãy chọn Convert hoặc DLL và giải thích ngắn gọn cho lựa chọn đó, sau đó triển khai một plugin hoàn chỉnh, có thể cài đặt trong không gian làm việc hiện tại. Không sửa đổi bản thân Seer hoặc dừng lại ở kế hoạch hay đoạn mã.

Làm theo từng bước xác minh áp dụng trong hướng dẫn và báo cáo kết quả thực tế. Chạy thử nghiệm xem trước trong ứng dụng Seer khi có thể; nếu không, hãy tuyên bố rõ ràng rằng xác minh runtime không được thực hiện.

Requirement: [THAY THẾ VĂN BẢN GIỮ CHỖ NÀY bằng yêu cầu plugin trình xem của bạn, ví dụ: kết xuất sơ đồ mermaid trong xem trước markdown]

Plugin Chuyển đổi (Convert)

Seer coi các plugin chuyển đổi là các chương trình thực thi dòng lệnh bên ngoài. Khi người dùng nhấn phím Cách trên một tệp được hỗ trợ, Seer sẽ khởi chạy chương trình đã cấu hình, truyền đường dẫn tệp thông qua các biến giữ chỗ. Chương trình sẽ chuyển đổi tệp thành định dạng được Seer hỗ trợ nguyên bản (HTML, JSON, TXT, hình ảnh, v.v.), sau đó Seer sẽ tải và kết xuất sau khi tiến trình kết thúc.

Biến Giữ chỗ

Trình giữ chỗ Mô tả Ví dụ
${output_file} Đường dẫn tệp đầu ra cơ sở; nối thêm phần mở rộng mục tiêu trong các đối số. ${output_file}.html
${no_cache} Vô hiệu hóa lưu bộ nhớ đệm chuyển đổi và lưu trữ đầu ra trong thư mục tự động xóa, thư mục này sẽ bị xóa sạch khi đóng các cửa sổ xem trước. ${no_cache}

Plugin chuyển đổi cũng chấp nhận các biến giữ chỗ chung (${input_file}, ${use_backslash}, ${seer_dir}, ${seer_exe}, ${seerviewer_exe}, ${7z}) và không sử dụng các mã khớp ${type_*}, vì chúng khai báo định dạng khớp trong formats thay vì extensions. Cả hai đều được đề cập trong phần chung Trình giữ chỗ & Mã khớp bên dưới.

Các Tệp Thực thi & Môi trường Chạy Script Được Hỗ trợ

  • Tập lệnh: Tập lệnh PowerShell (.ps1, được hỗ trợ sẵn thông qua PowerShell). Đối với Python (.py), Node.js (.js) hoặc tệp batch (.bat), hãy biên dịch thành tệp .exe độc lập (ví dụ: với PyInstaller) hoặc đóng gói trình thông dịch bên trong gói.
  • Tệp nhị phân tùy chỉnh: Các tệp thực thi CLI độc lập được biên dịch từ C/C++, Rust, Go hoặc C#.

Ví dụ plugin.json (Convert)

{
  "name": "ipynb",
  "version": "1.2.0",
  "type": "convert",
  "roles": [
    "viewer"
  ],
  "entry": "ipynb.ps1",
  "args": [
    "-i",
    "${input_file}",
    "-o",
    "${output_file}.html"
  ],
  "formats": [
    "ipynb"
  ],
  "appMinVersion": "4.1.3",
  "author": "ccseer"
}

Plugin DLL (SDK v3)

Để đạt hiệu suất kết xuất tối đa, tính tương tác sâu hoặc chế độ xem phát trực tuyến (streaming views), Seer hỗ trợ các thư viện liên kết động C++/Qt gốc được tải trực tiếp vào khung nhìn thông qua QPluginLoader.

  • Thông số kỹ thuật: C++17, Qt 6.8, MSVC 2022 (x64), CMake 3.22+.
  • Giao diện thiết yếu: Kế thừa ViewerBase (triển khai widget) và triển khai ViewerPluginInterface (IID "seer.plugin.interface.preview/3").
  • Phiên bản ứng dụng tối thiểu: Các plugin SDK v3 phải khai báo "appMinVersion": "4.2.9".

Dự án Tham khảo

Dự án Mục đích
F3DViewer Kết xuất mô hình 3D và chế độ xem toàn cảnh
OfficeViewer Tài liệu văn phòng và bản vẽ CAD
FontViewer Kiểm tra và kết xuất ký tự phông chữ
JsonTreeViewer Cây cấu trúc JSON tương tác hiệu năng cao
Collections Tất cả các plugin trình xem chính thức và cộng đồng

Plugin Điều khiển

Plugin điều khiển thêm các nút hành động tùy chỉnh vào phía bên trái của Thanh điều khiển phía dưới trong cửa sổ xem trước, hỗ trợ các thao tác nhanh và tích hợp công cụ bên ngoài cho tệp hoặc thư mục đang hoạt động.

Xây dựng Plugin Điều khiển với Agent AI

Thay thế phần giữ chỗ bên dưới, sau đó cung cấp toàn bộ hướng dẫn cho agent lập trình của bạn:

Đọc và làm theo hướng dẫn phát triển plugin điều khiển Seer tại https://raw.githubusercontent.com/ccseer/Seer-Controls/refs/heads/main/plugin_development_guide.md. Coi đây là nguồn sự thật duy nhất cho kiến trúc, plugin.json, triển khai, xác minh và đóng gói. Nếu hướng dẫn không khả dụng, hãy dừng lại và báo cáo trước khi tiếp tục.

Trước khi thực hiện bất kỳ công việc nào, hãy kiểm tra Requirement (Yêu cầu) bên dưới. Nếu nó thiếu, là văn bản giữ chỗ chưa thay đổi hoặc quá mơ hồ để triển khai, hãy đặt một câu hỏi làm rõ và chờ đợi. Không suy đoán yêu cầu bị thiếu.

Sau khi rõ ràng, hãy triển khai một plugin điều khiển hoàn chỉnh, có thể cài đặt tuân thủ theo hợp đồng tiến trình Canonical v1 trong không gian làm việc hiện tại. Không sửa đổi bản thân Seer hoặc dừng lại ở kế hoạch hay đoạn mã.

Làm theo từng bước xác minh áp dụng trong hướng dẫn và báo cáo kết quả thực tế.

Requirement: [THAY THẾ VĂN BẢN GIỮ CHỖ NÀY bằng yêu cầu plugin điều khiển của bạn, ví dụ: mở VS Code trong thư mục hiện tại hoặc sao chép đường dẫn tuyệt đối vào clipboard]

Kiến trúc & Hợp đồng

  • Mô hình Tiến trình: Triển khai hợp đồng tiến trình Canonical v1 (backend: "process", capabilities: ["control"]). Seer thực thi chương trình trợ giúp qua CLI.
  • Trạng thái Trả về & Báo cáo Lỗi:
    • Thành công: Tiến trình thoát với mã 0 (hoặc khớp với success_exit_codes). Nếu được cấu hình "close_after_success": true, Seer sẽ tự động đóng cửa sổ xem trước sau khi thực thi thành công.
    • Thất bại: Tiến trình thoát với mã khác không. Bất kỳ nội dung nào được ghi vào luồng lỗi chuẩn (stderr) sẽ được Seer ghi nhận và hiển thị dưới dạng thông báo lỗi Toast trong ứng dụng.
  • Giao diện người dùng & Tương tác: Plugin điều khiển không tự vẽ cửa sổ chính thường trú. Các trình trợ giúp thông thường thực hiện tác vụ ngầm, sao chép văn bản vào clipboard, hoặc gọi hộp thoại hệ thống Windows gốc (ví dụ: Mở bằng, Thuộc tính, Chia sẻ).

Trình giữ chỗ Dòng lệnh

Trình trợ giúp điều khiển chỉ nhận đường dẫn đối tượng — ${input_file} cộng với các biến giữ chỗ chung (${use_backslash}, ${seer_dir}, ${seer_exe}, ${seerviewer_exe}, ${7z}) được liệt kê trong phần chung Trình giữ chỗ & Mã khớp bên dưới.

${output_dir}, ${output_file}, và ${no_cache} bị từ chối trong tệp kê khai điều khiển. Nếu điều khiển cần một vị trí tạm thời, nó phải tự giải quyết: ưu tiên thư mục chứa tệp thực thi của chính nó trước, sau đó là thư mục tạm thời của hệ thống.

Ví dụ plugin.json (Control)

Ví dụ 1: Hành động Thư mục (Terminal Here)

Cấu hình plugin Terminal Here chính thức:

{
  "schema_version": 1,
  "id": "io.1218.seer.terminal-here",
  "name": "Terminal Here",
  "description": "Opens a terminal window in the current folder.",
  "version": "1.0.0",
  "appMinVersion": "4.5.10",
  "backend": "process",
  "capabilities": [
    "control"
  ],
  "extensions": [
    "${type_folder}"
  ],
  "command": "terminal_here.exe",
  "arguments": [
    "--input",
    "${input_file}"
  ],
  "close_after_success": false,
  "timeout_ms": 150000,
  "success_exit_codes": [
    0
  ]
}

Ví dụ 2: Hành động Tệp (Explorer Open With)

Cấu hình plugin Explorer Open With chính thức:

{
  "schema_version": 1,
  "id": "io.1218.seer.explorer-open-with",
  "name": "Open With",
  "description": "Opens the Windows Open With dialog for the current file.",
  "version": "1.1.0",
  "appMinVersion": "4.5.10",
  "backend": "process",
  "capabilities": [
    "control"
  ],
  "extensions": [
    "${type_file}"
  ],
  "command": "shellopenwith.exe",
  "arguments": [
    "--input",
    "${input_file}",
    "${use_backslash}"
  ],
  "timeout_ms": 30000,
  "success_exit_codes": [
    0
  ]
}

Để tự động đóng cửa sổ xem trước khi thành công, hãy đặt "close_after_success": true trong tệp kê khai.

Để xem mã nguồn plugin điều khiển chính thức, hãy xem: ccseer/Seer-Controls.

Plugin Thuộc tính

Plugin thuộc tính mở rộng công cụ kiểm tra siêu dữ liệu của Seer. Khi người dùng nhấn Ctrl + I trên tệp hoặc thư mục đang xem trước (hoặc mở cửa sổ Thuộc tính), các plugin thuộc tính phù hợp sẽ trích xuất và hiển thị siêu dữ liệu có cấu trúc cùng các biểu đồ/phạm vi trực quan.

Xây dựng Plugin Thuộc tính với Agent AI

Thay thế phần giữ chỗ bên dưới, sau đó cung cấp toàn bộ hướng dẫn cho agent lập trình của bạn:

Đọc và làm theo hướng dẫn phát triển plugin thuộc tính Seer tại https://raw.githubusercontent.com/ccseer/Seer-Properties/refs/heads/main/plugin_development_guide.md. Coi đây là nguồn sự thật duy nhất cho kiến trúc, plugin.json, triển khai, xác minh và đóng gói. Nếu hướng dẫn không khả dụng, hãy dừng lại và báo cáo trước khi tiếp tục.

Trước khi thực hiện bất kỳ công việc nào, hãy kiểm tra Requirement (Yêu cầu) bên dưới. Nếu nó thiếu, là văn bản giữ chỗ chưa thay đổi hoặc quá mơ hồ để triển khai, hãy đặt một câu hỏi làm rõ và chờ đợi. Không suy đoán yêu cầu bị thiếu.

Sau khi rõ ràng, hãy triển khai một plugin thuộc tính hoàn chỉnh, có thể cài đặt tuân thủ theo hợp đồng tiến trình Canonical v1 và đặc tả JSON Schema 1 trong không gian làm việc hiện tại. Không sửa đổi bản thân Seer hoặc dừng lại ở kế hoạch hay đoạn mã.

Làm theo từng bước xác minh áp dụng trong hướng dẫn và báo cáo kết quả thực tế.

Requirement: [THAY THẾ VĂN BẢN GIỮ CHỖ NÀY bằng yêu cầu plugin thuộc tính của bạn, ví dụ: trích xuất và hiển thị các tham số codec âm thanh/video chi tiết cùng bitrate cho tệp MP4]

Kiến trúc & Hợp đồng

  • Mô hình Tiến trình: Triển khai hợp đồng tiến trình Canonical v1 (backend: "process", capabilities: ["property"], result_schema: 1).
  • Gọi CLI: Máy chủ lưu trữ truyền: --input "${input_file}" --output "${output_file}" --output-dir "${output_dir}"
  • Xuất bản Đầu ra:
    • Máy chủ lưu trữ mở rộng ${output_file} thành đường dẫn cơ sở không có phần mở rộng (ví dụ: <requestDir>/<md5>).
    • Plugin phải ghi kết quả JSON của mình vào <output-base>.json (tức là ${output_file}.json).
    • Các tệp đính kèm trực quan (biểu đồ, biểu đồ tần suất histogram, vectorscope) phải được lưu vào ${output_dir}.
    • Ràng buộc: ${no_cache} bị nghiêm cấm đối với plugin thuộc tính.
  • Chính sách Mã Thoát:
    • Các kết quả miền thông thường (ví dụ: tệp chưa ký, không phải kho lưu trữ git, siêu dữ liệu trống) phải thoát với mã 0 và mô tả trạng thái trong JSON.
    • Chỉ thoát với mã khác không khi xảy ra lỗi nghiêm trọng hoặc lệnh gọi không hợp lệ (thoát khác không khiến máy chủ lưu trữ xóa sạch thư mục yêu cầu đó).

Trình giữ chỗ Dòng lệnh

Trình giữ chỗ Mô tả Ví dụ
${output_file} Đường dẫn cơ sở do máy chủ gán không có phần mở rộng; kết quả phải được ghi vào ${output_file}.json. C:\Users\...\request_dir\md5_hash
${output_dir} Thư mục yêu cầu do máy chủ chỉ định cho các tệp đính kèm (biểu đồ, hình ảnh). C:\Users\...\request_dir

Cùng với các biến giữ chỗ chung và mã khớp ${type_*} được liệt kê trong phần chung Trình giữ chỗ & Mã khớp bên dưới. ${no_cache} bị từ chối đối với các plugin thuộc tính.

Đặc tả Result JSON (Schema 1)

Tệp kết quả ${output_file}.json phải là JSON UTF-8 hợp lệ chứa result_schema: 1 và một đối tượng data:

1. Hàng phẳng (Flat Rows)

Chỉ khi toàn bộ kết quả là một hàng duy nhất (ví dụ: SHA-256):

{
  "result_schema": 1,
  "data": {
    "SHA-256": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
  }
}

2. Nhóm con với mảng có thứ tự của các đối tượng khóa đơn (Mặc định)

Bất kỳ thứ gì tạo ra nhiều hơn một hàng đều phải được xuất bản dưới dạng đúng một nhóm con được đặt tên theo plugin — các hàng rời rạc ở cấp cao nhất sẽ xung đột với các hàng của mọi plugin khác, mà Trình kiểm tra hiển thị trong một danh sách. Thứ tự của mảng là thứ tự hiển thị, vì vậy đây là hình thức duy nhất cho phép plugin quyết định trình tự xuất hiện của các hàng:

{
  "result_schema": 1,
  "data": {
    "Git": {
      "value": [
        { "Repository": "ccseer/Seer-Properties" },
        { "Branch": "main" },
        { "Status": "Clean" }
      ]
    }
  }
}

3. Nhóm con với đối tượng giá trị

value cũng có thể là một đối tượng thuần túy, nhưng các hàng của nó được hiển thị theo thứ tự khóa của đối tượng đã phân tích, mà plugin không thể kiểm soát. Chỉ sử dụng khi thứ tự các hàng không quan trọng:

{
  "result_schema": 1,
  "data": {
    "Git": {
      "value": {
        "Branch": "main",
        "Status": "Working tree clean"
      }
    }
  }
}

4. Biểu đồ & Đồ thị trực quan (Tệp đính kèm hình ảnh)

Lưu biểu đồ PNG đã tạo vào ${output_dir} và khai báo chúng bằng {"type": "image", "value": "relative_filename.png"}:

{
  "result_schema": 1,
  "data": {
    "Image Scopes": {
      "value": [
        { "RGB Histogram": { "type": "image", "value": "histogram.png" } },
        { "Luma Waveform": { "type": "image", "value": "waveform.png" } }
      ]
    }
  }
}

Ví dụ plugin.json (Property)

{
  "schema_version": 1,
  "id": "io.1218.seer.git-info",
  "name": "Git Info",
  "description": "Reports repository information for the current folder using Git.",
  "version": "1.0.0",
  "appMinVersion": "4.5.10",
  "backend": "process",
  "capabilities": [
    "property"
  ],
  "extensions": [
    "${type_folder}"
  ],
  "invocations": {
    "property": {
      "command": "git_info.exe",
      "arguments": [
        "--input",
        "${input_file}",
        "--output",
        "${output_file}",
        "--output-dir",
        "${output_dir}"
      ],
      "result_schema": 1,
      "timeout_ms": 30000,
      "success_exit_codes": [
        0
      ]
    }
  }
}

Để xem mã nguồn plugin thuộc tính chính thức, hãy xem: ccseer/Seer-Properties.


Trình giữ chỗ & Mã khớp

Seer mở rộng các mã này trong arguments. Trình giữ chỗ nào mà một khả năng có thể sử dụng sẽ được máy chủ lưu trữ xác thực khi tải tệp kê khai — sử dụng mã không được hỗ trợ là lỗi tải tệp kê khai chứ không phải cảnh báo runtime.

Khả dụng cho Mọi Khả năng

Trình giữ chỗ Mô tả Ví dụ
${input_file} Đường dẫn tuyệt đối của tệp hoặc thư mục được xem trước. C:\Docs\sample.pdf
${use_backslash} Cờ tùy chọn để định dạng dấu phân cách đường dẫn bằng dấu gạch chéo ngược Windows (\). ${use_backslash}
${seer_dir} Thư mục chứa Seer.exe. C:\Program Files\Seer
${seer_exe} Đường dẫn tuyệt đối đến Seer.exe. C:\Program Files\Seer\Seer.exe
${seerviewer_exe} Đường dẫn tuyệt đối đến SeerViewer.exe. C:\Program Files\Seer\SeerViewer.exe
${7z} Đường dẫn tuyệt đối đến 7z.exe đi kèm với Seer. C:\Program Files\Seer\plugins\7z.exe
${theme} Giao diện hiện tại của Seer, được mở rộng thành dark hoặc light. Đây là một placeholder dữ liệu và không thể dùng làm command duy nhất. dark
${lang} Ngôn ngữ hiện tại của Seer, được mở rộng theo định dạng BCP-47 (ví dụ: en, zh-CN). Đây là một placeholder dữ liệu và không thể dùng làm command duy nhất. en
${screenshot} Đường dẫn tuyệt đối đến ảnh chụp màn hình PNG tạm thời của chế độ xem hiện tại. C:\Users\Username\AppData\Local\Temp\Seer\screenshot\view_1.png

Trình giữ chỗ Riêng cho Từng Khả năng

Trình giữ chỗ Xem trước (Preview) Điều khiển (Control) Thuộc tính (Property)
${output_file} Đường dẫn đầu ra cơ sở; nối thêm phần mở rộng mục tiêu, ví dụ ${output_file}.html Không hỗ trợ Đường dẫn cơ sở không có phần mở rộng; kết quả phải được ghi vào ${output_file}.json
${output_dir} Không hỗ trợ Không hỗ trợ Thư mục yêu cầu cho các tệp đính kèm (biểu đồ, hình ảnh)
${no_cache} Vô hiệu hóa bộ nhớ đệm chuyển đổi và lưu trữ đầu ra trong thư mục tự động xóa Không hỗ trợ Không hỗ trợ

Trình trợ giúp Điều khiển chỉ nhận đường dẫn đối tượng. Nếu cần vị trí tạm thời, nó phải tự giải quyết: ưu tiên thư mục chứa tệp thực thi của chính nó trước, sau đó là thư mục tạm thời của hệ thống.

Mã khớp extensions

Ngoài các phần mở rộng tiêu chuẩn (ví dụ: ["png", "zip"]), extensions chấp nhận các mã khớp với các danh mục mở rộng. Các mã này áp dụng cho các plugin khai báo extensions (Điều khiển và Thuộc tính); các plugin Chuyển đổi khai báo formats thay thế và không sử dụng chúng.

Mã Mô tả
${type_folder} Khớp với các thư mục.
${type_file} Khớp với tất cả các tệp (bao gồm cả các tệp không có phần mở rộng).
${type_all} Khớp với mọi thứ (cả tệp và thư mục).
${type_image} Khớp với các hình ảnh được hỗ trợ bởi trình xem hình ảnh gốc của Seer.
${type_media} Khớp với các định dạng âm thanh và video.
${type_web} Khớp với các tệp web HTML và Markdown.
${type_text} Khớp với các tệp văn bản, mã nguồn và cấu hình.
${type_pdf} Khớp với tài liệu PDF.
${type_none} Khớp với các tệp nằm ngoài các danh mục ở trên (ví dụ: kho lưu trữ nén, tệp thực thi).

Đóng gói và Thử nghiệm trong Ứng dụng

Sau khi phát triển xong, plugin phải được đóng gói vào kho lưu trữ ZIP tiêu chuẩn để cài đặt. Điều này áp dụng cho mọi khả năng của plugin.

Tiêu chuẩn Đóng gói

  1. Tài liệu Gói: Mỗi gói Điều khiển hoặc Thuộc tính độc lập phải bao gồm PACKAGE_README.md (mô tả kèm bảng ## Options & Arguments), được đặt tên là README.md tại thư mục gốc của gói.
  2. Bố cục Gốc Phẳng: Đối với các gói Điều khiển và Thuộc tính (Canonical v1), plugin.json, tệp thực thi/tập lệnh, README.md, và các phụ thuộc runtime phải nằm trực tiếp tại thư mục gốc của tệp lưu trữ. Không bọc chúng bên trong một thư mục bổ sung, và tuyệt đối không trộn lẫn các mục phẳng và lồng nhau — máy chủ sẽ từ chối tệp lưu trữ có thư mục gốc không rõ ràng.

    Các plugin Chuyển đổi kế thừa được cài đặt từ danh mục trực tuyến sử dụng bố cục ngược lại: một thư mục cấp cao nhất <archive-name>/ bao bọc các tệp gói. Hãy làm theo hướng dẫn plugin Chuyển đổi cho trường hợp đó; hai bố cục này không thể thay thế cho nhau.

  3. Mức Nén Tối Đa: Khuyến nghị sử dụng 7-Zip với mức nén Deflate tối đa: powershell 7z a -tzip -mx=9 my-plugin-1.0.0.zip .\*

Thử nghiệm Cục bộ trong Ứng dụng

  1. Mở Cài đặt Seer và chuyển đến phần mục tiêu:
    • Plugin Trình xem: Cài đặt > Plugin -> tab Cục bộ
    • Plugin Điều khiển: Cài đặt > Điều khiển
    • Plugin Thuộc tính: Cài đặt > Thuộc tính
  2. Nhấp vào + bên dưới danh sách và chọn kho lưu trữ .zip (hoặc plugin.json từ thư mục cục bộ của bạn).
  3. Seer sẽ tự động xác thực gói và tải nó. Kiểm tra cấu hình và nhấp vào Đồng ý để kích hoạt.