Skip to content
Tracon

ITraconBuilder

Namespace Tracon · Assembly Tracon.Core.dll

The fluent chain that configures Tracon. Returned from the AddTracon call.

public interface ITraconBuilder
Extension Methods
TraconBuilderExtensions.AddAgent(ITraconBuilder, AgentDefinition), TraconBuilderExtensions.AddAgent(ITraconBuilder, string, Func<IServiceProvider, AIAgent>, string?), TraconBuilderExtensions.AddAgentDecorator<TDecorator>(ITraconBuilder), TraconBuilderExtensions.AddAgentDecorator(ITraconBuilder, IAgentDecorator), TraconBuilderExtensions.AddAgentDecorator(ITraconBuilder, Func<IServiceProvider, IAgentDecorator>), TraconBuilderExtensions.AddAgentExtension<TExtension>(ITraconBuilder), TraconBuilderExtensions.AddAgentExtension(ITraconBuilder, IAgentExtension), TraconBuilderExtensions.AddAgentExtension(ITraconBuilder, string, Action<AgentExtensionContext>, string?), TraconBuilderExtensions.AddAgentSource<TSource>(ITraconBuilder), TraconBuilderExtensions.AddAgentSource(ITraconBuilder, IAgentSource), TraconBuilderExtensions.AddAgentSource(ITraconBuilder, Func<IServiceProvider, IAgentSource>), TraconClientToolExtensions.AddClientTool(ITraconBuilder, string, string, JsonElement), TraconContentGuardBuilderExtensions.AddContentGuard<TGuard>(ITraconBuilder), TraconContentGuardBuilderExtensions.AddContentGuard(ITraconBuilder, IContentGuard), TraconContentGuardBuilderExtensions.AddContentGuard(ITraconBuilder, Func<IServiceProvider, IContentGuard>), TraconContentProtectionExtensions.AddContentProtection(ITraconBuilder, Action<TraconContentProtectionOptions>?), TraconContentProtectionExtensions.AddContentProtection<TProtector>(ITraconBuilder), TraconBuilderExtensions.AddEvalCheck(ITraconBuilder, string, EvalCheck), TraconOnlineEvaluationBuilderExtensions.AddEvalEvaluatorFactory<TFactory>(ITraconBuilder), TraconOnlineEvaluationBuilderExtensions.AddEvalEvaluatorFactory(ITraconBuilder, IEvalEvaluatorFactory), TraconOnlineEvaluationBuilderExtensions.AddEvaluatorJudge(ITraconBuilder, string, IEvaluator), TraconOnlineEvaluationBuilderExtensions.AddEvaluatorJudge(ITraconBuilder, string, IEvaluator, Action<ModelRunJudgeOptions>), TraconBuilderExtensions.AddHostedTool(ITraconBuilder, string, HostedToolKind, Func<HostedToolContext, AITool>, string?), TraconBuilderExtensions.AddLoopEvaluator(ITraconBuilder, string, LoopEvaluator), TraconBuilderExtensions.AddLoopEvaluator(ITraconBuilder, string, LoopEvaluator, string?), TraconBuilderExtensions.AddLoopEvaluator(ITraconBuilder, string, Func<IServiceProvider, LoopEvaluator>), TraconBuilderExtensions.AddLoopEvaluator(ITraconBuilder, string, Func<IServiceProvider, LoopEvaluator>, string?), TraconBuilderExtensions.AddModelProvider<TProvider>(ITraconBuilder), TraconBuilderExtensions.AddModelProvider(ITraconBuilder, IModelProvider), TraconBuilderExtensions.AddModelProvider(ITraconBuilder, Func<IServiceProvider, IModelProvider>), TraconOnlineEvaluationBuilderExtensions.AddModelRunJudge(ITraconBuilder, Action<ModelRunJudgeOptions>), TraconContentGuardBuilderExtensions.AddPatternContentGuard(ITraconBuilder, Action<PatternContentGuardOptions>?), TraconBuilderExtensions.AddRunJudge<TJudge>(ITraconBuilder), TraconBuilderExtensions.AddRunJudge(ITraconBuilder, IRunJudge), TraconBuilderExtensions.AddRunJudge(ITraconBuilder, Func<IServiceProvider, IRunJudge>), TraconBuilderExtensions.AddScopedTool(ITraconBuilder, AIFunction, Action<ToolRegistrationOptions>), TraconBuilderExtensions.AddScopedTool(ITraconBuilder, AIFunction), TraconBuilderExtensions.AddSkill(ITraconBuilder, AgentSkillDefinition), TraconBuilderExtensions.AddSpeechSynthesizer(ITraconBuilder, string, Func<IServiceProvider, ISpeechSynthesizer>), TraconBuilderExtensions.AddSpeechSynthesizer(ITraconBuilder, string, TextToSpeechClientBinding), TraconBuilderExtensions.AddSpeechTranscriber(ITraconBuilder, string, Func<IServiceProvider, ISpeechTranscriber>), TraconBuilderExtensions.AddSpeechTranscriber(ITraconBuilder, string, SpeechToTextClientBinding), TraconBuilderExtensions.AddTool(ITraconBuilder, AIFunction, Action<ToolRegistrationOptions>), TraconBuilderExtensions.AddTool(ITraconBuilder, AIFunction), TraconBuilderExtensions.AddTool(ITraconBuilder, Delegate, string?, string?, Action<ToolRegistrationOptions>?), TraconToolApprovalPolicyExtensions.AddToolApprovalPolicy(ITraconBuilder, string, Func<ToolApprovalContext, ToolApprovalPolicyDecision>), TraconBuilderExtensions.AddToolsFrom<T>(ITraconBuilder), TraconBuilderExtensions.AddToolsFrom(ITraconBuilder, Type), TraconBuilderExtensions.Configure(ITraconBuilder, Action<TraconOptions>), TraconBuilderExtensions.RequireCustomBinding<T>(ITraconBuilder), TraconBuilderExtensions.RequireProductionProfile(ITraconBuilder, Action<TraconProductionProfileOptions>?), TraconBuilderConversationMemoryExtensions.UseConversationMemory(ITraconBuilder, Action<TraconConversationMemoryOptions>), LiveVoiceBuilderExtensions.UseLiveVoice(ITraconBuilder, IConfiguration), LiveVoiceBuilderExtensions.UseLiveVoice(ITraconBuilder), LiveVoiceBuilderExtensions.UseLiveVoice(ITraconBuilder, Action<VoiceLiveOptions>), TraconSkillScriptBuilderExtensions.UseSkillScripts(ITraconBuilder, Action<TraconSkillScriptOptions>), VoiceConversationBuilderExtensions.UseVoiceConversation(ITraconBuilder, IConfiguration), VoiceConversationBuilderExtensions.UseVoiceConversation(ITraconBuilder), VoiceConversationBuilderExtensions.UseVoiceConversation(ITraconBuilder, Action<VoiceConversationOptions>)

The chain carries only ITraconBuilder.Services. Every registration capability is an extension method: Tracon’s own live in TraconBuilderExtensions, and provider and storage packages add theirs (UsePostgreSql, UseOpenAI, and so on).

AddTracon returns Tracon’s implementation, and this interface is for calling, not for implementing in an application. The one other implementation it is meant for is a test double: a chain of your own only has to supply ITraconBuilder.Services, and the extension methods run the same way against it.

The underlying service collection.

IServiceCollection Services { get; }

IServiceCollection

The escape hatch: anything Tracon does not model is registered here. Every Tracon service is registered with TryAdd, so registration ORDER decides who wins, and the two seam shapes behave differently.

For a single-instance seam (for example ITenantContext): a registration made before AddTracon wins outright, and only one registration remains. A registration made after AddTracon also wins for a direct resolve, but Tracon’s own registration is not removed - it stays behind as a second, unused entry.

For a multi-registration seam (for example IAgentDecorator): a registration made before AddTracon joins the list alongside the built-in ones. A registration made after AddTracon also joins the list - the built-in implementation keeps running too, which is a real behavior difference from the single-instance case above.

// Runs before AddTracon(), so this registration wins outright.
builder.Services.AddSingleton(new OrderGateway());
builder.AddTracon();