Repository navigation
feat(conocimiento): leer Word/Excel/PowerPoint/PDF fuera del proceso main - #4
Merged
Merged
Conversation
…main Portado de agentvivekkumar/dontbemichael (docText, docTextCli, macOcr). Antes knowledge.ingestFile indexaba un .docx/.xlsx como bytes del zip y reportaba éxito; los PDF dependían de pdftotext. - docText.ts convierte OOXML (fflate), PDF (unpdf/pdf.js), textutil y OCR de macOS; lo ilegible se rechaza con una razón clara en vez de guardarse. - La app parsea en un proceso hijo (`docTextCli --json`, ELECTRON_RUN_AS_NODE) para que un PDF o zip hostil nunca se procese en main. KnowledgeManager recibe el extractor inyectado; los tests usan el de en-proceso. - kg:ingestFiles / kg:addFiles ingieren en serie (index.jsonl es append). - Los agentes reciben en su prompt el comando `doc-text` con el Node del hive. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0141jpRihLcQWr34jq6mvC7b
Contributor
🚫 This PR is missing its before/after evidenceEvery pull request here has to show its work. Screenshots or a short screen recording, before the change and after it.
How to fix it: edit the description, keep the A bug fix with no visible surface still needs it: show the failing behaviour, then the same steps passing. A terminal recording is fine. Genuinely nothing to show — a CI tweak, a typo, a dependency bump? A maintainer can apply the |
This was referenced Sep 25, 2026
DannyBaanks
changed the base branch from
claude/nifty-ramanujan-daxt74
to
main
September 25, 2026 11:07
4 tasks done
…jo en macOS) do_unlink comparaba `readlink -f "$dest"` (ruta canónica) contra "$STORE/..." sin canonizar. En macOS el tmpdir es /var/folders -> /private/var, así que nunca coincidían: --unlink salía 0 sin quitar ningún enlace, y test/bridge-opencode.test.cjs dejaba en rojo el job Tests de main. Ahora el lado del store también se canoniza (pwd -P). Test nuevo que lo reproduce en Linux con un store detrás de un symlink. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0141jpRihLcQWr34jq6mvC7b
5 tasks done
…-ramanujan-daxt74-doctext
Owner
Author
|
Estado del CI en este PR. Los tres rojos vienen de
Generated by Claude Code |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
PR 1 de la serie; va apilado sobre #3. Porta desde agentvivekkumar/dontbemichael (Vivek Kumar, MIT) el lector de documentos:
docText.ts,docTextCli.tsymacOcr.ts.Bug que corrige:
knowledge.ingestFileindexaba un.docx,.xlsxo.pptxcomo los bytes del zip, reportaba éxito y nada del documento quedaba buscable. Los PDF dependían depdftotext.Qué cambia respecto al original: en vez de parsear en el proceso main, la app corre
docTextCli --jsonen un proceso hijo (ELECTRON_RUN_AS_NODE, timeout de 240 s, salida máxima de 64 MB). Así, un PDF o un zip hostil que explote pdf.js o fflate solo tumba ese proceso desechable y no el que guarda las PTYs y los secretos.KnowledgeManager.setExtractor()permite inyectar el extractor, y los tests usan el que corre en el mismo proceso.Además:
kg:ingestFilesykg:addFilesahora son async e ingieren de uno en uno, porqueindex.jsonlsolo admite escritura al final y en paralelo las líneas se mezclarían.kg-coreguarda qué conversor produjo cada documento y sumime.doc-text, usando el Node del hive (funciona igual en Windows).macOcr) ytextutilson solo para macOS. En Linux y Windows esos formatos responden "unsupported" con una razón y el resto (OOXML y PDF) funciona igual.Type of change
Evidence
Before
knowledge.ingestFile('cotizacion.docx')devolvía undocId, pero el índice conteníaPK\^C\^D…(el contenedor zip), y buscar "licencias" no encontraba nada.After
CLI compilado (
out/main/docTextCli.js), tal como lo corre la app:Tests:
doc-text15/15,doc-text-cli5/5,knowledge-ingest4/4 (incluye uno nuevo que prueba que se usa el extractor inyectado y que lo ilegible se rechaza).How I tested it
npm run typecheck(limpio),electron-vite build(generadocTextCli.js), el CLI compilado sobre un .docx y un binario, y la suite completa: 874 pasan. Los 5 fallos son los mismos de entorno que ya había enmain(node-pty y Electron sin compilar en el contenedor).Checklist
npm run typecheckpasa.npm run buildgenera las dos entradas.🤖 Generated with Claude Code
Generated by Claude Code