Documentation
¶
Overview ¶
Package config charge la configuration globale et projet (TOML).
La configuration projet est une frontière de sécurité : un dépôt malveillant ne doit pouvoir ni assouplir les permissions ni rediriger le trafic vers un autre fournisseur.
Index ¶
- func DataDir(getenv func(string) string) string
- func GlobalPath(getenv func(string) string) string
- func PresetKeyEnvs() []string
- func ValidMCPID(id string) bool
- func ValidateMCPCommand(id string, command []string) error
- func ValidateMCPURL(id, raw string) error
- type ACP
- type Audit
- type AuditTimestamp
- type Budget
- type CRA
- type Checkpoints
- type Classification
- type Config
- type Duration
- type Hooks
- type MCP
- type MCPServer
- type Memory
- type Permissions
- type Provider
- type ProviderAllowlist
- type Redaction
- type RedactionRule
- type Routing
- type Rule
- type Sandbox
- type Usage
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GlobalPath ¶
GlobalPath : $XDG_CONFIG_HOME/tenon/config.toml, sinon $HOME/.config/tenon/config.toml.
func PresetKeyEnvs ¶ added in v0.7.0
func PresetKeyEnvs() []string
PresetKeyEnvs renvoie les variables de clé de tous les préréglages, même redéfinis par la configuration : l'environnement des commandes confinées ne les transmet jamais.
func ValidMCPID ¶ added in v0.9.0
ValidMCPID indique si id est un identifiant de serveur MCP valide.
func ValidateMCPCommand ¶ added in v0.9.0
ValidateMCPCommand contrôle la commande d'un serveur MCP stdio : présente, chemin absolu ou nom nu (cherché dans PATH).
func ValidateMCPURL ¶ added in v0.9.0
ValidateMCPURL contrôle l'URL d'un serveur MCP http : https (ou http vers l'hôte local), sans identifiants, requête ni fragment.
Types ¶
type ACP ¶ added in v0.9.0
type ACP struct {
AcceptEditorMCP bool `toml:"accept_editor_mcp"`
}
ACP : [acp]. AcceptEditorMCP : accepter les serveurs MCP transmis par l'éditeur (false par défaut ; la politique ne peut que le forcer à false).
type Audit ¶
type Audit struct {
Level string `toml:"level"`
Timestamp *AuditTimestamp `toml:"timestamp"` // globale uniquement
}
type AuditTimestamp ¶ added in v0.7.0
type AuditTimestamp struct {
URL string `toml:"url"`
CAFile string `toml:"ca_file"`
CAPEM []byte `toml:"-"`
}
AuditTimestamp configure l'horodatage RFC 3161 du journal d'audit. CAPEM vient de la politique d'organisation, jamais du TOML.
type Budget ¶ added in v0.8.0
Budget : [budget]. SessionTokens : plafond entrée + sortie par session (0 = aucun). WarnAt : fraction qui déclenche l'avis (0,8 par défaut dès qu'un plafond existe).
type CRA ¶ added in v0.7.0
type CRA struct {
OSVMirror string `toml:"osv_mirror"`
}
CRA : [cra]. OSVMirror : miroir des archives OSV (https, ou http vers un hôte local) ; vide = base publique.
type Checkpoints ¶ added in v0.6.0
type Checkpoints struct {
RetentionDays int `toml:"retention_days"`
}
Checkpoints règle la rétention des copies. 0 désactive les copies.
type Classification ¶ added in v0.7.0
Classification : [classification]. Les listes s'additionnent (global, projet, politique) ; rien ne peut en retirer.
type Config ¶
type Config struct {
Lang string `toml:"lang"`
DefaultProvider string `toml:"default_provider"`
MaxIterations int `toml:"max_iterations"`
ShellTimeout Duration `toml:"shell_timeout"`
OutputLimit int `toml:"output_limit"`
// CompactionThreshold : part de la fenêtre de contexte au-delà de
// laquelle l'historique est compacté. Clé globale uniquement.
CompactionThreshold float64 `toml:"compaction_threshold"`
Audit Audit `toml:"audit"`
Providers []Provider `toml:"providers"`
Permissions Permissions `toml:"permissions"`
Redaction Redaction `toml:"redaction"`
// MCP : serveurs MCP. Clé globale uniquement (un serveur stdio est une
// exécution de code arbitraire : un dépôt ne peut pas en déclarer).
MCP MCP `toml:"mcp"`
// Hooks : réglages des hooks. Clé globale uniquement (un hook est une
// exécution de code arbitraire : un dépôt ne peut pas les activer).
Hooks Hooks `toml:"hooks"`
// Checkpoints : copies des fichiers avant écriture (/rewind). Clé globale
// uniquement.
Checkpoints Checkpoints `toml:"checkpoints"`
// Sandbox : confinement des commandes shell. Mode effectif et listes
// fusionnées (chemins développés) après Load ; write est global uniquement.
Sandbox Sandbox `toml:"sandbox"`
// Classification : chemins et marqueurs sensibles, union global + projet
// + politique après Load.
Classification Classification `toml:"classification"`
// Routing : acheminement des sessions sensibles. Clé globale uniquement.
Routing Routing `toml:"routing"`
// Budget : plafond de tokens par session. Effectif après Load : le plus
// bas du global, du projet et de la politique.
Budget Budget `toml:"budget"`
// Memory : mémoire gouvernée. Effectif après Load : le plus strict du
// global, du projet et de la politique.
Memory Memory `toml:"memory"`
// MemoryDisabledBy : "policy" si la politique coupe la mémoire, sinon
// "config" si le global ou le projet la coupe, sinon "".
MemoryDisabledBy string `toml:"-"`
// Usage : facteurs énergie et CO₂ déclarés. Clé globale uniquement.
Usage Usage `toml:"usage"`
// ACP : [acp], tenon comme agent d'éditeur. Clé globale uniquement.
ACP ACP `toml:"acp"`
// CRA : assistant Cyber Resilience Act. Clé globale uniquement.
CRA CRA `toml:"cra"`
// Profile : profil de conformité effectif après Load (le plus strict du
// global et du projet). Le projet peut seulement le durcir.
Profile profile.Name `toml:"profile"`
// WeakerProjectProfile : valeur projet ignorée car plus faible que le
// profil global. Jamais lue depuis le TOML ; le CLI en tire un avis.
WeakerProjectProfile profile.Name `toml:"-"`
// Allowlist : liste blanche d'hôtes de fournisseurs de la config globale
// (nil si absente). ProjectAllowlist : celle du projet, qui ne peut que
// restreindre (les listes présentes s'appliquent toutes).
Allowlist *ProviderAllowlist `toml:"provider_allowlist"`
ProjectAllowlist *ProviderAllowlist `toml:"-"`
// Policy : politique d'organisation appliquée (nil si aucune). Posée par
// ApplyPolicy, jamais lue depuis le TOML.
Policy *orgpolicy.Policy `toml:"-"`
// Avis produits par ApplyPolicy, jamais lus depuis le TOML.
PolicyOverriddenProviders []string `toml:"-"` // fournisseurs de la config remplacés par la politique
PolicyAuditFrom string `toml:"-"` // niveau d'audit remplacé ("" si inchangé)
PolicyTimestampImposed bool `toml:"-"` // horodatage de la config remplacé par la politique
PolicyRoutingLocal string `toml:"-"` // fournisseur local imposé par la politique ("" si inchangé)
PolicyRaisedProfile profile.Name `toml:"-"` // profil de la config relevé par la politique
// PolicyStrippedQualifications : identifiants (triés) dont les
// qualifications de la config ont été retirées par la politique.
PolicyStrippedQualifications []string `toml:"-"`
// contains filtered or unexported fields
}
func ApplyPolicy ¶ added in v0.7.0
ApplyPolicy applique la politique d'organisation comme plancher : elle ne fait que durcir la configuration déjà fusionnée. pol == nil renvoie cfg inchangée. Le filtrage MCP et la liste blanche d'hôtes ne sont pas appliqués ici (démarrage et moteur).
func Load ¶
Load fusionne défauts, configuration globale puis configuration projet. Un fichier absent est ignoré.
func LoadPolicy ¶ added in v0.7.0
func LoadPolicy(globalPath, projectPath string, getenv func(string) string, pol *orgpolicy.Policy) (Config, error)
LoadPolicy charge la configuration comme Load puis applique la politique pol (nil : aucune). Le fournisseur par défaut n'est contrôlé qu'après la politique : il peut être l'un de ses providers.define.
func (Config) ClassifyRules ¶ added in v0.7.0
ClassifyRules renvoie les règles de classification de la configuration.
type Duration ¶
Duration encapsule time.Duration pour le décodage TOML ("2m").
func (*Duration) UnmarshalText ¶
type Hooks ¶ added in v0.5.0
type Hooks struct {
ClaudeSettings bool `toml:"claude_settings"` // lit aussi ~/.claude/settings.json
Disabled bool `toml:"disabled"` // ne charge aucun hook
}
Hooks règle le chargement des hooks utilisateur.
type MCPServer ¶
type MCPServer struct {
ID string `toml:"id"` // [a-z0-9_-]{1,32}
Transport string `toml:"transport"` // "stdio" | "http"
Command []string `toml:"command"` // stdio : argv, non vide
EnvFrom []string `toml:"env_from"` // stdio : variables transmises au serveur
URL string `toml:"url"` // http : https://… (http:// seulement vers localhost/127.0.0.1/::1)
BearerEnv string `toml:"bearer_env"` // http : variable contenant le jeton
Jurisdiction string `toml:"jurisdiction"` // "eu" | "non-eu" | "local"
Country string `toml:"country"`
Risk string `toml:"risk"` // "" | "read" | "write" | "exec" | "network"
Tools []string `toml:"tools"` // liste blanche optionnelle des outils exposés
Disabled bool `toml:"disabled"`
// Qualifications : qualifications déclarées (« secnumcloud »). Déclaratif,
// jamais vérifié ; ignoré sous politique d'organisation.
Qualifications []string `toml:"qualifications"`
}
MCPServer déclare un serveur MCP. Aucun secret : variables référencées par nom.
type Memory ¶ added in v0.8.0
type Memory struct {
Enabled *bool `toml:"enabled"`
Project *bool `toml:"project"`
RetentionDays int `toml:"retention_days"`
}
Memory : [memory]. Enabled et Project : nil = actif. RetentionDays : durée de conservation des entrées user et global (0 = 90 jours).
type Permissions ¶
type Permissions struct {
Rules []Rule `toml:"rules"`
}
type Provider ¶
type Provider struct {
ID string `toml:"id"`
Name string `toml:"name"`
BaseURL string `toml:"base_url"`
APIKeyEnv string `toml:"api_key_env"`
Model string `toml:"model"`
Country string `toml:"country"`
Jurisdiction string `toml:"jurisdiction"`
ContextWindow int `toml:"context_window"`
// Detect : "ollama" ou "vllm" pour interroger le serveur au démarrage
// (modèle servi, fenêtre appliquée) quand model ou context_window est
// vide ; "off" désactive la détection héritée d'un préréglage.
Detect string `toml:"detect"`
// Qualifications : qualifications déclarées (« secnumcloud »). Déclaratif,
// jamais vérifié ; ignoré sous politique d'organisation (sauf define).
Qualifications []string `toml:"qualifications"`
// StreamUsage : false n'envoie pas stream_options.include_usage ; absent
// : vrai (l'usage réel est demandé au fournisseur).
StreamUsage *bool `toml:"stream_usage"`
}
type ProviderAllowlist ¶ added in v0.7.0
ProviderAllowlist restreint les hôtes des fournisseurs. Local admet les hôtes locaux (profile.IsLocalHost).
type Redaction ¶
type Redaction struct {
Rules []RedactionRule `toml:"rules"`
}
type RedactionRule ¶
type Routing ¶ added in v0.7.0
type Routing struct {
Local string `toml:"local"`
Fallback []string `toml:"fallback"`
// Compaction et Subagents : fournisseur des appels de compaction et des
// sous-agents ("" = fournisseur de la session).
Compaction string `toml:"compaction"`
Subagents string `toml:"subagents"`
}
Routing : [routing]. Local : fournisseur de juridiction « local » qui reçoit les sessions sensibles ; Fallback : fournisseurs de repli.
type Rule ¶
type Rule struct {
Tool string `toml:"tool"`
Match string `toml:"match"`
Decision string `toml:"decision"`
Project bool `toml:"-"`
Policy bool `toml:"-"` // règle imposée par la politique d'organisation
// Network : la commande shell correspondante s'exécute avec réseau
// (allow ou ask ; jamais en config projet ni en politique).
Network bool `toml:"network"`
}
Rule.Decision : "allow" | "ask" | "deny". Project est posé au chargement pour les règles de la config projet (jamais lu depuis le TOML).