understand-chat

Par egonex-ai · understand-anything

À utiliser lorsque vous avez besoin de poser des questions sur une base de code ou de comprendre du code à l'aide d'un graphe de connaissances

npx skills add https://github.com/egonex-ai/understand-anything --skill understand-chat

/understand-chat

Répondez à des questions sur cette base de code en utilisant le graphe de connaissance du répertoire data du projet (.ua/knowledge-graph.json, ou le répertoire legacy .understand-anything/knowledge-graph.json quand celui-ci est présent).

Référence de la structure du graphe

Le JSON du graphe de connaissance a cette structure :

  • project — {name, description, languages, frameworks, analyzedAt, gitCommitHash}
  • nodes[] — chacun a {id, type, name, filePath?, summary, tags[], complexity, languageNotes?}
    • Types de nœuds code : file, function, class, module, concept
    • Types de nœuds non-code : config, document, service, table, endpoint, pipeline, schema, resource
    • Types de nœuds domaine/connaissance : domain, flow, step, article, entity, topic, claim, source
    • Les IDs utilisent le type de nœud comme préfixe, par exemple file:path, function:path:name, config:path, article:path
  • edges[] — chacun a {source, target, type, direction, weight}
    • Types clés : imports, contains, calls, depends_on, configures, documents, deploys, triggers, contains_flow, flow_step, related, cites
  • layers[] — chacun a {id, name, description, nodeIds[]}
  • tour[] — chacun a {order, title, description, nodeIds[]}

Comment lire efficacement

  1. Utilisez Grep pour rechercher dans le JSON les entrées pertinentes AVANT de lire le fichier complet
  2. Lisez uniquement les sections dont vous avez besoin — ne videz pas le graphe entier dans le contexte
  3. Les noms de nœuds et les résumés sont les champs les plus utiles pour comprendre
  4. Les edges vous indiquent comment les composants se connectent — suivez les imports et appels pour les chaînes de dépendances

Instructions

  1. Résolvez le répertoire data $UA_DIR. Exécutez UA_DIR=$([ -d .understand-anything ] && echo .understand-anything || echo .ua) — c'est le répertoire legacy .understand-anything/ quand il existe déjà, sinon le nouveau .ua/. Vérifiez que $UA_DIR/knowledge-graph.json existe à la racine du projet courant. Sinon, demandez à l'utilisateur d'exécuter /understand d'abord.

  2. Vérifiez la fraîcheur du graphe avant d'utiliser le contexte dérivé du graphe :

    • Lisez project.gitCommitHash des métadonnées du graphe comme GRAPH_COMMIT_RAW. Résolvez-le en tant que commit avant de l'utiliser dans tout diff Git, puis comparez-le avec git rev-parse HEAD et inspectez les changements commités et de la working tree du projet à partir de la racine du projet :
      GRAPH_COMMIT=$(git rev-parse --verify --end-of-options "${GRAPH_COMMIT_RAW}^{commit}" 2>/dev/null)
      git rev-parse HEAD
      git diff --name-only "$GRAPH_COMMIT" HEAD -- .
      git diff --cached --name-only -- .
      git diff --name-only -- .
      git ls-files --others --exclude-standard -- .
    • Le pathspec -- . est requis : les commits qui touchent seulement un projet monorepo voisin ne doivent pas rendre ce graphe obsolète. Une discordance de hash seule n'est pas obsolète quand le diff du projet est vide.
    • Ignorez le répertoire data sélectionné (.ua/ ou legacy .understand-anything/) dans la sortie de chaque commande car il contient des artefacts de graphe générés, pas la dérive source du projet.
    • Si le diff commité ou une commande working tree signale des fichiers du projet, avertissez avant de répondre que le contexte dérivé du graphe peut omettre ces changements. Suggérez : Exécutez /understand pour actualiser le graphe.
    • Exécutez le diff de commit uniquement quand GRAPH_COMMIT_RAW se résout avec succès. Si le commit du graphe ou les métadonnées Git sont manquantes, invalides ou indisponibles, donnez un bref avertissement au meilleur effort et continuez au lieu de bloquer.
  3. Lisez uniquement les métadonnées du projet — utilisez Grep ou Read avec une limite de lignes pour extraire juste la section "project" du haut du fichier pour le contexte (name, description, languages, frameworks).

  4. Recherchez les nœuds pertinents — utilisez Grep pour chercher dans le fichier du graphe de connaissance les mots-clés de la requête de l'utilisateur : « $ARGUMENTS »

    • Cherchez dans les champs "name" : grep -i "query_keyword" dans le fichier du graphe
    • Cherchez dans les champs "summary" pour les correspondances sémantiques
    • Cherchez dans les tableaux "tags" pour les correspondances de sujet
    • Notez les valeurs id de tous les nœuds correspondants
  5. Trouvez les edges connectées — pour chaque ID de nœud trouvé, Grep pour cet ID dans la section edges pour trouver :

    • Ce qu'il importe ou dont il dépend (aval)
    • Ce qui l'appelle ou l'importe (amont)
    • Cela vous donne le sous-graphe à 1 saut autour de la requête
  6. Lisez le contexte des couches — Grep pour "layers" pour comprendre à quelles couches architecturales les nœuds correspondants appartiennent.

  7. Répondez à la requête en utilisant uniquement le sous-graphe pertinent :

    • Référencez des fichiers, des fonctions et des relations spécifiques du graphe
    • Expliquez quelles couche(s) sont pertinentes et pourquoi
    • Soyez concis mais complet — liez les concepts aux emplacements réels dans le code
    • Si la requête ne correspond à aucun nœud, dites-le et suggérez des termes connexes du graphe

Skills similaires