MCPcopy Create free account
hub / github.com/github/gh-aw / setupEngineAndImports

Method setupEngineAndImports

pkg/workflow/compiler_orchestrator_engine.go:36–87  ·  view source on GitHub ↗

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)

Source from the content-addressed store, hash-verified

34// - Sandbox configuration
35// - Strict mode validations
36func (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
89func extractEngineBudgetLimits(engineConfig *EngineConfig) (string, int64, int, int) {
90 if engineConfig == nil {