Help us shape the future of Go! Take the 2026 Go Developer Survey

config

package
v0.9.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 28, 2026 License: EUPL-1.2 Imports: 18 Imported by: 0

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

Constants

This section is empty.

Variables

This section is empty.

Functions

func DataDir

func DataDir(getenv func(string) string) string

DataDir : $XDG_DATA_HOME/tenon, sinon $HOME/.local/share/tenon.

func GlobalPath

func GlobalPath(getenv func(string) string) string

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

func ValidMCPID(id string) bool

ValidMCPID indique si id est un identifiant de serveur MCP valide.

func ValidateMCPCommand added in v0.9.0

func ValidateMCPCommand(id string, command []string) error

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

func ValidateMCPURL(id, raw string) error

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

type Budget struct {
	SessionTokens int64   `toml:"session_tokens"`
	WarnAt        float64 `toml:"warn_at"`
}

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

type Classification struct {
	Paths   []string `toml:"paths"`
	Markers []string `toml:"markers"`
}

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

func ApplyPolicy(cfg Config, pol *orgpolicy.Policy) (Config, error)

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 Defaults

func Defaults(getenv func(string) string) Config

Defaults renvoie la configuration par défaut, préréglages inclus.

func Load

func Load(globalPath, projectPath string, getenv func(string) string) (Config, error)

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

func (c Config) ClassifyRules() classify.Rules

ClassifyRules renvoie les règles de classification de la configuration.

func (Config) Provider

func (c Config) Provider(id string) (Provider, bool)

Provider renvoie le fournisseur d'identifiant id.

func (Config) TimestampRoots added in v0.7.0

func (c Config) TimestampRoots() (*x509.CertPool, string, error)

TimestampRoots renvoie les racines de confiance de l'autorité d'horodatage et leur origine : "policy" (CAPEM) > "ca_file" > "system" (pool nil).

type Duration

type Duration struct{ time.Duration }

Duration encapsule time.Duration pour le décodage TOML ("2m").

func (*Duration) UnmarshalText

func (d *Duration) UnmarshalText(b []byte) error

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 MCP

type MCP struct {
	Servers []MCPServer `toml:"servers"`
}

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).

func (Memory) Days added in v0.8.0

func (m Memory) Days() int

Days : durée de conservation effective, en jours.

func (Memory) On added in v0.8.0

func (m Memory) On() bool

On : la mémoire est active.

func (Memory) ProjectOn added in v0.8.0

func (m Memory) ProjectOn() bool

ProjectOn : les entrées du dépôt sont lues et écrites.

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"`
}

func (Provider) Window

func (p Provider) Window() int

Window renvoie la fenêtre de contexte du fournisseur, ou 32000 si non renseignée.

type ProviderAllowlist added in v0.7.0

type ProviderAllowlist struct {
	Hosts []string `toml:"hosts"`
	Local bool     `toml:"local"`
}

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 RedactionRule struct {
	Name    string `toml:"name"`
	Pattern string `toml:"pattern"`
}

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).

type Sandbox added in v0.7.0

type Sandbox struct {
	Mode     string   `toml:"mode"`
	Write    []string `toml:"write"`
	DenyRead []string `toml:"deny_read"`
}

Sandbox : [sandbox]. Mode : "auto" (défaut) | "required" | "off".

type Usage added in v0.8.0

type Usage struct {
	WhPerMTok  float64 `toml:"wh_per_mtoken"`
	GCO2PerKWh float64 `toml:"gco2_per_kwh"`
}

Usage : [usage]. Facteurs déclarés par l'utilisateur, 0 = non déclaré.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL