Documentation
¶
Overview ¶
Package compliance construit le rapport de conformité à partir du journal d'audit.
Index ¶
- Constants
- func IsMetadataPayload(p json.RawMessage) bool
- func RenderHTML(r Report, reportID string, lang i18n.Lang) ([]byte, error)
- func RenderJSON(r Report, reportID, htmlSHA256 string) ([]byte, error)
- func ReportID(r Report) (string, error)
- type CRA
- type CRAReportStatus
- type Chain
- type Consents
- type Dataset
- type Energy
- type ErrorIncident
- type FileChange
- type Filter
- type HookIssue
- type Incidents
- type Integrity
- type MCPFailure
- type MCPUse
- type MappingRow
- type Memory
- type MemoryForgotten
- type MemoryWrite
- type Options
- type Period
- type PolicyUse
- type ProviderTokens
- type ProviderUse
- type Report
- type RewindUse
- type Scope
- type SessionClient
- type SessionCommands
- type SessionInfo
- type SessionRouting
- type SessionSandbox
- type SessionTimeline
- type SessionTokens
- type SubagentRun
- type Summary
- type TimelineEntry
- type Timestamps
- type TokenCounts
- type Tokens
- type ToolPermissions
- type TurnIncident
- type Unreadable
Constants ¶
const ( LevelFull = "full" LevelMetadata = "metadata" LevelMixed = "mixed" LevelNone = "none" )
Niveaux d'audit détectés sur les lignes retenues.
const Disclaimer = "This report describes the activity recorded by tenon. It is not legal advice and does not certify compliance."
Disclaimer est l'avertissement affiché en tête du rapport (texte exact).
const GitHint = "git log --grep \"AI-Assisted-By\""
GitHint est la commande qui retrouve le code marqué comme généré : le marquage git n'est pas dans le journal.
const SchemaVersion = 1
SchemaVersion est la version du schéma JSON du rapport.
Variables ¶
This section is empty.
Functions ¶
func IsMetadataPayload ¶
func IsMetadataPayload(p json.RawMessage) bool
IsMetadataPayload indique si p est une charge réduite du niveau metadata : un objet avec exactement les clés sha256 (64 hex minuscules) et size (nombre).
func RenderHTML ¶
RenderHTML rend le rapport en une page HTML autonome et imprimable.
func RenderJSON ¶
RenderJSON rend le rapport indenté de deux espaces, dans son enveloppe, avec un saut de ligne final.
Types ¶
type CRA ¶
type CRA struct {
LastScan string `json:"last_scan"`
Open int `json:"open"`
ToVerify int `json:"to_verify"`
Unchecked int `json:"unchecked"`
Conflicts int `json:"conflicts"`
Reports []CRAReportStatus `json:"reports"`
}
CRA est la section « Cyber Resilience Act » : dernier scan de chaque racine de projet (ouvertes, à vérifier, non vérifiés et conflits VEX cumulés, date la plus récente) et signalements. Omise sans événement CRA.
type CRAReportStatus ¶
type CRAReportStatus struct {
ID string `json:"id"`
Kind string `json:"kind"`
Project string `json:"project"`
Step string `json:"step"`
At string `json:"at"`
Overdue bool `json:"overdue"`
OverdueSteps []string `json:"overdue_steps"`
// LateSteps : étapes faites après leur échéance.
LateSteps []string `json:"late_steps"`
// DeadlinesUnknown : aucun événement open dans le journal (échéances incalculables).
DeadlinesUnknown bool `json:"deadlines_unknown"`
}
CRAReportStatus résume un signalement CRA : dernière étape journalisée et retard calculé à la date de l'export (Overdue n'a aucun effet sur le code de sortie).
type Dataset ¶
type Dataset struct {
Filter Filter
Chain Chain
Lines []audit.Line
Unreadable []Unreadable
Sessions map[string]SessionInfo
Level string
// CRALines : événements CRAReport de tout le journal (période ignorée),
// dans le périmètre projet/session : les échéances de signalement ne
// dépendent pas de la période exportée.
CRALines []audit.Line
ExcludedMetadataSessions int
// Timestamps résume les jetons RFC 3161 ; calculé seulement si la chaîne
// est intacte (zéro sinon).
Timestamps audit.TimestampSummary
// contains filtered or unexported fields
}
Dataset est le journal vérifié et filtré.
type Energy ¶ added in v0.8.0
type Energy struct {
Wh float64 `json:"wh"`
GCO2e float64 `json:"gco2e"`
WhPerMTok float64 `json:"wh_per_mtoken"`
GCO2PerKWh float64 `json:"gco2_per_kwh"`
}
Energy est l'énergie et le CO₂ estimés ; présent seulement quand les deux facteurs sont déclarés (jamais de valeur par défaut). Les facteurs utilisés sont enregistrés avec le résultat (ruling R14).
type ErrorIncident ¶
type ErrorIncident struct {
TS time.Time `json:"ts"`
Session string `json:"session"`
Code string `json:"code"`
Message string `json:"message"`
}
ErrorIncident est un événement Error.
type FileChange ¶
type FileChange struct {
TS time.Time `json:"ts"`
Session string `json:"session"`
Path string `json:"path"`
Tool string `json:"tool"`
HashBefore string `json:"hash_before"`
HashAfter string `json:"hash_after"`
Author string `json:"author"`
NoCheckpoint bool `json:"no_checkpoint"`
RewindStatus string `json:"rewind_status,omitempty"`
}
FileChange est une modification de fichier (ToolResult avec path et hash_after). Author vaut "main" ou le nom de l'agent du sous-agent ; RewindStatus est l'état laissé par le dernier rewind ultérieur qui concerne ce fichier.
type Filter ¶
Filter borne le périmètre du rapport. Since et Until sont des minuits UTC ; Until est le dernier jour inclus.
type HookIssue ¶
type HookIssue struct {
TS time.Time `json:"ts"`
Session string `json:"session"`
HookID string `json:"hook_id"`
Event string `json:"event"`
Status string `json:"status"`
Decision string `json:"decision,omitempty"`
Reason string `json:"reason,omitempty"`
}
HookIssue est une exécution de hook notable (bloquée, en erreur, expirée ou qui demande une confirmation).
type Incidents ¶
type Incidents struct {
Errors []ErrorIncident `json:"errors"`
Turns []TurnIncident `json:"turns"`
Unreadable []Unreadable `json:"unreadable"`
}
Incidents regroupe erreurs, tours interrompus et lignes illisibles.
type Integrity ¶
type Integrity struct {
Intact bool `json:"intact"`
Error string `json:"error,omitempty"`
TotalLines int `json:"total_lines"`
FinalHash string `json:"final_hash,omitempty"`
RangeLines int `json:"range_lines"`
FirstHash string `json:"first_hash,omitempty"`
LastHash string `json:"last_hash,omitempty"`
Level string `json:"level"`
// Timestamps : ancrage RFC 3161 de la chaîne (toujours présent).
Timestamps Timestamps `json:"timestamps"`
}
Integrity résume la chaîne entière et la plage exportée.
type MCPFailure ¶
type MCPFailure struct {
Session string `json:"session"`
Server string `json:"server"`
Error string `json:"error"`
TS time.Time `json:"ts"`
}
MCPFailure est une panne de serveur MCP (McpServerDown).
type MCPUse ¶
type MCPUse struct {
ID string `json:"id"`
Jurisdiction string `json:"jurisdiction"`
Country string `json:"country"`
Sessions int `json:"sessions"`
}
MCPUse décrit un serveur MCP actif et le nombre de sessions qui l'ont eu.
type MappingRow ¶
MappingRow relie un élément du rapport aux cadres qu'il aide à documenter.
type Memory ¶ added in v0.8.0
type Memory struct {
Writes []MemoryWrite `json:"writes"`
SensitiveReads int `json:"sensitive_reads"`
Forgotten MemoryForgotten `json:"forgotten"`
Trusted int `json:"trusted"`
}
Memory est la section mémoire du rapport ; omise sans événement mémoire.
type MemoryForgotten ¶ added in v0.8.0
type MemoryForgotten struct {
User int `json:"user"`
Model int `json:"model"`
Expiry int `json:"expiry"`
}
MemoryForgotten compte les suppressions par origine.
type MemoryWrite ¶ added in v0.8.0
type MemoryWrite struct {
Scope string `json:"scope"`
ID string `json:"id"`
Author string `json:"author"`
Sensitive bool `json:"sensitive"`
Redacted bool `json:"redacted"`
}
MemoryWrite : une écriture de mémoire. Ni titre ni contenu : l'événement n'en porte pas.
type Options ¶
type Options struct {
// Redact masque un texte issu du journal ; nil = identité.
Redact func(string) string
// RedactJSON masque un texte JSON chaîne par chaîne une fois décodé (clés
// comprises) ; nil = Redact appliqué à chaque chaîne décodée.
RedactJSON func(string) string
// Details inclut les textes des commandes et la chronologie.
Details bool
// Generator vaut "tenon <version>".
Generator string
// Now est la date de génération.
Now time.Time
// WhPerMTok et GCO2PerKWh : facteurs déclarés ([usage] global) ; l'énergie
// n'est calculée que si les deux sont > 0, jamais par défaut.
WhPerMTok, GCO2PerKWh float64
}
Options règle la construction du rapport.
type PolicyUse ¶
type PolicyUse struct {
ID string `json:"id"`
Version int `json:"version"`
KeyID string `json:"key_id"`
Sessions int `json:"sessions"`
}
PolicyUse compte les sessions placées sous une politique d'organisation (identifiant, version, clé de signature).
type ProviderTokens ¶ added in v0.8.0
type ProviderTokens struct {
ID string `json:"id"`
Model string `json:"model"`
TokenCounts
}
ProviderTokens : tokens d'un fournisseur et modèle (celui qui a répondu).
type ProviderUse ¶
type ProviderUse struct {
ID string `json:"id"`
Name string `json:"name"`
Model string `json:"model"`
Country string `json:"country"`
Jurisdiction string `json:"jurisdiction"`
// Qualifications déclarées (jamais vérifiées par tenon), jamais nil.
Qualifications []string `json:"qualifications"`
Sessions int `json:"sessions"`
First time.Time `json:"first"`
Last time.Time `json:"last"`
}
ProviderUse regroupe les sessions d'un même fournisseur et modèle.
type Report ¶
type Report struct {
Generator string `json:"generator"`
GeneratedAt time.Time `json:"generated_at"`
Period Period `json:"period"`
Scope Scope `json:"scope"`
Details bool `json:"details"`
Disclaimer string `json:"disclaimer"`
Integrity Integrity `json:"integrity"`
ContentAvailable bool `json:"content_available"`
ExcludedMetadataSessions int `json:"excluded_metadata_sessions"`
Summary Summary `json:"summary"`
Providers []ProviderUse `json:"providers"`
Profiles []string `json:"profiles"`
Policies []PolicyUse `json:"policies"`
Consents Consents `json:"jurisdiction_consents"`
WarningSessions []string `json:"jurisdiction_warning_sessions"`
MCPServers []MCPUse `json:"mcp_servers"`
MCPFailures []MCPFailure `json:"mcp_failures"`
Redactions map[string]int `json:"redactions"`
Permissions []ToolPermissions `json:"permissions"`
Files []FileChange `json:"files"`
Commands []SessionCommands `json:"commands"`
Subagents []SubagentRun `json:"subagents"`
Hooks []HookIssue `json:"hooks"`
Rewinds []RewindUse `json:"rewinds"`
Incidents Incidents `json:"incidents"`
Mapping []MappingRow `json:"regulatory_mapping"`
GitHint string `json:"git_marking_hint"`
Timeline []SessionTimeline `json:"timeline,omitempty"`
// Sandbox : isolation des commandes par session ; omis si aucun journal
// de la plage n'en porte (journaux antérieurs au sandbox).
Sandbox []SessionSandbox `json:"sandbox,omitempty"`
// Client : éditeur par session (sessions ACP) ; omis si aucun journal de
// la plage n'en porte.
Client []SessionClient `json:"client,omitempty"`
// Routing : routage par sensibilité des données, par session ; omis si
// aucun journal de la plage n'en porte.
Routing []SessionRouting `json:"routing,omitempty"`
// Tokens : tokens mesurés, part estimée, économies de la vue et énergie
// (facteurs déclarés seulement) ; omis si aucun journal ne porte d'Usage.
Tokens *Tokens `json:"tokens,omitempty"`
// CRA : suivi du Cyber Resilience Act (scans et signalements) ; omis
// sans événement CRA. Les échéances dépassées sont signalées sans
// changer le code de sortie.
CRA *CRA `json:"cra,omitempty"`
// Memory : écritures, lectures sensibles, suppressions et approbations de
// la mémoire gouvernée ; omis sans événement mémoire.
Memory *Memory `json:"memory,omitempty"`
}
Report est le modèle pur du rapport ; ses balises JSON forment le schéma stable.
func Build ¶
Build construit le rapport à partir du journal chargé. Pure : ne lit rien d'autre que ds. Les tranches ne sont jamais nil, la carte non plus.
func (Report) RoutingViolation ¶
RoutingViolation indique si une session viole le routage (code de sortie 2).
type RewindUse ¶
type RewindUse struct {
TS time.Time `json:"ts"`
Session string `json:"session"`
ToSeq uint64 `json:"to_seq"`
Mode string `json:"mode"`
Restored int `json:"restored"`
Deleted int `json:"deleted"`
Kept int `json:"kept"`
Skipped int `json:"skipped"`
Failed int `json:"failed"`
Unchanged int `json:"unchanged"`
UntrackedCalls int `json:"untracked_calls"`
}
RewindUse est un rewind et son bilan par état de fichier.
type Scope ¶
type Scope struct {
Kind string `json:"kind"`
Project string `json:"project,omitempty"`
Session string `json:"session,omitempty"`
}
Scope est le périmètre : Kind vaut "project", "all" ou "session".
type SessionClient ¶ added in v0.9.0
type SessionClient struct {
Session string `json:"session"`
Name string `json:"name"`
Version string `json:"version"`
Transport string `json:"transport,omitempty"`
}
SessionClient est l'éditeur qui a piloté une session.
type SessionCommands ¶
type SessionCommands struct {
Session string `json:"session"`
Count int `json:"count"`
Commands []string `json:"commands,omitempty"`
}
SessionCommands compte les appels shell d'une session ; Commands n'est rempli qu'avec Details.
type SessionInfo ¶
type SessionInfo struct {
// Started est le premier SessionStarted (nil au niveau metadata ou s'il est absent).
Started *event.SessionStartedPayload
}
SessionInfo regroupe ce que le journal dit d'une session.
type SessionRouting ¶
type SessionRouting struct {
Session string `json:"session"`
Sensitive bool `json:"sensitive"`
Reason string `json:"reason,omitempty"`
Providers []string `json:"providers"`
Fallbacks int `json:"fallbacks"`
Violation bool `json:"violation"`
}
SessionRouting résume le routage d'une session : sensible ou non, motif du classement, fournisseurs par ordre de première utilisation, nombre de replis. Violation signale un fournisseur non local atteint après le classement (ou une session sensible démarrée à distance sans routage).
type SessionSandbox ¶
type SessionSandbox struct {
Session string `json:"session"`
Mode string `json:"mode"`
Mechanism string `json:"mechanism"`
Network string `json:"network"`
Unconfined int `json:"unconfined"`
WithNetwork int `json:"with_network"`
}
SessionSandbox résume l'isolation des commandes shell d'une session. Unconfined compte les résultats shell non confinés ; WithNetwork compte les résultats shell confinés qui avaient le réseau (les deux compteurs ne se recouvrent donc jamais).
type SessionTimeline ¶
type SessionTimeline struct {
Session string `json:"session"`
Entries []TimelineEntry `json:"entries"`
}
SessionTimeline est la chronologie d'une session (Details seulement).
type SessionTokens ¶ added in v0.8.0
type SessionTokens struct {
Session string `json:"session"`
TokenCounts
}
SessionTokens : tokens d'une session (sous-agents et compaction compris).
type SubagentRun ¶
type SubagentRun struct {
TS time.Time `json:"ts"`
Session string `json:"session"`
CallID string `json:"call_id"`
Agent string `json:"agent"`
Status string `json:"status"`
}
SubagentRun est une exécution de sous-agent.
type Summary ¶
type Summary struct {
Sessions int `json:"sessions"`
Turns int `json:"turns"`
ToolCalls int `json:"tool_calls"`
FilesModified int `json:"files_modified"`
Denials int `json:"denials"`
Jurisdictions []string `json:"jurisdictions"`
// UnknownProviderSessions compte les sessions de la plage dont le
// fournisseur est inconnu (premier SessionStarted réduit ou absent) : leurs
// fournisseurs et juridictions manquent aux comptes.
UnknownProviderSessions int `json:"unknown_provider_sessions"`
}
Summary donne les comptes principaux ; Jurisdictions liste les juridictions distinctes des fournisseurs, triées.
type TimelineEntry ¶
type TimelineEntry struct {
TS time.Time `json:"ts"`
Kind string `json:"kind"`
Tool string `json:"tool,omitempty"`
Text string `json:"text"`
}
TimelineEntry est une entrée de la chronologie.
type Timestamps ¶
type Timestamps struct {
Count int `json:"count"`
Valid int `json:"valid"`
LastFile string `json:"last_file,omitempty"`
LastLine int `json:"last_line,omitempty"`
LastTime string `json:"last_time,omitempty"`
TSA string `json:"tsa,omitempty"`
LinesAfter int `json:"lines_after"`
Errors []string `json:"errors"`
}
Timestamps résume les jetons d'horodatage RFC 3161. LastTime est en RFC 3339 UTC ; Errors n'est jamais nil.
type TokenCounts ¶ added in v0.8.0
type TokenCounts struct {
Input int `json:"input"`
Output int `json:"output"`
Cached int `json:"cached"`
Saved int `json:"saved"`
}
TokenCounts regroupe les tokens d'un périmètre. EstimatedShare est la part (0 à 1) d'entrée + sortie qui vient d'estimations et non du fournisseur ; Saved est un indicateur estimé : la somme des économies estimées inscrites à chaque changement de la vue (ContextShaped), pas un total sur toutes les requêtes.
type Tokens ¶ added in v0.8.0
type Tokens struct {
Total TokenCounts `json:"total"`
Sessions []SessionTokens `json:"sessions"`
Providers []ProviderTokens `json:"providers"`
Energy *Energy `json:"energy,omitempty"`
}
Tokens est la section tokens du rapport ; omise sans événement Usage.
type ToolPermissions ¶
type ToolPermissions struct {
Tool string `json:"tool"`
Requested int `json:"requested"`
AllowedOnce int `json:"allowed_once"`
AllowedSession int `json:"allowed_session"`
DeniedUser int `json:"denied_user"`
DeniedPolicy int `json:"denied_policy"`
DeniedHook int `json:"denied_hook"`
// DeniedClassification : appels refusés par la classification (donnée
// classée sans fournisseur local).
DeniedClassification int `json:"denied_classification"`
}
ToolPermissions compte les demandes et décisions de permission d'un outil.
type TurnIncident ¶
type TurnIncident struct {
TS time.Time `json:"ts"`
Session string `json:"session"`
Reason string `json:"reason"`
}
TurnIncident est un tour terminé pour une raison notable.
type Unreadable ¶
type Unreadable struct {
File string `json:"file"`
Line int `json:"line"`
Error string `json:"error"`
}
Unreadable désigne une ligne du journal qui n'a pas pu être lue.