Conversation
Baseline capture of the uncommitted working tree (schedule/doctor/env/make/ refactor agents, gstack, new tools, doc updates) so the knowledge/docsearch feature that follows builds on the real current state, not on origin/main.
…eado Añade dos agentes y un tool que integran el grafo de conocimiento (graphify) con Obsidian, siguiendo las convenciones de kepano/obsidian-skills, y lo mantienen cacheado al máximo. Todo es Python puro por CLI: funciona igual desde Claude Code, Codex, opencode o cualquier herramienta con shell. - tools/graphify_tool.py: puente único con graphify. Resuelve el intérprete, build/update/query, detecta bóvedas de Obsidian, calcula resúmenes de NODO PADRE con la correlación estructural entre hijos (Jaccard de vecindarios), poda nodos/referencias con backup, y genera notas Obsidian Flavored Markdown (properties, callouts, wikilinks) + vistas Obsidian Bases (.base). Stdlib puro. - agents/knowledge_agent.py: 'cachea lo máximo'. status, setup_vault (detecta/crea bóveda con árbol adaptado papers/code/docs/references/media, MOC, .base y nota de convención obsidian-skills), build (graphify + export Obsidian), summarize_parents (resumen de hijos + correlación), sync (punto único para el commit). Caché en graphify-out/cache/. - agents/docsearch_agent.py: navega el grafo. search (graphify query cacheado), neighbors, list_references, prune (dry_run por defecto, deja graph.json.bak). - git_agent.commit_with_changelog delega en KnowledgeAgent.sync() antes del commit, unificando la actualización de grafo + Obsidian. - .gitignore: graphify-out/cache/ explícito. - tests/test_graphify_tool.py: resúmenes, correlación, poda, backup, bóvedas, notas Obsidian y .base. - Docs: AGENTS.md y agents/README.md (22 agentes, nota cross-tool + obsidian-skills). Límite honesto: resúmenes y correlaciones son estructurales (topología del grafo), no lectura semántica del contenido.
- graphify_tool.run_cli: el fallback al binario 'graphify' del PATH construía
'graphify -m graphify ...' (inválido). Se separa command_prefix: intérprete
del marcador -> [py,-m,graphify]; si no, binario -> [graphify].
- docsearch.search: la clave de caché usaba hash(), que lleva PYTHONHASHSEED y
cambia por proceso -> la caché en disco nunca acertaba entre invocaciones CLI.
Ahora usa hashlib (estable).
- docsearch.search: cacheaba también las consultas fallidas (error transitorio
cacheado para siempre). Ahora lanza en fallo para no cachearlo.
- knowledge.summarize_parents: la clave de caché iba por nº de nodos/aristas;
dos grafos distintos con los mismos conteos servían un resumen obsoleto.
Ahora va por mtime de graph.json.
- knowledge.build: siempre usaba --update; sin grafo previo no hay manifest.
Nuevo GraphifyTool.build: build completo la 1ª vez, --update después.
- graphify_tool.prune(drop_isolated): lógica O(n^2) y frágil ('n not in lista'
comparando dicts). Reescrita con sets, O(n).
- graphify_tool._correlated_pairs: O(k^2) explotaba en hubs gigantes. Tope
determinista a los 200 hijos de mayor grado.
- graphify_tool.detect_obsidian_vaults: rglob descendía igualmente en .venv/
node_modules (corre en cada commit). Reescrito con os.walk podando in situ.
Tests añadidos: command_prefix (marcador vs binario) y prune drop_isolated.
…itiva)
Añade búsqueda de papers académicos relacionados con el proyecto y un
supervisor que coordina workers que compiten. Sin API key, sin deps nuevas
(HTTP con RestTool/urllib, XML con stdlib), cross-tool por CLI.
- tools/research_tool.py: busca papers en fuentes abiertas (arXiv Atom,
OpenAlex JSON con reconstrucción de abstract desde el índice invertido y
recuento de citas). Todo lo no-red es determinista y testeable offline:
extracción de keywords, relevancia léxica, dedupe por DOI/título, ranking.
- agents/research_agent.py: busca papers del PROYECTO. Deriva keywords de
README + pyproject + nodos más centrales del grafo (find_papers), búsqueda
directa (search), keywords (project_keywords). Cacheado en graphify-out/cache/.
- agents/supervisor_agent.py: patrón pedido — workers trabajan por separado,
proponen, se prueban y se elige el mejor y se pule. 'research' compite los
backends arXiv vs OpenAlex EN PARALELO (hilos), puntúa cada propuesta
(0.5·relevancia + 0.4·cobertura + 0.1·volumen), elige la ganadora y pule
fusionando lo mejor de ambas (dedupe + re-rank). 'compete' es genérico:
enfrenta cualquier {agent, action, kwargs}. Arbitraje determinista, no juez LLM.
- tests/test_research_tool.py: parsing arXiv/OpenAlex, keywords, relevancia,
dedupe, ranking (offline, corre en CI).
- Docs: AGENTS.md y agents/README.md (24 agentes).
Verificado end-to-end contra las APIs reales de arXiv y OpenAlex.
Límite honesto: la relevancia es léxica, no semántica.
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.
Qué añade
Integra el grafo de conocimiento (graphify) con Obsidian mediante dos
agentes nuevos y un tool, cacheando al máximo, y siguiendo las convenciones de
kepano/obsidian-skills. Todo es
Python puro por CLI → funciona igual desde Claude Code, Codex, opencode o
cualquier herramienta con shell.
tools/graphify_tool.py— puente único con graphify (stdlib puro)build/update/query.correlación estructural (Jaccard de vecindarios) — p. ej. un nodo
"información" con muchos papers hijos obtiene un resumen de qué agrupan y qué
hijos se relacionan más.
graph.json.bak.vistas Obsidian Bases (
.base).agents/knowledge_agent.py— "cachea lo máximo"setup_vault: detecta o crea una bóveda con árbol adaptado(
papers/,code/,docs/,references/,media/), MOC,.basey nota deconvención.
build: actualiza el grafo y lo exporta a Obsidian.summarize_parents: resumen de nodos padre + correlación (cacheado).sync: punto único que elgitagent llama antes de cada commit.graphify-out/cache/.agents/docsearch_agent.py— navegación y limpieza del grafosearch(graphify query cacheado),neighbors,list_references,prune(quita información/referencias innecesarias;dry_runpor defecto).Integración con el commit
git_agent.commit_with_changelogdelega enKnowledgeAgent.sync()→ grafo +Obsidian se actualizan antes del commit (reemplaza las viejas helpers).
.gitignore:graphify-out/cache/explícito.Docs y tests
AGENTS.mdyagents/README.mdactualizados (22 agentes, nota cross-tool).tests/test_graphify_tool.py: resúmenes, correlación, poda, backup, bóvedas,notas Obsidian y
.base(stdlib, corre en CI del proyecto generado).Nota sobre los commits
Este branch se creó desde
origin/main, que no contenía el trabajo sincommitear del working tree. Por eso hay dos commits:
chore: snapshot ...— captura el WIP preexistente (schedule/doctor/env/…agents, gstack, tools) para que la feature construya sobre el estado real.
feat(agents): knowledge + docsearch ...— la feature de este PR,revisable en aislado.
Límite honesto
Los resúmenes y correlaciones son estructurales (topología del grafo), no
una lectura semántica del contenido — la extracción semántica la hace graphify
con
GEMINI_API_KEY.