const std = @import("std");const config_runtime = @import("../config/config_runtime.zig");const devbox_executor = @import("../execution/devbox_executor.zig");const background_process_provider = @import( "../execution/background_process_provider.zig",);const gateway_provider = @import("../gateway/gateway_provider.zig");const host = @import("../hosts/host.zig");const mode_registry = @import("../modes/mode_registry.zig");const permission_auto_classifier = @import("../permissions/auto_classifier.zig");const prompt_policy = @import("../config/prompt_policy.zig");const context_contract = @import("../workspace/context_contract.zig"); const Allocator = std.mem.Allocator; pub const Config = struct { default_model: []const u8, default_agent_step_limit: usize, gateway_retry_count: usize, gateway_chat_url: []const u8, gateway_models_path: []const u8, gateway_provider: gateway_provider.Provider, background_process_provider: background_process_provider.Provider = background_process_provider.unavailable_provider, secret_store: host.SecretStore, prompt_policy: prompt_policy.Policy, ignored_list_entries: []const []const u8, max_list_entries: usize, max_read_file_bytes: usize, max_read_file_lines: usize, max_read_file_line_len: usize, max_command_output_bytes: usize, max_tool_result_bytes: usize, max_history_turns: usize, context_registry: context_contract.Registry, mode_registry: mode_registry.Registry, devbox_provider: ?devbox_executor.Provider = null, permission_reviewer_provider: ?permission_auto_classifier.Provider = null, model_override: ?[]const u8 = null, credential_override: ?[]const u8 = null, home_override: ?[]const u8 = null, workspace_root_override: ?[]const u8 = null, log_file: ?[]const u8 = null, context_limit_overrides: []const config_runtime.context_limits.Override = &.{}, additional_directories: []const []const u8 = &.{}, saved_directories_suppressed: bool = false, allow_acp_mcp: bool = true, allow_native_tools: bool = true,}; pub const RunFn = *const fn (?*anyopaque, Allocator, Config) anyerror!void; pub const Runner = struct { context: ?*anyopaque = null, run_fn: RunFn, pub fn run(self: Runner, alloc: Allocator, cfg: Config) !void { return self.run_fn(self.context, alloc, cfg); }};
const std = @import("std");
const config_runtime = @import("../config/config_runtime.zig");
const devbox_executor = @import("../execution/devbox_executor.zig");
const background_process_provider = @import(
"../execution/background_process_provider.zig",
);
const gateway_provider = @import("../gateway/gateway_provider.zig");
const host = @import("../hosts/host.zig");
const mode_registry = @import("../modes/mode_registry.zig");
const permission_auto_classifier = @import("../permissions/auto_classifier.zig");
const prompt_policy = @import("../config/prompt_policy.zig");
const context_contract = @import("../workspace/context_contract.zig");
const Allocator = std.mem.Allocator;
pub const Config = struct {
default_model: []const u8,
default_agent_step_limit: usize,
gateway_retry_count: usize,
gateway_chat_url: []const u8,
gateway_models_path: []const u8,
gateway_provider: gateway_provider.Provider,
background_process_provider: background_process_provider.Provider =
background_process_provider.unavailable_provider,
secret_store: host.SecretStore,
prompt_policy: prompt_policy.Policy,
ignored_list_entries: []const []const u8,
max_list_entries: usize,
max_read_file_bytes: usize,
max_read_file_lines: usize,
max_read_file_line_len: usize,
max_command_output_bytes: usize,
max_tool_result_bytes: usize,
max_history_turns: usize,
context_registry: context_contract.Registry,
mode_registry: mode_registry.Registry,
devbox_provider: ?devbox_executor.Provider = null,
permission_reviewer_provider: ?permission_auto_classifier.Provider = null,
model_override: ?[]const u8 = null,
credential_override: ?[]const u8 = null,
home_override: ?[]const u8 = null,
workspace_root_override: ?[]const u8 = null,
log_file: ?[]const u8 = null,
context_limit_overrides: []const config_runtime.context_limits.Override = &.{},
additional_directories: []const []const u8 = &.{},
saved_directories_suppressed: bool = false,
allow_acp_mcp: bool = true,
allow_native_tools: bool = true,
};
pub const RunFn = *const fn (?*anyopaque, Allocator, Config) anyerror!void;
pub const Runner = struct {
context: ?*anyopaque = null,
run_fn: RunFn,
pub fn run(self: Runner, alloc: Allocator, cfg: Config) !void {
return self.run_fn(self.context, alloc, cfg);
}
};