CodeMender suit chaque analyse, vérification et tentative de correction en tant que session avec état, sauvegardée par une base de données SQLite locale (state.db). Vous pouvez inspecter les sessions actives, reprendre les tâches suspendues et exporter des rapports de résultats détaillés.
Gestion de la session
La CLI CodeMender gère les sessions d'exécution avec état localement, ce qui vous permet de suivre les tâches actives, de reprendre les workflows interrompus et d'exporter des rapports de sécurité.
Lister les sessions actives et passées
Exécutez la commande suivante pour lister toutes les sessions, leur état (RUNNING, WAITING_FOR_TOOL, COMPLETED, FAILED, CANCELLED) et les chemins d'accès cibles :
cm session list
Reprendre une session interrompue
Si une session est mise en pause en raison d'une interruption du réseau ou de l'échec d'une étape, reprenez-la à partir de la dernière étape de point de contrôle :
cm session resume SESSION_ID
Vous pouvez transmettre --yes (-y), --sandbox, --allow-all-paths, --allow-all-commands et --bypass-warning à cm session resume pour contrôler les invites de confirmation, le bac à sable et les limites de stratégie pour l'exécution reprise.
Annuler une session en cours d'exécution
Pour mettre fin à une session active et arrêter l'exécution du calcul de l'agent de backend :
cm session cancel SESSION_ID
Afficher les rapports et exporter les correctifs
Affichez les résultats de la session, les états de validation et les détails des correctifs à l'aide de cm report.
Formats de sortie
Tableau des terminaux (par défaut)
Liste récapitulative des résultats.
cm reportRapport HTML
Générer un rapport HTML mis en forme. Utilisez --open (ou -o) pour le lancer automatiquement dans votre navigateur par défaut.
cm report --format html --open
Markdown
Générer un rapport Markdown au format GitHub.
cm report --format md
JSON
Exportez tous les détails des résultats de la session au format JSON brut.
cm report --format json
SARIF
Exportez les résultats au format SARIF standard (v2.1.0) pour les intégrer à d'autres outils de sécurité.
cm report --format sarif
Filtrer et trier les signalements
- Afficher les correctifs de code proposés (
--patches) : incluez les différences unifiées complètes des correctifs générés dans le rapport.bash cm report --patches - Filtrer par niveau de gravité (
--severity) : affichez les résultats correspondant à un niveau (CRITICAL,HIGH,MEDIUM,LOW).bash cm report --severity HIGH - Filtrer par état (
--status) : affichez les résultats correspondant à un état (OPEN,FIXED,DISMISSED,REOPENED).bash cm report --status OPEN - Filtrer par session (
--session) : affichez les résultats d'un préfixe d'ID de session spécifique.cm report --session SESSION_ID_PREFIX
- Afficher les artefacts de l'agent (
--artifacts) : incluez les chemins d'accès aux artefacts d'exécution générés par l'agent (comme les journaux et les scripts d'exploitation).bash cm report --artifacts - Trier les résultats (
--sort) : triez les résultats parseverity(par défaut) outime.bash cm report --sort time - Filtrer par ID de résultat : transmettez un ID de résultat spécifique (ou un préfixe) en tant qu'argument positionnel pour afficher les détails d'un seul résultat.
cm report FINDING_ID_PREFIX
États des résultats de failles
CodeMender suit les résultats dans les états de faille suivants :
OPEN- Signification : la faille a bien été détectée lors d'une analyse (ou importée depuis un outil tiers), mais elle n'a pas encore été vérifiée, corrigée ou marquée comme inactive.
- Comment elle est gérée : il s'agit de l'état initial de toute faille de sécurité nouvellement découverte. Les failles à l'état
OPENsont activement mises en file d'attente pour vérification (cm verify) ou application de correctifs (cm fix).
FIXED- Signification : CodeMender a généré un correctif pour la faille, appliqué le diff à votre codebase local, puis compilé et exécuté des tests de vérification pour prouver que l'exploit ne réussit plus.
- Comment il est géré : une fois qu'il est confirmé qu'un correctif résout le problème sans interrompre la logique de code existante, CodeMender fait passer le résultat à l'état
FIXED. Il restera dans cet état, sauf si une analyse ultérieure détecte une régression.
DISMISSED- Signification : la faille est désignée comme inactive, soit parce qu'elle a été identifiée comme un faux positif ou qu'elle a déjà été corrigée, soit parce que le résultat n'est pas suffisamment fiable pour confirmer qu'elle est exploitable (y compris par rapport au modèle de modélisation des menaces de votre projet, si un tel modèle a été fourni lors du processus d'intégration).
- Comment elle est gérée : marquer un élément comme
DISMISSEDdésactive les futures alertes et exclut le résultat de la sortie de votre CLI active aveccm report --status OPEN. Réexécutercm verifysur un résultat ignoré réexamine ou restaure les éléments ignorés.
REOPENED- Signification : une faille précédemment marquée comme
FIXEDouDISMISSEDa été détectée à nouveau lors d'une analyse ultérieure de la codebase. - Comment elle est gérée : cet état indique une régression (par exemple, une mauvaise fusion Git annulant le correctif) ou l'échec d'une stratégie de correction. Il signale le problème pour une réévaluation immédiate et demande aux développeurs d'examiner le processus d'application des correctifs.
- Signification : une faille précédemment marquée comme
Niveaux de gravité des failles
CodeMender classe les résultats selon les niveaux de gravité suivants :
CRITICAL- Signification : la faille présente un risque immédiat et grave pour votre application ou l'infrastructure sous-jacente, ce qui peut entraîner une compromission complète du système.
- Pourquoi elle est classée comme critique : elle atteint les seuils d'impact à conséquences graves (comme l'exécution de code à distance ou les écritures au niveau racine), est directement accessible depuis des limites non approuvées sans conditions préalables, et est étayée par une analyse de flux de données corrompues de haute confiance ou une démonstration de faisabilité validée exécutée dans le bac à sable de CodeMender.
HIGH- Signification : la faille représente un problème de sécurité grave qui pourrait entraîner un contrôle non autorisé du système, une élévation des privilèges ou une exposition importante des données, mais nécessite des conditions spécifiques pour être exploitée.
- Pourquoi elle est classée comme élevée : bien que l'impact de l'exploitation soit élevé (par exemple, des lectures de base de données arbitraires ou un piratage administratif), l'exploitabilité est légèrement limitée. Il peut nécessiter qu'un pirate informatique dispose d'une authentification utilisateur standard, dépende d'une configuration système spécifique ou nécessite une chaîne d'actions très précise.
MEDIUM- Signification : la faille présente un risque modéré, exposant généralement des données restreintes ou permettant des perturbations localisées, mais elle présente un risque faible pour le système hôte.
- Pourquoi il est classé comme moyen : l'exploit est fortement limité par l'accessibilité ou la complexité. Elle nécessite généralement une interaction active de l'utilisateur (comme cliquer sur un lien malveillant), des privilèges élevés ou des conditions complexes pour contourner les couches de défense, et sa zone d'impact finale est limitée.
LOW- Signification : le résultat représente un risque de sécurité mineur ou un manque général d'hygiène de défense en profondeur qui ne présente pas de menace immédiate en soi.
- Pourquoi elle est classée comme faible : elle présente une exploitabilité extrêmement faible ou un impact minimal. La détection est généralement utilisée par les pirates informatiques pour la reconnaissance ou l'empreinte de configuration plutôt que pour une compromission directe, et elle ne peut pas être utilisée pour exécuter du code arbitraire ou exfiltrer des données d'application sensibles.
Suivre l'utilisation des jetons
CodeMender écrit les journaux de session par appel localement sous ~/.codemender/logs/sessions/. Utilisez cm stats pour inspecter l'utilisation des jetons hors connexion, les taux de succès de cache (hit), le nombre d'interrogations et les durées d'exécution des commandes ou d'une session individuelle sans effectuer d'appels de backend.
- Résumer l'activité récente (
--since) : affichez l'utilisation des jetons regroupée par type de commande sur une période récente (168hpar défaut, ou sept jours).bash cm stats cm stats --since 24h - Inspecter une session spécifique (
--session) : affichez l'utilisation des jetons par tour pour un ID de session ou un préfixe d'ID de session unique, y compris les exécutionscm find --deepetcm find --diffmulti-travailleurs.cm stats --session SESSION_ID_PREFIX
- Exporter au format JSON (
--jsonet--jsonl) : émettez du code JSON en retrait avec--jsonou du code JSON sur une seule ligne avec--jsonlpour l'ingestion de journaux structurés. La sortie JSON inclutmodel(oumodelslorsque plusieurs modèles apparaissent) etteam_id(outeam_idslorsque plusieurs équipes sont agrégées).cm stats --json cm stats --jsonl cm stats --session SESSION_ID_PREFIX --jsonl
- Utilisation des attributs par équipe (
--team-idouCM_TEAM_ID) : définissez un identifiant d'équipe (1 à 63 caractères correspondant à[A-Za-z0-9._-]) lors de l'exécution d'analyses ou de corrections avec l'option--team-id, la variable d'environnementCM_TEAM_IDouteam_iddans~/.codemender/config.yaml. Les sessions exécutées sans équipe configurée restent non attribuées dans la sortie JSONcm stats. Lorsque la fenêtre interrogée ne contient aucun enregistrement de session,--team-id,CM_TEAM_IDouconfig.yamlfournit l'étiquetteteam_idde premier niveau.CM_TEAM_ID=TEAM_ID cm find . cm stats --jsonl
Pour les jobs Cloud Run et les étapes Cloud Build où les fichiers journaux locaux ne sont pas conservés, consultez Exporter la télémétrie des jetons vers Cloud Logging.
Collecter des données de diagnostic pour l'assistance
Si vous contactez l'assistance au sujet d'un problème avec CodeMender, exécutez cm support-bundle pour collecter les données de diagnostic dont l'assistance a besoin dans une seule archive .tar.gz. La commande lit les fichiers locaux et vérifie vos identifiants, votre configuration et votre connexion à CodeMender. Il n'importe rien : vous examinez l'archive et la joignez à votre demande d'assistance.
Pour collecter des données pour des sessions spécifiques, transmettez leurs ID ou préfixes d'ID. Pour trouver les ID de session, exécutez cm session list. Vous pouvez répéter --session :
cm support-bundle --session SESSION_ID
Sans --session, la commande collecte l'activité des 72 dernières heures. Pour modifier la fenêtre, utilisez --since :
cm support-bundle --since 24h
La commande écrit cm-support-bundle-TIMESTAMP.tar.gz dans le répertoire actuel et affiche son chemin d'accès. Pour choisir le chemin d'accès, utilisez --output (ou -o).
Contenu de l'archive
Par défaut, l'archive n'inclut pas le code source, les différences, ni les entrées et sorties des outils. Elle contient les éléments suivants :
- La version de la CLI, le système d'exploitation et la liste des éléments collectés.
CM_*: variables d'environnement, et paramètres de projet et de proxy.- Résultats des vérifications des identifiants, de la configuration et de la connectivité.
- Votre fichier de configuration et votre règle de commande.
- L'état, le modèle et la cible de chaque session sélectionnée.
- Durée par tour, utilisation des jetons, et noms et durées des appels d'outils.
Les données de session peuvent toujours contenir des chemins d'accès aux fichiers et aux répertoires, les arguments de chaque commande cm, les titres des résultats et les messages d'erreur de l'outil.
Si l'assistance vous demande plus de détails, ajoutez --include-content. Cela permet également de collecter les résultats, les correctifs générés et les journaux de débogage de la CLI, qui enregistrent les arguments de chaque appel d'outil. Ces fichiers peuvent contenir du code source de votre dépôt. Examinez donc l'archive avant de la partager.
cm support-bundle --session SESSION_ID --include-content
Dans les deux modes, la commande masque les jetons d'accès, les clés API, les clés privées, les en-têtes d'autorisation et les champs de mot de passe.
Pour ignorer les vérifications des identifiants, de la configuration et de la connectivité, par exemple lorsque vous exécutez la commande sans accès au réseau, utilisez --skip-health.
Maintenance de l'espace de travail
Pour réinitialiser les fichiers de suivi de l'état local et nettoyer les caches d'exécution temporaires, exécutez la commande suivante :
cm clean