DeepSeek Harness Remote
DeepSeek Harness Remote: DeepSeek Harness 실행 PC와 모바일·PC를 안전하게 연결해 어디서나 작업 이어받기
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Web cho cả nhóm, hai việc chính:
Chạy trên Vercel (miễn phí) hoặc trên máy cá nhân. Web không chạy trên máy ảo và không có mục quản lý máy ảo. Máy ảo (VPS) là chuyện của PyloS.
Nhóm Zalo ─► PyloS ──(một khoá, chỉ API giao lịch)──► web: ghi lệnh vào hàng của từng người
└─► máy chủ ghi ngay vào Google Lịch của người đó
zaloUid). PyloS không nhận cấu hình từ web, không gửi nhịp tim hay session lên web.| Vai trò | Sử dụng bình thường | Quản lý bot lịch | Tài khoản người dùng |
|---|---|---|---|
| Owner | ✔ | ✔ | xem + cấp quyền, gỡ Zalo, xoá |
| Technician | ✔ | ✔ | chỉ xem |
| User | ✔ | ✘ | ✘ |
src/roles.js), đổi quyền có hiệu lực ngay.OWNER_EMAILS (Gmail của bạn, cách nhau dấu phẩy), đăng nhập bằng Gmail đó. Đây cũng là đường cứu hộ khi mất hết Owner.Sao lưu trước nếu đang có dữ liệu: UPSTASH_REDIS_REST_URL=... UPSTASH_REDIS_REST_TOKEN=... node scripts/backup.mjs.
Tạo project: https://vercel.com/new → repo quanlythoigian → Import.
Biến môi trường (Settings → Environment Variables, đổi xong phải Redeploy):
| Tên | Giá trị |
|---|---|
OWNER_EMAILS | Gmail của bạn |
TOKEN_ENC_KEY | node -e "console.log(require('crypto').randomBytes(32).toString('base64'))". Đừng đổi về sau (đổi là mọi người phải kết nối lại Google Lịch). Production và Preview dùng khoá khác nhau |
CRON_SECRET | chuỗi ngẫu nhiên dài, không dấu cách và ký tự đặc biệt |
PRIMARY_HOST | tên miền chính, vd iforgotmywayhome.vercel.app |
GEMINI_API_KEY, ZALO_BOT_TOKEN | (hoặc nhập trên web ở Khoá & trạng thái) |
Môi trường Preview nên đặt thêm KV_PREFIX=qltg-preview: và STORAGE_KEY=quanlythoigian-preview:db để bản thử không đụng dữ liệu thật.
Upstash Redis (bắt buộc, miễn phí): tab Storage → Create Database → Upstash for Redis → Connect, rồi Redeploy.
Google (mục dưới), cron (mục dưới), nối PyloS (mục dưới).
iforgotmywayhome, email hỗ trợ, link https://<tên miền>/privacy.html và /terms.html.openid, email, profile, https://www.googleapis.com/auth/calendar.events.calendar.events (cần video demo, chính sách quyền riêng tư).https://<tên miền chính>https://<tên miền chính>/api/google/callback
(Hai dòng này có sẵn để chép ở Quản lý bot lịch → Khoá & trạng thái → Google.)Mẫu giải trình khi Google hỏi về scope: Web ghi lịch được giao trong nhóm Zalo vào Google Lịch của chính người dùng (thêm, sửa, xoá sự kiện do web tạo) và hiện lịch của họ trên web. calendar.readonly không ghi được; calendar.events là quyền hẹp nhất cho phép ghi sự kiện. Quyền được lưu mã hoá, không chia sẻ, không dùng quảng cáo hay huấn luyện AI; người dùng ngắt được bất cứ lúc nào.
Vercel miễn phí chỉ cron 1 lần/ngày. Tạo job miễn phí ở https://cron-job.org: URL https://<tên miền>/api/cron?key=<CRON_SECRET>, GET, mỗi 5 phút, timeout 30 giây. Cron chạy lại lệnh Google bị lỗi tạm thời (mạng, Google quá tải), đồng bộ nguồn và Google Lịch theo lô (tối đa 20 người/lần, xoay vòng), gửi nhắc việc Zalo. Lịch được giao vẫn được ghi ngay lúc bot giao; cron chỉ là lưới an toàn.
settings.env của PyloS (máy Windows và VPS):
SCHEDULE_API_URL=https://<tên miền>
SCHEDULE_API_KEY=<khoá vừa tạo>
/api/agent/openapi.json.API (xác thực Authorization: Bearer <khoá>) | Việc |
|---|---|
POST /api/agent/zalo-link {code, zaloUid, zaloName} | liên kết Zalo của người gửi mã với tài khoản Google của họ |
POST /api/agent/assign {title, start, end?, allDay?, note?, assignees:[{zaloUid, name}], source} | giao lịch; ghi vào Google Lịch của từng người đã liên kết; trả {eventId, assigned, unlinked, appUrl} |
PATCH /api/agent/assign/:id · DELETE … · GET … | sửa (người mới nhận lệnh thêm, người bị bỏ bị xoá khỏi Google Lịch), huỷ, xem tình trạng |
POST /api/agent/events, GET/POST /api/agent/tasks, PATCH …/tasks/:id, GET …/agenda, POST …/message | lịch / việc riêng của người nhắn, bắt buộc kèm zaloUid (chưa liên kết → 404 kèm appUrl) |
config, heartbeat, sessions, device-login | đã bỏ, trả 410 (PyloS đã tách khỏi web) |
APP_PASSWORD / tài khoản quản trị không còn. Đặt OWNER_EMAILS, đăng nhập bằng Google.node scripts/cleanup-w5.mjs sau khi ổn.2026-11-01) và nên đăng nhập lại để cho phép Google Lịch (quyền trước đây nằm trong trình duyệt, không chuyển sang máy chủ được). Lịch đã ghi trước đây không bị tạo trùng (cùng ID cố định).quanlythoigian-azure…) vẫn nhận API của PyloS, webhook Zalo, cron; mọi trang chuyển (308) về PRIMARY_HOST.Cần Node.js ≥ 20.12.
npm install
cp .env.example .env # điền OWNER_EMAILS, GEMINI_API_KEY, Google Client...
npm start # http://localhost:3000
npm test # kiểm thử đơn vị
npm run test:e2e # trình duyệt thật, 3 vai trò (cần Playwright + Chromium); SHOTS_DIR=thư-mục để lưu ảnh
Dữ liệu trên máy: data/db.json, data/kv.json. Google OAuth khi chạy máy cần thêm http://localhost:3000/api/google/callback.
⚠️ Không bao giờ commit key vào repo. Key chỉ nằm trong
.envhoặc Environment Variables của Vercel.
| Biến | Ý nghĩa | Mặc định |
|---|---|---|
OWNER_EMAILS | Gmail Owner (cũng là đường cứu hộ) | trống |
TOKEN_ENC_KEY | Khoá mã hoá quyền Google Lịch (base64, 32 byte) | trống (trên Vercel bắt buộc) |
CRON_SECRET | Bảo vệ /api/cron?key= | trống |
PRIMARY_HOST (cũ: APP_HOST) | Tên miền chính | trống: dùng host hiện tại |
GEMINI_API_KEY, GEMINI_MODEL, ZALO_BOT_TOKEN | Có thể nhập trên web | trống |
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET | Có thể nhập trên web | trống |
KV_PREFIX, STORAGE_KEY | Tiền tố khoá Redis (tách Preview/Production) | qltg:, quanlythoigian:db |
APP_TIMEZONE | Múi giờ | Asia/Ho_Chi_Minh |
SYNC_INTERVAL_MINUTES, REMIND_BEFORE_MINUTES, DAILY_SUMMARY_HOUR | Chu kỳ đồng bộ, nhắc, tóm tắt | 30, 15, 7 |
ZALO_MODE, ZALO_WEBHOOK_SECRET, ZALO_CHAT_ID | Bot Zalo nhắc việc của web | polling |
src/limits.js)Tối đa 5 nguồn (2 nguồn trang web), 2.000 lịch, 1.000 việc, 20 lần AI trích lịch mỗi ngày. Nguồn không được trỏ vào địa chỉ nội bộ.
api/index.js, server.js điểm vào Vercel / chạy trên máy
src/app.js API Express: đăng nhập Google, /api/me (dữ liệu riêng), /api/admin (theo quyền), /api/agent (PyloS)
src/roles.js Owner / Technician / User và bảng quyền
src/members.js tài khoản, điều khoản, mã liên kết Zalo, hàng lệnh, đổi quyền + nhật ký
src/userstore.js dữ liệu riêng từng người (udata:<id>), Owner chính
src/gtoken.js, gsync.js quyền Google Lịch (mã hoá) và ghi lịch từ máy chủ
src/calsync.js áp lệnh thêm/sửa/xoá vào Google Lịch (ID cố định, không trùng)
src/calbot.js, calbot-log.js bot lịch: giao/sửa/huỷ lịch, nhật ký 90 ngày
src/google.js, sources.js, gemini.js, zalo.js, cron.js, migrate.js, kv.js, storage.js
views/app.html một giao diện cho mọi người; public/app/*.js: main (sử dụng), account, admin-bot, admin-accounts
scripts/backup.mjs, cleanup-w5.mjs sao lưu Upstash, dọn dữ liệu cũ
test/ npm test (58 test); test/e2e: npm run test:e2e
docs/KE-HOACH-CAP-NHAT-2026-11-01.md kế hoạch cập nhật
calendar.events.