read_doc: resolver docs por ACAI_PROJECT_DIR + knowledge load idempotente
- mcp-server _docsReader.js: resolveDocsDir → ACAI_DOCS_DIR / $ACAI_PROJECT_DIR/docs / /app/docs. Arregla DOC_NOT_FOUND en VSCode (HTTP MCP) y local; el .mcp.json ya inyecta ACAI_PROJECT_DIR - routes.py: /knowledge/load idempotente — salta embeddings si el hash de contenido no cambió (clave Redis kbhash), para dispararlo libremente desde el botón de scaffold sin re-embeber Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,20 +1,41 @@
|
||||
import fs from "node:fs/promises";
|
||||
import { existsSync } from "node:fs";
|
||||
import path from "node:path";
|
||||
|
||||
/**
|
||||
* Lectura directa de los markdown del knowledge base desde el filesystem.
|
||||
*
|
||||
* El MCP server corre dentro del container `agentic` junto al FastAPI, asi
|
||||
* que los .md viven en `/app/docs/` (la imagen los copia ahi).
|
||||
*
|
||||
* En caso de override por entorno, respeta `ACAI_DOCS_DIR`. En desarrollo
|
||||
* fuera del container, fallback a paths relativos al cwd.
|
||||
* Orden de resolucion del directorio de docs:
|
||||
* 1. `ACAI_DOCS_DIR` — override explicito por entorno (si esta definido y no vacio).
|
||||
* 2. `<ACAI_PROJECT_DIR>/docs` — caso principal: cada proyecto/web tiene su
|
||||
* propio `docs/`. El `.mcp.json` inyecta `ACAI_PROJECT_DIR` (p.ej.
|
||||
* `/opt/acai/webs/<user>/<site>`), funciona tanto en local (VSCode) como
|
||||
* en cloud (agentic).
|
||||
* 3. `/app/docs` — fallback final: container `agentic` donde esta horneada la
|
||||
* copia canonica de los .md.
|
||||
*/
|
||||
|
||||
function dirExists(p) {
|
||||
try {
|
||||
return existsSync(p);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function resolveDocsDir() {
|
||||
// 1. Override explicito
|
||||
const override = process.env.ACAI_DOCS_DIR;
|
||||
if (override) return override;
|
||||
// Container path
|
||||
if (override && override.trim() !== "") return override;
|
||||
|
||||
// 2. Docs del proyecto/web
|
||||
const projectDir = process.env.ACAI_PROJECT_DIR;
|
||||
if (projectDir && projectDir.trim() !== "") {
|
||||
const projectDocs = path.join(projectDir, "docs");
|
||||
if (dirExists(projectDocs)) return projectDocs;
|
||||
}
|
||||
|
||||
// 3. Fallback al container agentic
|
||||
return "/app/docs";
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user