setupEngineAndImports configures the AI engine, processes imports, and validates network/sandbox settings. This function handles: - Engine extraction and validation - Import processing and merging - Network permissions setup - Sandbox configuration - Strict mode validations
(result *parser.FrontmatterResult, cleanPath string, content []byte, markdownDir string)
| 34 | // - Sandbox configuration |
| 35 | // - Strict mode validations |
| 36 | func (c *Compiler) setupEngineAndImports(result *parser.FrontmatterResult, cleanPath string, content []byte, markdownDir string) (*engineSetupResult, error) { |
| 37 | orchestratorEngineLog.Printf("Setting up engine and processing imports") |
| 38 | engineSetting, engineConfig := c.ExtractEngineConfig(result.Frontmatter) |
| 39 | preservedMaxTurns, preservedMaxAICredits, preservedMaxRuns, preservedMaxTurnCacheMisses := extractEngineBudgetLimits(engineConfig) |
| 40 | if err := c.validateAndRegisterInlineEngineConfig(engineConfig); err != nil { |
| 41 | return nil, err |
| 42 | } |
| 43 | networkPermissions := defaultNetworkPermissions(c.extractNetworkPermissions(result.Frontmatter)) |
| 44 | sandboxConfig := c.extractSandboxConfig(result.Frontmatter) |
| 45 | if err := c.runStrictFrontmatterValidations(result.Frontmatter, networkPermissions); err != nil { |
| 46 | return nil, err |
| 47 | } |
| 48 | engineSetting, engineConfig = c.applyEngineOverride(engineSetting, engineConfig) |
| 49 | engineSetting, engineConfig = c.injectBuiltinEngineImportIfNeeded(result.Frontmatter, engineSetting, engineConfig) |
| 50 | // Validate the engine name early — before import processing — so that a typo in |
| 51 | // `engine:` is always reported, even when imports also fail. The check is skipped |
| 52 | // when engineSetting is empty (engine may come from an import) or when a |
| 53 | // command-line --engine override is active (it will be validated later). |
| 54 | // The resolved value is intentionally discarded here because import defaults can |
| 55 | // still mutate engineConfig before the final resolveEngineRuntimeConfig call. |
| 56 | if engineSetting != "" && c.engineOverride == "" { |
| 57 | if _, err := c.engineCatalog.Resolve(engineSetting, engineConfig); err != nil { |
| 58 | orchestratorEngineLog.Printf("Early engine validation failed for %q: %v", engineSetting, err) |
| 59 | return nil, err |
| 60 | } |
| 61 | } |
| 62 | importsResult, networkPermissions, err := c.processEngineImportsAndMerge(result, cleanPath, content, markdownDir, engineSetting, networkPermissions) |
| 63 | if err != nil { |
| 64 | return nil, err |
| 65 | } |
| 66 | engineSetting, engineConfig, err = c.resolveEngineFromIncludesAndImports(result, markdownDir, importsResult, engineSetting, engineConfig) |
| 67 | if err != nil { |
| 68 | return nil, err |
| 69 | } |
| 70 | engineConfig = c.applyEngineImportDefaults(engineConfig, engineSetting, importsResult, preservedMaxTurns, preservedMaxAICredits, preservedMaxRuns, preservedMaxTurnCacheMisses) |
| 71 | agenticEngine, configSteps, err := c.resolveEngineRuntimeConfig(engineSetting, engineConfig) |
| 72 | if err != nil { |
| 73 | return nil, err |
| 74 | } |
| 75 | if err := c.runPostEngineValidations(result.Frontmatter, engineSetting, engineConfig, networkPermissions, sandboxConfig, agenticEngine, importsResult); err != nil { |
| 76 | return nil, err |
| 77 | } |
| 78 | return &engineSetupResult{ |
| 79 | engineSetting: engineSetting, |
| 80 | engineConfig: engineConfig, |
| 81 | agenticEngine: agenticEngine, |
| 82 | networkPermissions: networkPermissions, |
| 83 | sandboxConfig: sandboxConfig, |
| 84 | importsResult: importsResult, |
| 85 | configSteps: configSteps, |
| 86 | }, nil |
| 87 | } |
| 88 | |
| 89 | func extractEngineBudgetLimits(engineConfig *EngineConfig) (string, int64, int, int) { |
| 90 | if engineConfig == nil { |