From f255e3c0a02b0ca1c08af73f6a05d3c1ea8ab077 Mon Sep 17 00:00:00 2001 From: alorig <220087330+alorig@users.noreply.github.com> Date: Mon, 24 Nov 2025 06:08:27 +0500 Subject: [PATCH] 21 --- frontend/src/App.tsx | 2 +- .../src/components/auth/ProtectedRoute.tsx | 2 +- frontend/src/components/auth/SignInForm.tsx | 2 +- frontend/src/components/auth/SignUpForm.tsx | 2 +- .../src/components/common/PageBreadCrumb.tsx | 2 +- .../src/components/common/ScrollToTop.tsx | 2 +- .../dashboard/EnhancedMetricCard.tsx | 2 +- .../components/dashboard/WorkflowPipeline.tsx | 2 +- frontend/src/components/header/Header.tsx | 2 +- .../header/NotificationDropdown.tsx | 2 +- .../src/components/header/SiteSwitcher.tsx | 2 +- .../src/components/header/UserDropdown.tsx | 4 +- .../components/sidebar/ApiStatusIndicator.tsx | 2 +- .../src/components/tasks/RelationshipMap.tsx | 2 +- frontend/src/components/ui/alert/Alert.tsx | 2 +- .../components/ui/breadcrumb/Breadcrumb.tsx | 2 +- .../components/ui/dropdown/DropdownItem.tsx | 2 +- frontend/src/hooks/useGoBack.ts | 2 +- frontend/src/layout/AppHeader.tsx | 2 +- frontend/src/layout/AppLayout.tsx | 2 +- frontend/src/layout/AppSidebar.tsx | 2 +- .../src/pages/AuthPages/AuthPageLayout.tsx | 2 +- frontend/src/pages/Automation/Dashboard.tsx | 2 +- frontend/src/pages/Dashboard/Home.tsx | 2 +- frontend/src/pages/OtherPage/NotFound.tsx | 2 +- frontend/src/pages/Planner/Dashboard.tsx | 2 +- frontend/src/pages/Thinker/Dashboard.tsx | 2 +- frontend/src/pages/Writer/Dashboard.tsx | 2 +- master-docs/AGENT_MASTER_REFERENCE.md | 156 ++++++++++++++++++ master-docs/file-tree.md | Bin 0 -> 74 bytes 30 files changed, 185 insertions(+), 29 deletions(-) create mode 100644 master-docs/AGENT_MASTER_REFERENCE.md create mode 100644 master-docs/file-tree.md diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index c1e6ac4d..cf30b322 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,5 +1,5 @@ import { Suspense, lazy, useEffect } from "react"; -import { BrowserRouter as Router, Routes, Route, Navigate } from "react-router"; +import { BrowserRouter as Router, Routes, Route, Navigate } from "react-router-dom"; import { HelmetProvider } from "react-helmet-async"; import AppLayout from "./layout/AppLayout"; import { ScrollToTop } from "./components/common/ScrollToTop"; diff --git a/frontend/src/components/auth/ProtectedRoute.tsx b/frontend/src/components/auth/ProtectedRoute.tsx index 3c7ef4a8..65f5e2c6 100644 --- a/frontend/src/components/auth/ProtectedRoute.tsx +++ b/frontend/src/components/auth/ProtectedRoute.tsx @@ -1,5 +1,5 @@ import { useEffect, ReactNode, useState } from "react"; -import { Navigate, useLocation } from "react-router"; +import { Navigate, useLocation } from "react-router-dom"; import { useAuthStore } from "../../store/authStore"; import { useErrorHandler } from "../../hooks/useErrorHandler"; import { trackLoading } from "../common/LoadingStateMonitor"; diff --git a/frontend/src/components/auth/SignInForm.tsx b/frontend/src/components/auth/SignInForm.tsx index 54e545b0..13c97c3d 100644 --- a/frontend/src/components/auth/SignInForm.tsx +++ b/frontend/src/components/auth/SignInForm.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import { Link, useNavigate, useLocation } from "react-router"; +import { Link, useNavigate, useLocation } from "react-router-dom"; import { ChevronLeftIcon, EyeCloseIcon, EyeIcon } from "../../icons"; import Label from "../form/Label"; import Input from "../form/input/InputField"; diff --git a/frontend/src/components/auth/SignUpForm.tsx b/frontend/src/components/auth/SignUpForm.tsx index e9141463..f98518cf 100644 --- a/frontend/src/components/auth/SignUpForm.tsx +++ b/frontend/src/components/auth/SignUpForm.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import { Link, useNavigate } from "react-router"; +import { Link, useNavigate } from "react-router-dom"; import { ChevronLeftIcon, EyeCloseIcon, EyeIcon } from "../../icons"; import Label from "../form/Label"; import Input from "../form/input/InputField"; diff --git a/frontend/src/components/common/PageBreadCrumb.tsx b/frontend/src/components/common/PageBreadCrumb.tsx index 9447412b..3ef409cc 100644 --- a/frontend/src/components/common/PageBreadCrumb.tsx +++ b/frontend/src/components/common/PageBreadCrumb.tsx @@ -1,4 +1,4 @@ -import { Link } from "react-router"; +import { Link } from "react-router-dom"; interface BreadcrumbProps { pageTitle: string; diff --git a/frontend/src/components/common/ScrollToTop.tsx b/frontend/src/components/common/ScrollToTop.tsx index 38298329..0bdeb6b6 100644 --- a/frontend/src/components/common/ScrollToTop.tsx +++ b/frontend/src/components/common/ScrollToTop.tsx @@ -1,5 +1,5 @@ import { useEffect } from "react"; -import { useLocation } from "react-router"; +import { useLocation } from "react-router-dom"; export function ScrollToTop() { const { pathname } = useLocation(); diff --git a/frontend/src/components/dashboard/EnhancedMetricCard.tsx b/frontend/src/components/dashboard/EnhancedMetricCard.tsx index 9d5891fe..8f9638b2 100644 --- a/frontend/src/components/dashboard/EnhancedMetricCard.tsx +++ b/frontend/src/components/dashboard/EnhancedMetricCard.tsx @@ -1,5 +1,5 @@ import React, { ReactNode, useState } from "react"; -import { Link } from "react-router"; +import { Link } from "react-router-dom"; import { ArrowUpIcon, ArrowDownIcon } from "../../icons"; import { EnhancedTooltip } from "../ui/tooltip/EnhancedTooltip"; diff --git a/frontend/src/components/dashboard/WorkflowPipeline.tsx b/frontend/src/components/dashboard/WorkflowPipeline.tsx index 48051bc9..6271bad7 100644 --- a/frontend/src/components/dashboard/WorkflowPipeline.tsx +++ b/frontend/src/components/dashboard/WorkflowPipeline.tsx @@ -1,5 +1,5 @@ import React, { ReactNode } from "react"; -import { Link } from "react-router"; +import { Link } from "react-router-dom"; import { CheckCircleIcon, TimeIcon, ArrowRightIcon } from "../../icons"; import { Tooltip } from "../ui/tooltip"; diff --git a/frontend/src/components/header/Header.tsx b/frontend/src/components/header/Header.tsx index 37613adc..99ad6dec 100644 --- a/frontend/src/components/header/Header.tsx +++ b/frontend/src/components/header/Header.tsx @@ -2,7 +2,7 @@ import { useState } from "react"; import { ThemeToggleButton } from "../common/ThemeToggleButton"; import NotificationDropdown from "./NotificationDropdown"; import UserDropdown from "./UserDropdown"; -import { Link } from "react-router"; +import { Link } from "react-router-dom"; // Define the interface for the props interface HeaderProps { diff --git a/frontend/src/components/header/NotificationDropdown.tsx b/frontend/src/components/header/NotificationDropdown.tsx index 29d43ea4..8590f781 100644 --- a/frontend/src/components/header/NotificationDropdown.tsx +++ b/frontend/src/components/header/NotificationDropdown.tsx @@ -1,7 +1,7 @@ import { useState, useRef } from "react"; import { Dropdown } from "../ui/dropdown/Dropdown"; import { DropdownItem } from "../ui/dropdown/DropdownItem"; -import { Link } from "react-router"; +import { Link } from "react-router-dom"; export default function NotificationDropdown() { const [isOpen, setIsOpen] = useState(false); diff --git a/frontend/src/components/header/SiteSwitcher.tsx b/frontend/src/components/header/SiteSwitcher.tsx index c8c1dd23..6b5f52f4 100644 --- a/frontend/src/components/header/SiteSwitcher.tsx +++ b/frontend/src/components/header/SiteSwitcher.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useRef } from "react"; -import { useLocation, useNavigate } from "react-router"; +import { useLocation, useNavigate } from "react-router-dom"; import { Dropdown } from "../ui/dropdown/Dropdown"; import { DropdownItem } from "../ui/dropdown/DropdownItem"; import { fetchSites, Site, setActiveSite as apiSetActiveSite } from "../../services/api"; diff --git a/frontend/src/components/header/UserDropdown.tsx b/frontend/src/components/header/UserDropdown.tsx index b44fcd2a..b134640a 100644 --- a/frontend/src/components/header/UserDropdown.tsx +++ b/frontend/src/components/header/UserDropdown.tsx @@ -1,8 +1,8 @@ import { useState, useRef } from "react"; -import { useNavigate } from "react-router"; +import { useNavigate } from "react-router-dom"; import { DropdownItem } from "../ui/dropdown/DropdownItem"; import { Dropdown } from "../ui/dropdown/Dropdown"; -import { Link } from "react-router"; +import { Link } from "react-router-dom"; import { useAuthStore } from "../../store/authStore"; export default function UserDropdown() { diff --git a/frontend/src/components/sidebar/ApiStatusIndicator.tsx b/frontend/src/components/sidebar/ApiStatusIndicator.tsx index edc0c4a9..b7e85cbc 100644 --- a/frontend/src/components/sidebar/ApiStatusIndicator.tsx +++ b/frontend/src/components/sidebar/ApiStatusIndicator.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useCallback, useRef } from "react"; -import { useLocation } from "react-router"; +import { useLocation } from "react-router-dom"; import { API_BASE_URL } from "../../services/api"; import { useAuthStore } from "../../store/authStore"; diff --git a/frontend/src/components/tasks/RelationshipMap.tsx b/frontend/src/components/tasks/RelationshipMap.tsx index f2295ff2..fd3f0027 100644 --- a/frontend/src/components/tasks/RelationshipMap.tsx +++ b/frontend/src/components/tasks/RelationshipMap.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { Link } from "react-router"; +import { Link } from "react-router-dom"; import { ArrowRightIcon } from "../../icons"; export interface RelationshipData { diff --git a/frontend/src/components/ui/alert/Alert.tsx b/frontend/src/components/ui/alert/Alert.tsx index 562509a1..d367657c 100644 --- a/frontend/src/components/ui/alert/Alert.tsx +++ b/frontend/src/components/ui/alert/Alert.tsx @@ -1,4 +1,4 @@ -import { Link } from "react-router"; +import { Link } from "react-router-dom"; interface AlertProps { variant: "success" | "error" | "warning" | "info"; // Alert type diff --git a/frontend/src/components/ui/breadcrumb/Breadcrumb.tsx b/frontend/src/components/ui/breadcrumb/Breadcrumb.tsx index 80ff8783..ce9a9cec 100644 --- a/frontend/src/components/ui/breadcrumb/Breadcrumb.tsx +++ b/frontend/src/components/ui/breadcrumb/Breadcrumb.tsx @@ -1,5 +1,5 @@ import { ReactNode } from "react"; -import { Link } from "react-router"; +import { Link } from "react-router-dom"; interface BreadcrumbProps { items: Array<{ diff --git a/frontend/src/components/ui/dropdown/DropdownItem.tsx b/frontend/src/components/ui/dropdown/DropdownItem.tsx index 88bd64e3..fde03c26 100644 --- a/frontend/src/components/ui/dropdown/DropdownItem.tsx +++ b/frontend/src/components/ui/dropdown/DropdownItem.tsx @@ -1,5 +1,5 @@ import type React from "react"; -import { Link } from "react-router"; +import { Link } from "react-router-dom"; interface DropdownItemProps { tag?: "a" | "button"; diff --git a/frontend/src/hooks/useGoBack.ts b/frontend/src/hooks/useGoBack.ts index beeb5f03..8cbec301 100644 --- a/frontend/src/hooks/useGoBack.ts +++ b/frontend/src/hooks/useGoBack.ts @@ -1,4 +1,4 @@ -import { useNavigate } from "react-router"; +import { useNavigate } from "react-router-dom"; const useGoBack = () => { const navigate = useNavigate(); diff --git a/frontend/src/layout/AppHeader.tsx b/frontend/src/layout/AppHeader.tsx index eb513c73..61c87dad 100644 --- a/frontend/src/layout/AppHeader.tsx +++ b/frontend/src/layout/AppHeader.tsx @@ -1,6 +1,6 @@ import { useEffect, useRef, useState } from "react"; -import { Link } from "react-router"; +import { Link } from "react-router-dom"; import { useSidebar } from "../context/SidebarContext"; import { ThemeToggleButton } from "../components/common/ThemeToggleButton"; import NotificationDropdown from "../components/header/NotificationDropdown"; diff --git a/frontend/src/layout/AppLayout.tsx b/frontend/src/layout/AppLayout.tsx index 089b7281..3bde3b2c 100644 --- a/frontend/src/layout/AppLayout.tsx +++ b/frontend/src/layout/AppLayout.tsx @@ -1,6 +1,6 @@ import { useEffect, useRef, useState } from "react"; import { SidebarProvider, useSidebar } from "../context/SidebarContext"; -import { Outlet } from "react-router"; +import { Outlet } from "react-router-dom"; import AppHeader from "./AppHeader"; import Backdrop from "./Backdrop"; import AppSidebar from "./AppSidebar"; diff --git a/frontend/src/layout/AppSidebar.tsx b/frontend/src/layout/AppSidebar.tsx index 0946aae8..31621723 100644 --- a/frontend/src/layout/AppSidebar.tsx +++ b/frontend/src/layout/AppSidebar.tsx @@ -1,5 +1,5 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react"; -import { Link, useLocation } from "react-router"; +import { Link, useLocation } from "react-router-dom"; // Assume these icons are imported from an icon library import { diff --git a/frontend/src/pages/AuthPages/AuthPageLayout.tsx b/frontend/src/pages/AuthPages/AuthPageLayout.tsx index 787d44d9..1acfed55 100644 --- a/frontend/src/pages/AuthPages/AuthPageLayout.tsx +++ b/frontend/src/pages/AuthPages/AuthPageLayout.tsx @@ -1,6 +1,6 @@ import React from "react"; import GridShape from "../../components/common/GridShape"; -import { Link } from "react-router"; +import { Link } from "react-router-dom"; import ThemeTogglerTwo from "../../components/common/ThemeTogglerTwo"; export default function AuthLayout({ diff --git a/frontend/src/pages/Automation/Dashboard.tsx b/frontend/src/pages/Automation/Dashboard.tsx index aa8630e0..c469aaf7 100644 --- a/frontend/src/pages/Automation/Dashboard.tsx +++ b/frontend/src/pages/Automation/Dashboard.tsx @@ -1,5 +1,5 @@ import { useEffect, useState, lazy, Suspense } from "react"; -import { Link, useNavigate } from "react-router"; +import { Link, useNavigate } from "react-router-dom"; import PageMeta from "../../components/common/PageMeta"; import ComponentCard from "../../components/common/ComponentCard"; import { ProgressBar } from "../../components/ui/progress"; diff --git a/frontend/src/pages/Dashboard/Home.tsx b/frontend/src/pages/Dashboard/Home.tsx index 24ae4ef6..18e0565a 100644 --- a/frontend/src/pages/Dashboard/Home.tsx +++ b/frontend/src/pages/Dashboard/Home.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useState, lazy, Suspense, useRef } from "react"; -import { Link, useNavigate } from "react-router"; +import { Link, useNavigate } from "react-router-dom"; import PageMeta from "../../components/common/PageMeta"; import CreditBalanceWidget from "../../components/dashboard/CreditBalanceWidget"; import UsageChartWidget from "../../components/dashboard/UsageChartWidget"; diff --git a/frontend/src/pages/OtherPage/NotFound.tsx b/frontend/src/pages/OtherPage/NotFound.tsx index d0d1d044..6e5206ed 100644 --- a/frontend/src/pages/OtherPage/NotFound.tsx +++ b/frontend/src/pages/OtherPage/NotFound.tsx @@ -1,5 +1,5 @@ import GridShape from "../../components/common/GridShape"; -import { Link } from "react-router"; +import { Link } from "react-router-dom"; import PageMeta from "../../components/common/PageMeta"; export default function NotFound() { diff --git a/frontend/src/pages/Planner/Dashboard.tsx b/frontend/src/pages/Planner/Dashboard.tsx index 19ebfe60..8ae5ea2f 100644 --- a/frontend/src/pages/Planner/Dashboard.tsx +++ b/frontend/src/pages/Planner/Dashboard.tsx @@ -1,5 +1,5 @@ import { useEffect, useState, useMemo, lazy, Suspense } from "react"; -import { Link, useNavigate } from "react-router"; +import { Link, useNavigate } from "react-router-dom"; import PageMeta from "../../components/common/PageMeta"; import ComponentCard from "../../components/common/ComponentCard"; import { ProgressBar } from "../../components/ui/progress"; diff --git a/frontend/src/pages/Thinker/Dashboard.tsx b/frontend/src/pages/Thinker/Dashboard.tsx index ae767b60..8f560508 100644 --- a/frontend/src/pages/Thinker/Dashboard.tsx +++ b/frontend/src/pages/Thinker/Dashboard.tsx @@ -1,5 +1,5 @@ import { useEffect, useState, lazy, Suspense } from "react"; -import { Link, useNavigate } from "react-router"; +import { Link, useNavigate } from "react-router-dom"; import PageMeta from "../../components/common/PageMeta"; import ComponentCard from "../../components/common/ComponentCard"; import { ProgressBar } from "../../components/ui/progress"; diff --git a/frontend/src/pages/Writer/Dashboard.tsx b/frontend/src/pages/Writer/Dashboard.tsx index 933c48f9..17be7bd3 100644 --- a/frontend/src/pages/Writer/Dashboard.tsx +++ b/frontend/src/pages/Writer/Dashboard.tsx @@ -1,5 +1,5 @@ import { useEffect, useState, useMemo, lazy, Suspense } from "react"; -import { Link, useNavigate } from "react-router"; +import { Link, useNavigate } from "react-router-dom"; import PageMeta from "../../components/common/PageMeta"; import ComponentCard from "../../components/common/ComponentCard"; import { ProgressBar } from "../../components/ui/progress"; diff --git a/master-docs/AGENT_MASTER_REFERENCE.md b/master-docs/AGENT_MASTER_REFERENCE.md new file mode 100644 index 00000000..ffbee4e5 --- /dev/null +++ b/master-docs/AGENT_MASTER_REFERENCE.md @@ -0,0 +1,156 @@ +# Agent Master Reference — IGNY8 + +Purpose: provide a single, navigable reference for any new agent (human or automated) to locate the exact files, entry points, and functional responsibilities across the IGNY8 monorepo. Use this as the starting point for feature work, bug fixes, or integrations. + +Contents +- Repository snapshot (concise tree) +- Key modules & responsibilities (table) +- Important functions / entrypoints (table) +- Quick agent workflow (5 steps) +- Setup & common commands + +--- + +**Repository Snapshot (Top-level, concise)** + +- `backend/` : Django project and related management scripts + - `manage.py` : Django CLI entry + - `requirements.txt` : Python deps + - `igny8_core/` : main Django package + - `settings.py`, `asgi.py`, `wsgi.py`, `celery.py` + - `api/`, `ai/`, `auth/`, `admin/`, `business/`, `modules/`, `utils/` + - `frontend/` (legacy frontend bundle inside backend) + +- `frontend/` : Vite + React application (modern front-end) + - `package.json`, `vite.config.ts`, `src/` (React + TS), `public/` + +- `master-docs/` : documentation; authoritative notes about architecture + +- `docker-compose.app.yml` : local dev stack (DB, cache, web, worker) + +--- + +**Key Modules & Purpose** + +| Module / Path | Purpose / Responsibility | Quick Notes | +|---|---|---| +| `backend/manage.py` | Django management entrypoint | Run migrations, tests, server | +| `igny8_core/settings.py` | Central config for Django | Env-driven; source of secrets/flags | +| `igny8_core/celery.py` | Celery app configuration | Worker + beat scheduling setup | +| `igny8_core/ai/` | AI orchestration layer | Models and engine integration | +| `igny8_core/api/` | REST endpoints for backend | Look here for API implementations | +| `frontend/` | Modern frontend app | `src/` contains components, hooks, services | +| `docker-compose.app.yml` | Local dev orchestration | DB, cache, web, worker definitions | +| `master-docs/` | Documentation and process| Use for architecture decisions and public docs | + +--- + +**Important Files & Entrypoints (where to start for common tasks)** + +| Task | File / Function | Where to look | +|---|---|---| +| Start backend locally | `backend/manage.py` | `python manage.py runserver` (see file for settings) | +| Celery worker/beat | `igny8_core/celery.py` | `celery -A igny8_core worker` and `celery -A igny8_core beat` | +| Add/inspect REST endpoint | `igny8_core/api/` | Search for view classes or `@api_view` functions | +| AI model orchestration | `igny8_core/ai/engine.py` (or `ai_core.py`) | See `05-AI-FRAMEWORK-IMPLEMENTATION.md` in `master-docs/` | +| Frontend page/component | `frontend/src/pages/` and `frontend/src/components/` | Use the `App` and route files in `src/` | + +--- + +**Function / Area Quick-Reference (examples)** + +- Celery and periodic tasks + - File: `igny8_core/celery.py` + - Purpose: configure Celery app, load periodic tasks (beat schedule is present at `backend/celerybeat-schedule`). + +- AI orchestration + - Files: `igny8_core/ai/ai_core.py`, `igny8_core/ai/engine.py` (or similarly named) + - Purpose: implement model selection, prompt orchestration, caching, and engine interfaces. + +- API handlers + - Path: `igny8_core/api/` (search for submodules per resource) + - Purpose: HTTP endpoints used by `frontend/` and external integrations. + +- Frontend data services + - Path: `frontend/src/services/` and `frontend/src/api/` + - Purpose: client-side API wrappers; coordinate expected backend response shapes. + +--- + +**Agent Quick Workflow — 5 Steps** + +1. Identify the feature or bug area + - Use this reference to map the user-facing feature to `frontend/` pages and `igny8_core/api/` endpoints. + - Search for the route or identifiable component in `frontend/src/`. + +2. Locate the backend API handler + - From the frontend service or API call, open the corresponding URL and find the view in `igny8_core/api/`. + - Inspect serializer, view, and model (if present) in the same directory. + +3. Check configuration and environment + - Open `igny8_core/settings.py` to find related flags and env vars. + - For scheduled/background work, inspect `igny8_core/celery.py` and `backend/celerybeat-schedule`. + +4. Implement change and run local checks + - Backend: create/modify files under `igny8_core/` and run `python manage.py test` or `pytest` as configured. + - Frontend: modify `frontend/src/` and run `npm run dev` or `npm run build` for production checks. + +5. Update documentation & tests + - Add or update `master-docs/*` when making cross-cutting changes. + - Update the `API-COMPLETE-REFERENCE.md` if API shapes change. + +--- + +**Common Commands (PowerShell-friendly)** + +Backend setup and run (PowerShell): + +``` +cd backend +python -m venv .venv +.\.venv\Scripts\Activate.ps1 +pip install -r requirements.txt +python manage.py migrate +python manage.py runserver +``` + +Run Celery worker/beat (PowerShell): + +``` +cd backend +.\.venv\Scripts\Activate.ps1 +celery -A igny8_core worker -l info +celery -A igny8_core beat -l info +``` + +Frontend dev (Windows PowerShell): + +``` +cd frontend +npm install +npm run dev +``` + +Docker compose local stack: + +``` +docker-compose -f docker-compose.app.yml up --build +``` + +--- + +**Guidance for new agents** + +- Always cross-check `master-docs/` entries when making architectural changes. +- When changing an API, update `master-docs/API-COMPLETE-REFERENCE.md` and the frontend wrappers in `frontend/src/services/`. +- For AI changes, refer to `master-docs/05-AI-FRAMEWORK-IMPLEMENTATION.md` before editing `igny8_core/ai/`. + +--- + +If you want, I can: + +- Expand the file tree to include all files per directory (full tree). +- Generate a CSV or JSON mapping of file → responsibilities for programmatic use. +- Add an index of search terms and likely filenames for quick grep commands. + +End of reference. diff --git a/master-docs/file-tree.md b/master-docs/file-tree.md new file mode 100644 index 0000000000000000000000000000000000000000..236c3cfe4cbeb138a6f5bf1c2130a7900970add5 GIT binary patch literal 74 zcmezWFN7f<2o)G|84?-t7%G9R0wAjhh;tcI8A^b-h@luLstd$4%+|# literal 0 HcmV?d00001