Yamen Ahmad
45408acd5c
feat(ai): LangGraph as core runtime + AI Agents/Tools console + full-demo seed
...
Core AI runtime
- New encoach.ai.agent + encoach.ai.tool models with M2M tool binding,
graph topology (simple|plan_review_revise|rag|react), model + fallback,
temperature, max_tokens, response_format, max_revisions, quality checks
and system prompt fields.
- services/agent_runtime.py compiles a langgraph.StateGraph per agent
and caches the build per (key, write_date). Emits a structured trace
(output, tool_calls, retrieval_hits, revisions, quality_issues,
ms, model_used, fallback_used) and auto-falls-back on rate-limit/5xx.
- services/agent_tools.py registers 11 tool handlers wrapping existing
services: resources.search, rubric.fetch, outcomes.fetch,
student.profile, quality.cefr_check, quality.ai_detect,
quality.content_gate, course_plan.save (mutates),
course_plan.save_materials (mutates), scoring.grade_writing,
scoring.grade_speaking.
- 7 default agents seeded via data/agents_defaults.xml: course_planner,
course_week_materials, exam_generator, exercise_generator, lms_tutor,
writing_grader, speaking_grader.
- Feature flag encoach_ai.use_langgraph_runtime (default True).
- encoach_ai_course pipeline now routes through AgentRuntime when on,
legacy SDK path kept as fallback.
Admin UI
- /admin/ai/prompts is now a tabbed Agents | Tools | Prompts console.
- AIAgentsPanel: card grid + config dialog (model/temp/graph/tools/
system prompt) + built-in Test Runner showing live trace.
- AIToolsPanel: registry table with category badges, mutates flag,
schema viewer, edit dialog.
- New /api/ai/agents* and /api/ai/tools* controller (list/get/update/
test, list-tools, toggle-tool).
- Sidebar label nav.aiPrompts -> nav.aiAgents (AI Agents and Tools).
- EN + AR (RTL) translations for ~80 new keys.
Smart Wizard pages
- /admin/quick-setup hub + CourseWizard, CoursePlanWizard,
RubricWizard, ExamStructureWizard step-by-step flows.
- /admin/course-plans list + detail pages.
- /teacher/quick-setup mirror.
Full demo seed + 8-role E2E
- seed_full_demo.py adds the 5 missing user_types (approver, corporate,
mastercorporate, agent, developer), activates a 2-stage exam-approval
workflow with one pending request, creates a GE1-aligned 12-week B1
course plan with 6 detailed Week-1 materials (reading 400w, writing,
listening 4-min script, speaking, grammar present simple vs continuous,
vocabulary), and inserts sample ai.log + ai.feedback rows.
- reset_demo_passwords.py forces every demo login back to canonical
passwords (admin123/teacher123/student123/approver123/corporate123/
master123/agent123/dev123).
- e2e_full_scenario.py: 46/46 PASS read-only API smoke across all
8 roles, including a live LangGraph round-trip on writing_grader.
- e2e_approval_chain.py: 6/6 PASS mutation E2E - approver approves
stage 1, admin approves stage 2, linked encoach.exam.custom flips
to status=published, verified via psql.
Docs
- docs/PROJECT_SUMMARY.md updated to 2026-04-25: new Latest events
bullets, refreshed credentials table, full sections 22 (LangGraph
runtime) and 23 (full demo seed + 8-role E2E).
- docs/ENCOACH_FULL_DEMO_QA_REPORT.md added with credentials,
per-endpoint PASS/FAIL, mutation chain proof, LangGraph live output.
- backend/GE1 Course Outline_ Fall AY25-26.pdf vendored as the
reference outline the GE1 plan/materials are aligned to.
Dependencies
- requirements.txt: langgraph>=0.2.0, langchain-core>=0.3.0.
- encoach_ai/__manifest__.py: external_dependencies updated.
Made-with: Cursor
2026-04-25 03:14:22 +04:00
Yamen Ahmad
fbd58fa5a6
feat(i18n,rtl): full Arabic localization + RTL sweep across all layouts
...
Frontend
- i18n: install tailwindcss-rtl, Cairo font, RTL-aware direction in index.css.
- Language toggle: localize aria-label / menu label, persist choice, update
document dir synchronously.
- Sidebar: add `side` prop so the drawer pins to the right in RTL; wire up
AdminLmsLayout, RoleLayout (student/teacher) and AppSidebar to pass
side = i18n.dir() === 'rtl' ? 'right' : 'left'.
- AdminLmsLayout: convert every nav item from hard-coded title to titleKey,
translate group labels (incl. the collapsible Training), breadcrumbs,
user menu (Profile / Settings / Logout), help button and toggle aria
labels; replace physical mr-/right- utilities with logical me-/end-.
- AI components (AiTipBanner, AiInsightsPanel, AiAlertBanner, AiSearchBar,
AiAssistantDrawer): apply dir="auto" at the container level, localize
titles, loading / error / empty states.
- Dashboards (admin / student / teacher): wrap numeric values in <bdi>,
localize dates via ar-EG, fix flex direction for KPI and assignment cards.
- UI primitives (breadcrumb, calendar, carousel, dropdown-menu, menubar,
context-menu, pagination, sidebar): flip chevrons in RTL via a scoped
CSS rule, swap pl-/pr-/ml-/mr- for ps-/pe-/ms-/me-.
- Add logical-direction helpers and bidirectional isolation classes.
Locales
- Expand en.ts and ar.ts with full `nav`, `sidebarGroup`, `breadcrumb`,
`userMenu`, `chrome`, `ai`, and dashboard key sets; keep key parity.
API client
- `api-client.ts` reads the active language from localStorage/i18n and sends
`Accept-Language` on every request so the backend can localize AI output.
Backend (encoach_ai)
- openai_service: add _LANGUAGE_NAMES, normalize_language, language-aware
system prompt injection for every OpenAI call.
- coach_service + controllers (coach_controller, ai_controller): thread
the requested language from headers / user locale down to OpenAIService.
- ai_feedback: fix latent registry error by pointing course_id at op.course
instead of the non-existent encoach.course.
Other
- .gitignore: ignore runtime odoo logs and local caches.
Made-with: Cursor
2026-04-19 18:13:16 +04:00
Yamen Ahmad
435930a827
feat: institutional + support + training admin sections (backend + frontend)
...
Ship three fully-wired admin areas end-to-end with APIs, seeds, tests and docs.
Backend (new `encoach_lms_api` addon + existing addons):
- Institutional: academic years/terms, departments, admission registers & admissions,
courses/batches, lessons, fees (terms + student fees + invoicing with income-account
auto-wiring), gradebook (assignments/grades), library, facilities (encoach.asset),
student leave, result templates + marksheets (incl. delete-with-cascade).
- Support: `encoach.ticket` model + CRUD/assignee routes; payment records derived
from `op.student.fees.details` and `account.move`; platform settings backed by
`encoach.code` and `ir.config_parameter` (packages + grading config).
- Training: `encoach.vocab.item` + `encoach.grammar.rule` (plus progress models)
with CRUD, pagination, search/level filters, and upsert-style progress endpoints.
Odoo 19 compatibility: `_sql_constraints` replaced with `@api.constrains`;
`ValidationError`/`UserError` mapped to HTTP 400.
Frontend:
- Rewire institutional admin pages (Academic Year Manager, Admissions, Courses,
Lessons, Fees, Gradebook, Library, Facilities, Student Leave, Marksheets,
Taxonomy, Resources) to real APIs with React Query invalidation and dialogs.
- New typed services: `payments.service.ts`, `platformSettings.service.ts`,
`training.service.ts`. Updated `fees/gradebook/lms/courseware/taxonomy/
resources/student-progress/generation` services + related types.
- Rewrite `VocabularyPage`, `GrammarPage`, `PaymentRecordPage`, `SettingsPage`,
`TicketsPage` to consume live data with search/filter/progress/CRUD flows.
- New shared components: `TaxonomyCascade`, `MaterialViewer`, `teacher/TeacherLibrary`.
- Favicons/branding assets and misc. UX polish across teacher/student pages.
Tooling & QA:
- Seeders: `seed_demo.py`, `seed_demo_data.py`, `seed_institutional.py` (idempotent,
covers institutional + support + training fixtures incl. income-account wiring).
- API write-flow test suites: `test_write_flows.py` (institutional),
`test_support_flows.py` (support), `test_training_flows.py` (training),
`test_ai_full.py`. All suites pass end-to-end.
- Docs: add `docs/PROJECT_SUMMARY.md` with per-section scope, artifacts and QA.
- `.gitignore`: ignore `pgdata_bak_*/`, `frontend/.vite/`, `frontend/dist/`,
`frontend/node_modules/`.
Made-with: Cursor
2026-04-19 03:13:23 +04:00
Yamen Ahmad
11a7265460
feat(v3): restructure project + add complete frontend
...
- Restructure: move backend from new_project/ to backend/
- Add full React/TypeScript frontend (37 pages, 17 services, 16 type defs, 11 query hooks)
- Add docs/ with SRS specs, user stories, and workflow documentation
- Update .gitignore for new directory layout
Workflows implemented:
WF1 User Signup, WF2 Placement Test, WF3 Exam Configuration,
WF4 General English Exam, WF5 Course Generation,
WF6 Entity Student Onboarding, AI Course Generation,
Adaptive Learning Engine UI, White-Label Branding, Score Release
Made-with: Cursor
2026-04-10 17:26:42 +04:00