# Chính sách quyền riêng tư — PromptMill

**Có hiệu lực từ:** 09/09/2026
**Áp dụng cho:** extension Chrome PromptMill, mọi phiên bản.

[English](PRIVACY.md) · **Tiếng Việt**

---

## Tóm tắt

**PromptMill không thu thập dữ liệu nào.** Không có server, không có tài khoản, không analytics,
không cấu hình từ xa. Không một thứ gì bạn gõ, nạp hay tạo ra bị gửi về cho tác giả hoặc bất kỳ bên
thứ ba nào. Mọi thứ extension lưu đều nằm trong hồ sơ trình duyệt trên chính máy bạn.

Đây là điều **kiểm chứng được**, không phải lời hứa: extension là mã nguồn mở, và toàn bộ code
**không có một lời gọi mạng nào tới bất kỳ server nào**. Xem [Tự kiểm chứng](#tự-kiểm-chứng).

---

## Dữ liệu chúng tôi thu thập

**Không có.** Theo đúng các hạng mục mà Chrome Web Store dùng trong phần khai báo Privacy Practices:

| Hạng mục | Có thu thập? |
|---|---|
| Thông tin nhận dạng cá nhân | **Không** |
| Thông tin sức khoẻ | **Không** |
| Thông tin tài chính và thanh toán | **Không** |
| Thông tin xác thực | **Không** |
| Liên lạc cá nhân | **Không** |
| Vị trí | **Không** |
| Lịch sử duyệt web | **Không** |
| Hoạt động người dùng | **Không** |
| Nội dung trang web | **Không** |

"Thu thập" ở đây hiểu đúng theo nghĩa Google định nghĩa: **truyền ra khỏi thiết bị của bạn**.
PromptMill không truyền bất cứ thứ gì ra khỏi máy bạn.

---

## Dữ liệu lưu trên máy bạn

Extension lưu những mục sau vào `chrome.storage.local` — nằm trong hồ sơ trình duyệt trên máy bạn,
không bao giờ được tải lên đâu cả.

| Mục lưu | Là gì | Để làm gì |
|---|---|---|
| `prompts` | Nội dung trong ô prompt | Đóng side panel mở lại vẫn còn danh sách |
| `queueItems` | Từng prompt kèm trạng thái (chờ / xong / lỗi / quá giờ) | Prompt đã xong thì lần chạy sau không sinh lại |
| `folder` | Tên thư mục con bạn chọn để lưu ảnh | Nhớ cài đặt |
| `serial` | Có đánh số file hay không | Nhớ cài đặt |
| `timeoutMin` | Thời gian chờ tối đa mỗi ảnh | Nhớ cài đặt |

Danh sách đầy đủ chỉ có vậy.

### Cách xoá

- **Trong extension:** nút **Xoá tất cả** dọn sạch danh sách prompt và hàng đợi.
- **Xoá hẳn:** gỡ extension ở `chrome://extensions`. Chrome xoá luôn phần lưu trữ cục bộ của nó.

Vì không có gì được gửi đi, nên cũng không có bản sao nào ở đâu để chúng tôi phải xoá, và không có
tài khoản nào để bạn phải đóng.

---

## Extension chạm vào những gì khi chạy

Đọc cục bộ không đồng nghĩa với thu thập. Để đầy đủ, đây là mọi thứ PromptMill chạm tới:

**Trên trang Google Flow** (`labs.google`, `flow.google.com` — và không nơi nào khác), content script:

- Tìm ô nhập prompt, và đọc ngược nội dung ô để xác minh chữ vừa gõ có thật sự vào không.
- Đọc các thẻ `<img>` trên trang để biết khi nào ảnh mới sinh xong.
- Đọc thông báo lỗi trên trang (`role="alert"`) để hàng đợi dừng kèm lý do thật, thay vì ngồi chờ
  hết giờ.

Tất cả diễn ra ngay trong trang, trong bộ nhớ, và chỉ dùng để điều khiển lần chạy hiện tại.

**File bạn nạp vào.** File văn bản bạn kéo thả hoặc mở bằng nút chọn file được đọc ngay trong trình
duyệt và nội dung đưa vào ô prompt. Bản thân file không bị sao chép hay tải lên đâu cả.

**Ảnh bạn tạo ra.** Ảnh được lưu vào thư mục Downloads bằng API downloads của Chrome. Việc tải ảnh
là lấy từ chính server Google mà trình duyệt bạn vừa hiển thị ảnh đó — không có server nào khác tham
gia, và ảnh không đi qua tay tác giả.

---

## Các quyền, và vì sao cần từng quyền

| Quyền | Vì sao cần |
|---|---|
| `debugger` | Ô prompt của Google Flow là editor [Slate.js](https://docs.slatejs.org/), vốn bỏ qua mọi sự kiện bàn phím tổng hợp. Muốn gõ vào đó phải có sự kiện nhập liệu thật ở tầng trình duyệt — chỉ Chrome DevTools Protocol tạo được. |
| `downloads` | Lưu ảnh đã sinh vào thư mục Downloads. |
| `storage` | Nhớ danh sách prompt và cài đặt ngay trên máy (xem bảng trên). |
| `tabs` | Tìm tab Google Flow đang mở của bạn. |
| `scripting` | Tiêm lại content script vào tab Flow đã mở sẵn từ trước khi nạp extension. |
| `sidePanel` | Hiện giao diện extension ở side panel của Chrome. |
| Quyền truy cập `labs.google` và `flow.google.com` | Đúng hai trang duy nhất extension được phép chạy. |

### Về quyền `debugger`

Đây là quyền mạnh, nên xin nói rõ nó được dùng vào việc gì. Trong toàn bộ code, PromptMill chỉ phát
ra **bốn** lệnh DevTools Protocol:

| Lệnh | Mục đích |
|---|---|
| `Input.dispatchMouseEvent` | Click vào ô prompt để đặt con trỏ |
| `Input.dispatchKeyEvent` | Chọn hết, và nhấn Enter để gửi |
| `Input.insertText` | Gõ prompt của bạn |
| `Runtime.evaluate` | Gọi với đúng biểu thức `1`, không gì khác — một phép thử vô hại để biết phiên debugger còn thuộc về extension này không, sau khi Chrome khởi động lại service worker |

Nó **không** dùng để chạy mã tuỳ ý, đọc bộ nhớ trang, chặn lưu lượng mạng, hay đụng tới bất kỳ tab
nào ngoài tab Flow bạn đang làm việc. Chrome hiện thanh vàng "PromptMill đang gỡ lỗi trình duyệt
này" suốt thời gian phiên còn gắn, nên bạn luôn biết lúc nào nó đang hoạt động.

---

## Bên thứ ba

Không có bên nào. Không nhà cung cấp analytics, không dịch vụ báo lỗi, không mạng quảng cáo, không
CDN, không telemetry dưới bất kỳ hình thức nào. Extension không nạp mã từ xa và không tải cấu hình
từ xa.

## Bán hoặc chuyển giao dữ liệu

Không xảy ra, vì không có dữ liệu nào được thu thập. PromptMill không bán, cho thuê, chia sẻ hay
chuyển giao dữ liệu người dùng cho bất kỳ ai, và không dùng dữ liệu nào cho quảng cáo, lập hồ sơ cá
nhân, hay đánh giá tín dụng.

## Tuân thủ Limited Use

Việc sử dụng thông tin của PromptMill tuân thủ
[Chính sách dữ liệu người dùng của Chrome Web Store](https://developer.chrome.com/docs/webstore/program-policies/user-data-faq),
bao gồm cả các yêu cầu Limited Use.

## Trẻ em

PromptMill là công cụ dành cho người phát triển và người sáng tạo nội dung. Nó không hướng tới trẻ
em và không thu thập dữ liệu của bất kỳ ai, kể cả trẻ em.

---

## Tự kiểm chứng

Bạn không cần phải tin lời nào ở trên. Toàn bộ mã nguồn nằm trong repo này, không có bước build,
không nén — đọc gì là chạy nấy.

Muốn tự kiểm điều quan trọng nhất, tìm các lời gọi mạng trong code:

```bash
grep -rnE 'fetch\(|XMLHttpRequest|WebSocket|sendBeacon' *.js
```

Bạn sẽ thấy đúng **một** kết quả, trong `content.js`. Nó đọc một URL `blob:` — tức một tham chiếu bộ
nhớ vốn đã có sẵn trong trang Flow — để lưu ảnh đang nằm trong RAM ra đĩa. URL `blob:` **không thể
ra tới mạng**, nó phân giải hoàn toàn trong trình duyệt bạn.

---

## Thay đổi chính sách

Nếu chính sách này thay đổi, ngày hiệu lực ở đầu file sẽ đổi theo, và bản sửa sẽ nằm trong lịch sử
commit công khai của repo — thứ không thể sửa lén.

## Liên hệ

Có thắc mắc, hoặc lo ngại về quyền riêng tư: mở issue tại
**https://github.com/thuongvb/PromptMill/issues**

Email: **thuongvanbui39@gmail.com**

---

## Giấy phép

PromptMill phát hành theo [Giấy phép MIT](LICENSE).
