Vì giới hạn context ngữ nghĩa, kiến thức Vi mô và Vĩ mô nằm ở 2 notebook riêng:
• Nếu làm module Vi mô → truy vấn notebook e8a30630-0df2-4932-8740-9ffe7d8882bc (Kinh tế học vi mô 1 - MPP28)
• Nếu làm module Vĩ mô → truy vấn notebook 99090327-f66b-4d8d-8b9e-a3c00acb599f (Kinh tế học vĩ mô - MPP28)
• Nếu làm module Cầu nối (Bridge) kết nối vi mô và vĩ mô → truy vấn lần lượt cả 2 notebook để lấy đúng ký hiệu và giả định của hai bên.
NLM=/opt/ai-os/products/ceo/integrations/notebooklm-mcp-cli/.venv/bin/nlm
# Ví dụ tra cứu Vi mô:
$NLM notebook query --timeout 180 e8a30630-0df2-4932-8740-9ffe7d8882bc \
"Trích xuất công thức, hình vẽ, số liệu của [chủ đề] trong giáo trình PR hoặc SAB. Không dùng gạch ngang."
# Ví dụ tra cứu Vĩ mô:
$NLM notebook query --timeout 180 99090327-f66b-4d8d-8b9e-a3c00acb599f \
"Trích xuất phương trình, đồ thị, cơ chế dịch chuyển của [chủ đề] trong giáo trình Mankiw hoặc Krugman. Không dùng gạch ngang."
• Đọc src/engine/shared/glossary.ts để lấy đúng ký hiệu chuẩn (I, Px, MRS, U cho vi mô; Y, r, i, P, e, k cho vĩ mô).
• Kiểm tra src/engine/micro/ hoặc src/engine/macro/ xem đã có hàm tính toán cho mô hình này chưa.
• Nếu chưa có → viết hàm thuần túy vào src/engine/<domain>/ trước, kèm unit test trong tests/engine/.
• Đọc src/scenarios/registry.ts.
• Nếu tình huống mới có cùng hệ phương trình với một module đã có (chỉ khác bối cảnh câu chuyện hoặc bộ tham số, ví dụ Quỹ ủy thác giáo dục và Tem phiếu thực phẩm, hoặc thuế đánh vào người mua và thuế đánh vào người bán) → thêm làm một preset mới trong module hiện có.
• Chỉ khi khác cấu trúc toán học mới tạo thư mục mới tại src/scenarios/<domain>/<category>/<module_name>/.
defineScenarioTạo 2 file trong thư mục module:
• index.ts: khai báo meta (kèm domain, notebook_id, related_scenarios nếu có), params, presets, hàm model(params) gọi engine, và hàm graph(result) trả về danh sách phần tử SVG.
• explain.tsx: component giải thích lý thuyết và bảng đối sánh, lấy 100% số liệu động từ result.
• Thêm module vào src/scenarios/registry.ts.
• Tạo tests/scenarios/<module_name>.test.ts kiểm tra các bất biến kinh tế trên toàn dải giá trị của thanh trượt.
• Chạy npm test và npm run build.
Khi Nhi đưa một file HTML hoặc đoạn code mô phỏng đã làm sẵn:
reference/Lưu nguyên vẹn vào reference/<ten_file>.html để làm mốc đối chiếu.
Chạy thử bằng Python hoặc Vitest để chọn bộ tham số và hàm chuẩn xác sao cho: • Nghiệm toán học từ solver khớp hoàn toàn với kết luận lý thuyết trong sách. • Khi kéo thanh trượt qua các giá trị biên (ngưỡng ràng buộc, ngưỡng giải pháp góc, ngưỡng hòa vốn), cả đồ thị lẫn lời giải đều tự động chuyển trạng thái hợp lý.
• Bỏ toàn bộ lệnh vẽ Canvas thủ công, thay bằng các khối SVG trong src/graph/.
• Nếu file cũ có một kiểu hiển thị mới rất hữu ích (ví dụ: đồ thị 2 tầng xếp dọc như Đường ngân sách ở trên và Đường cầu ở dưới, hoặc IS LM ở trên và AD AS ở dưới) → nâng cấp thành một layout chung trong src/ui/ và src/graph/ để mọi module sau đều dùng lại được.
Agent nhận việc tiếp theo chỉ cần đọc:
1. AGENTS.md (quy tắc kiến trúc & hợp đồng module)
2. docs/APP_CONTEXT.md (trạng thái hiện tại & liên kết 2 notebook)
3. docs/IMPLEMENTATION_PLAN.md (danh sách task chi tiết, interface, tiêu chí nghiệm thu)
4. docs/MODULE_MIGRATION.md (đặc tả toán học của các module cần chuyển đổi)