Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/DiffEngine.Tests/AiCliDetectorTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,15 @@ public void Props()
var isCursor = AiCliDetector.IsCursor;
var isAider = AiCliDetector.IsAider;
var isClaudeCode = AiCliDetector.IsClaudeCode;
var isGeminiCli = AiCliDetector.IsGeminiCli;
var isCodex = AiCliDetector.IsCodex;
var isAmazonQ = AiCliDetector.IsAmazonQ;
var isOpenCode = AiCliDetector.IsOpenCode;
var isCline = AiCliDetector.IsCline;
var isAugment = AiCliDetector.IsAugment;
var isTraeAi = AiCliDetector.IsTraeAi;
var isGoose = AiCliDetector.IsGoose;
var isAmp = AiCliDetector.IsAmp;

#endregion

Expand Down
57 changes: 56 additions & 1 deletion src/DiffEngine/AiCliDetector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,47 @@ static AiCliDetector()
// https://cursor.com/docs/agent/terminal
IsCursor = variables.Contains("CURSOR_AGENT");

// Gemini CLI
// https://google-gemini.github.io/gemini-cli/docs/tools/shell.html
IsGeminiCli = variables.Contains("GEMINI_CLI");

// OpenAI Codex CLI
IsCodex = variables.Contains("CODEX_SANDBOX");

// Amazon Q Developer CLI
// https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line.html
IsAmazonQ = variables.Contains("Q_TERM");

// OpenCode
IsOpenCode = variables.Contains("OPENCODE_CLIENT");

// Cline
IsCline = variables.Contains("CLINE_ACTIVE");

// Augment Code
IsAugment = variables.Contains("AUGMENT_AGENT");

// TRAE AI
IsTraeAi = variables.Contains("TRAE_AI_SHELL_ID");

// Goose / Amp share the generic AGENT variable, distinguished by value
var agent = Environment.GetEnvironmentVariable("AGENT");
IsGoose = string.Equals(agent, "goose", StringComparison.OrdinalIgnoreCase);
IsAmp = string.Equals(agent, "amp", StringComparison.OrdinalIgnoreCase);

Detected = IsCopilot ||
IsAider ||
IsClaudeCode ||
IsCursor;
IsCursor ||
IsGeminiCli ||
IsCodex ||
IsAmazonQ ||
IsOpenCode ||
IsCline ||
IsAugment ||
IsTraeAi ||
IsGoose ||
IsAmp;
}

public static bool IsCursor { get; set; }
Expand All @@ -36,5 +73,23 @@ static AiCliDetector()

public static bool IsClaudeCode { get; }

public static bool IsGeminiCli { get; }

public static bool IsCodex { get; }

public static bool IsAmazonQ { get; }

public static bool IsOpenCode { get; }

public static bool IsCline { get; }

public static bool IsAugment { get; }

public static bool IsTraeAi { get; }

public static bool IsGoose { get; }

public static bool IsAmp { get; }

public static bool Detected { get; set; }
}
2 changes: 1 addition & 1 deletion src/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<Project>
<PropertyGroup>
<NoWarn>CS1591;CS0649;NU1608;NU1109</NoWarn>
<Version>19.1.3</Version>
<Version>19.2.0</Version>
<AssemblyVersion>1.0.0</AssemblyVersion>
<PackageTags>Testing, Snapshot, Diff, Compare</PackageTags>
<Description>Launches diff tools based on file extensions. Designed to be consumed by snapshot testing libraries.</Description>
Expand Down
Loading