ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Luyện phản xạ phỏng vấn người dùng: một persona AI cố ý thả các tín hiệu vào cuộc trò chuyện, người luyện phải nhận ra và hỏi sâu; sau buổi, scorecard chỉ ra tín hiệu đã bắt/bỏ lỡ, câu hỏi cần viết lại (dẫn về thư viện nguyên tắc) và trọng tâm cho buổi sau. PRD: ../docs/prd.vi.md · Design: ../Design/Design/SignalCoach MVP -VI-.dc.html · Cơ chế agent: docs/AGENT.md · Kịch bản demo + hạn chế: docs/DEMO.md · Deploy: docs/DEPLOY.md Cần Node 22+, một MongoDB (Atlas hoặc local) và một Gemini API key (aistudio.google.com).查看完整 README ↗
Luyện phản xạ phỏng vấn người dùng: một persona AI cố ý thả các tín hiệu vào cuộc trò chuyện, người luyện phải nhận ra và hỏi sâu; sau buổi, scorecard chỉ ra tín hiệu đã bắt/bỏ lỡ, câu hỏi cần viết lại (dẫn về thư viện nguyên tắc) và trọng tâm cho buổi sau.
PRD: ../docs/prd.vi.md · Design: ../Design/Design/SignalCoach MVP -VI-.dc.html ·
Cơ chế agent: docs/AGENT.md · Kịch bản demo + hạn chế: docs/DEMO.md ·
Deploy: docs/DEPLOY.md
client/ Next.js 16 (App Router) — UI, deploy Vercel
server/ Express 5 + MongoDB (Mongoose) + session agent trên Gemini — deploy Azure App Service
docs/ AGENT.md · DEMO.md · DEPLOY.md
Cần Node 22+, một MongoDB (Atlas hoặc local) và một Gemini API key (aistudio.google.com).
# API → http://localhost:4000
cd server
cp .env.example .env # điền MONGODB_URI, JWT_SECRET, GEMINI_API_KEYS
npm install
npm run dev
# Web → http://localhost:3000 (proxy /api/* sang API)
cd client
cp .env.example .env.local
npm install
npm run dev
Không có MongoDB? npm run db:memory trong server/ chạy một Mongo tạm (mất dữ liệu khi tắt) và giữ
MONGODB_URI=mongodb://127.0.0.1:27017. Không có key? LLM_PROVIDER=mock chạy toàn bộ pipeline với
model giả (dùng cho test và làm UI). npm run llm:ping đo độ trễ token đầu tiên của model đang cấu hình.
| client | server | |
|---|---|---|
| dev | npm run dev | npm run dev |
| build | npm run build | npm run build |
| lint / types | npm run lint | npm run typecheck |
| tests | — | npm test (Mongo in-memory, model mock) |
lookup_interview_principle), câu gợi ý không trùng câu đã hỏi; nhật ký
tự kiểm tra xem được trên trang hội thoại (FR-6, FR-7, FR-9, FR-10).server/
content/ guides/*.json, principles.json — tĩnh, kiểm tra schema lúc khởi động
scripts/ memory-db.ts · llm-ping.ts · review-bench.ts
test/ stateMachine (unit) · selfCheck (unit) · api (integration, supertest + mongodb-memory-server)
src/
server.ts boot: env → content → Mongo → listen, graceful shutdown
app.ts express app: helmet, cors, logging, json, cookies, /api, errors
config/ env.ts (Zod, model/thinking theo vai) · db.ts · logger.ts
routes/ URL → middleware → controller
controllers/ HTTP in/out (sessions, guides, auth, health); view ẩn trạng thái tín hiệu khi buổi còn active
services/ auth, token, session, guide (built-in + do người dùng tạo), content (+ lookupPrinciple)
agent/ judge.ts · stateMachine.ts (pure) · personaPrompt.ts · turnRunner.ts
review.ts (review + self-check) · scoring.ts · guideGenerator.ts
lib/llm.ts cổng LLM duy nhất: gemini (nhiều key, fallback model, retry) | openai_compatible | mock
models/ Mongoose: users, sessions (snapshot guide + turns + signal state + decision log), guides
middleware/ auth (identify / requireAccount), validate (Zod), errorHandler
schemas/ Zod request DTOs
types/ domain enums + ngưỡng, content schemas, scorecard
utils/ errors (AppError), sse
Hướng phụ thuộc: routes → controllers → services/agent → models, lib; agent không import Express;
config được mọi nơi import, không import ai.
| Method | Path | |
|---|---|---|
| GET | /api/health | DB + LLM provider (Azure health check) |
| GET | /api/principles | thư viện nguyên tắc |
| GET | /api/guides, /api/guides/:id | kịch bản dựng sẵn + của người dùng (không lộ nội dung tín hiệu) |
| POST | /api/guides/generate | {product, audience, goal?, notes?} → {guide} hoặc {clarify} |
| DELETE | /api/guides/:id | xoá kịch bản của mình (các buổi đã luyện vẫn còn) |
| POST | /api/auth/register · /login · /logout | access token (JWT) trong cookie httpOnly, cũng trả trong body |
| GET | /api/auth/me | { anonymous, user } |
| GET/POST/DELETE | /api/sessions | danh sách · tạo {guideId} · xoá tất cả |
| GET/DELETE | /api/sessions/:id | khi buổi đã kết thúc trả thêm scorecard, quyết định + tool call từng lượt, nhật ký tự kiểm tra |
| POST | /api/sessions/:id/turns | {text, clientMessageId} → SSE accepted · delta* · done | error |
| POST | /api/sessions/:id/end | đóng buổi, chạy review + self-check → scorecard |
| POST | /api/sessions/:id/scorecard | tạo lại scorecard nếu lần trước lỗi |
Lỗi: { "error": { "code", "message", "details?" } }.
JWT_EXPIRES_IN, mặc định 7 ngày) thì thành ẩn danh
và đăng nhập lại. Nhận cả Authorization: Bearer <token>.LLM_PROVIDER=gemini với GEMINI_API_KEYS=key1,key2 (key sau được dùng khi key trước bị từ chối hoặc
hết quota). Model mặc định theo vai, đo ngày 2026-10-09: persona gemini-3.5-flash thinking minimal
(~1 s tới token đầu), judge gemini-3.5-flash-lite minimal (~1.2 s), review gemini-3.5-flash high
(~20 s cho cả buổi). Khi model quá tải (503) tự chuyển sang LLM_MODEL_FALLBACKS. Xem server/.env.example.