======================================== Safe Output Configuration Extraction ======================================== ## Schema Generation Architecture MCP tool schemas for Safe Outputs are managed through a hybrid approach: ### Static Schemas (30+ built-in safe output types) Defined in: pkg/wor
(frontmatter map[string]any)
| 56 | |
| 57 | // extractSafeOutputsConfig extracts output configuration from frontmatter |
| 58 | func (c *Compiler) extractSafeOutputsConfig(frontmatter map[string]any) *SafeOutputsConfig { |
| 59 | safeOutputsConfigLog.Print("Extracting safe-outputs configuration from frontmatter") |
| 60 | |
| 61 | var config *SafeOutputsConfig |
| 62 | |
| 63 | if output, exists := frontmatter["safe-outputs"]; exists { |
| 64 | if outputMap, ok := output.(map[string]any); ok { |
| 65 | safeOutputsConfigLog.Printf("Processing safe-outputs configuration with %d top-level keys", len(outputMap)) |
| 66 | config = &SafeOutputsConfig{} |
| 67 | |
| 68 | // Handle create-issue |
| 69 | issuesConfig := c.parseCreateIssuesConfig(outputMap) |
| 70 | if issuesConfig != nil { |
| 71 | safeOutputsConfigLog.Print("Configured create-issue output handler") |
| 72 | config.CreateIssues = issuesConfig |
| 73 | } |
| 74 | |
| 75 | // Handle create-agent-session |
| 76 | agentSessionConfig := c.parseAgentSessionConfig(outputMap) |
| 77 | if agentSessionConfig != nil { |
| 78 | config.CreateAgentSessions = agentSessionConfig |
| 79 | } |
| 80 | |
| 81 | // Handle update-project (smart project board management) |
| 82 | updateProjectConfig := c.parseUpdateProjectConfig(outputMap) |
| 83 | if updateProjectConfig != nil { |
| 84 | config.UpdateProjects = updateProjectConfig |
| 85 | } |
| 86 | |
| 87 | // Handle create-project |
| 88 | createProjectConfig := c.parseCreateProjectsConfig(outputMap) |
| 89 | if createProjectConfig != nil { |
| 90 | config.CreateProjects = createProjectConfig |
| 91 | } |
| 92 | |
| 93 | // Handle create-project-status-update (project status updates) |
| 94 | createProjectStatusUpdateConfig := c.parseCreateProjectStatusUpdateConfig(outputMap) |
| 95 | if createProjectStatusUpdateConfig != nil { |
| 96 | config.CreateProjectStatusUpdates = createProjectStatusUpdateConfig |
| 97 | } |
| 98 | |
| 99 | // Handle create-discussion |
| 100 | discussionsConfig := c.parseCreateDiscussionsConfig(outputMap) |
| 101 | if discussionsConfig != nil { |
| 102 | config.CreateDiscussions = discussionsConfig |
| 103 | } |
| 104 | |
| 105 | // Handle close-discussion |
| 106 | closeDiscussionsConfig := c.parseCloseDiscussionsConfig(outputMap) |
| 107 | if closeDiscussionsConfig != nil { |
| 108 | config.CloseDiscussions = closeDiscussionsConfig |
| 109 | } |
| 110 | |
| 111 | // Handle close-issue |
| 112 | closeIssuesConfig := c.parseCloseIssuesConfig(outputMap) |
| 113 | if closeIssuesConfig != nil { |
| 114 | config.CloseIssues = closeIssuesConfig |
| 115 | } |