blob: f4679b461bb0eca6aa2c39bb0b50bc3a3b3916b7 [file]
// Copyright 2026 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Package agents provides utilities to detect if the current process is running
// within an automated AI/agent environment.
package agents
import (
_ "embed"
"os"
"strings"
)
//go:embed agents.txt
var agentsTxt string
var bakedAgentVars []string
func init() {
// Parse the embedded agents.txt content at startup.
for _, line := range strings.Split(agentsTxt, "\n") {
line = strings.TrimSpace(line)
if line == "" || strings.HasPrefix(line, "#") {
continue
}
// Strip inline comments.
parts := strings.SplitN(line, "#", 2)
val := strings.TrimSpace(parts[0])
if val != "" {
bakedAgentVars = append(bakedAgentVars, val)
}
}
}
// envLookup functions return the value of the environment variable and whether it is set.
type envLookup func(string) (string, bool)
// IsAgentEnv checks if the current environment indicates an AI agent.
func IsAgentEnv() bool {
return isAgentEnvWithLookup(os.LookupEnv)
}
// isAgentEnvWithLookup checks if the environment (via lookup) indicates an AI agent.
func isAgentEnvWithLookup(lookup envLookup) bool {
for _, v := range bakedAgentVars {
if val, ok := lookup(v); ok && val != "" {
return true
}
}
return false
}