Tài liệu FuJue Harness

Dành cho người vừa cài app lần đầu và người đang nối CI vào model. Mọi lệnh dưới đây chạy trên bản 0.9.2.

Bắt đầu nhanh

Tải app ở trang Tải về, mở lên và đăng nhập. Nếu bạn dùng khoá DeepSeek có sẵn, bỏ qua bước đăng nhập và dán khoá vào Cài đặt → Nhà cung cấp.

# 1. Cài đặt
npm i -g @fujue/harness

# 2. Đăng nhập bằng trình duyệt (mã 8 ký tự)
fujue login

# 3. Chạy tác vụ đầu tiên trong thư mục dự án
cd ~/du-an && fujue "tóm tắt cấu trúc repo này"

Dòng lệnh

fujueMở phiên tương tác trong thư mục hiện tại
fujue "<tác vụ>"Chạy một tác vụ rồi thoát
fujue login / logoutNối hoặc ngắt tài khoản trên máy này
fujue modelsLiệt kê model và giá hiện hành
fujue session listXem các phiên đã lưu trên máy
fujue session resume <id>Mở lại một phiên cũ
fujue jobsXem các tác vụ đang chạy nền

Tham chiếu API

Cổng API tương thích OpenAI. Base URL https://api.fujue.dev/v1, xác thực bằng Authorization: Bearer fj_live_….

POST /v1/chat/completions
{
  "model": "deepseek-v4",
  "messages": [{ "role": "user", "content": "…" }],
  "stream": true,
  "tools": []
}

Model khả dụng lấy từ GET /v1/models. Mã lỗi theo chuẩn HTTP; phần thân lỗi có dạng { "error": "…", "field": "…" }.

# Liệt kê model bằng khoá của bạn
curl https://api.fujue.dev/v1/models \
  -H "Authorization: Bearer $FUJUE_KEY"

Cấu hình model mặc định cho harness nằm ở cùng một nơi: app gọi GET /v1/harness/config sau khi đăng nhập để nhận base URL, model mặc định và danh mục kèm nguồn của từng model — không phải chép tay danh sách model.

curl https://api.fujue.dev/v1/harness/config \
  -H "Authorization: Bearer $FUJUE_KEY"

{
  "api": { "base_url": "https://api.fujue.dev/v1" },
  "default_model": "deepseek-v4",
  "models": [
    {
      "id": "deepseek-v4",
      "context_window": 262144,
      "default": true,
      "source": {
        "provider": "FuJue",
        "base_url": "https://api.fujue.dev/v1",
        "upstream_id": "deepseek-v4"
      }
    }
  ]
}

Kết nối thiết bị

App không lưu mật khẩu. Nó xin một mã thiết bị, bạn duyệt mã đó khi đã đăng nhập trên web, rồi app nhận một khoá API riêng cho máy đó.

POST /api/v1/device/start    → { device_code, user_code, expires_in }
POST /api/v1/device/approve  → duyệt mã (cần phiên web)
POST /api/v1/device/token    → { api_key, user } khi mã đã duyệt

Mã hết hạn sau 10 phút. Mỗi lần cấp khoá sẽ ghi một dòng vào nhật ký thao tác và khoá xuất hiện trong bảng điều khiển với tên thiết bị.

Viết plugin

Plugin là một gói Cordis: khai báo service, đăng ký công cụ, thêm lệnh. Harness nạp plugin từ ~/.fujue/plugins hoặc từ cấu hình dự án.

export const name = "plugin-ví-dụ";

export function apply(ctx) {
  ctx.tool({
    name: "deploy_staging",
    description: "Đẩy bản dựng hiện tại lên staging",
    async run() {
      return ctx.shell.run("pnpm deploy:staging");
    },
  });
}

Liên hệ

Câu hỏi về gói Đội nhóm, hoá đơn hoặc triển khai trong mạng nội bộ: gửi tới team@fujue.dev. Đội ngũ trả lời trong ngày làm việc.