Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 19 additions & 14 deletions pkg/cli/mcp_logs_guardrail.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,21 +84,26 @@ func buildLogsFileResponse(outputStr string) string {
mcpLogsGuardrailLog.Printf("Logs data already cached at: %s", filePath)
} else if os.IsNotExist(err) {
// Write with O_EXCL to avoid following symlinks or races.
f, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE|os.O_EXCL, constants.FilePermPublic)
if err != nil {
mcpLogsGuardrailLog.Printf("Failed to create logs cache file: %v", err)
return buildLogsFileErrorResponse(fmt.Sprintf("failed to create logs cache file: %v", err))
}
_, writeErr := f.WriteString(outputStr)
closeErr := f.Close()
if writeErr != nil || closeErr != nil {
_ = os.Remove(filePath)
errMsg := writeErr
if errMsg == nil {
errMsg = closeErr
writeErr := func() (err error) {
f, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE|os.O_EXCL, constants.FilePermPublic)
if err != nil {
return fmt.Errorf("failed to create logs cache file: %w", err)
}
mcpLogsGuardrailLog.Printf("Failed to write logs data to file: %v", errMsg)
return buildLogsFileErrorResponse(fmt.Sprintf("failed to write logs data to file: %v", errMsg))
defer func() {
if closeErr := f.Close(); closeErr != nil && err == nil {
err = fmt.Errorf("failed to write logs data to file: %w", closeErr)
}
}()

if _, err = f.WriteString(outputStr); err != nil {
return fmt.Errorf("failed to write logs data to file: %w", err)
}
return nil
}()
if writeErr != nil {
mcpLogsGuardrailLog.Printf("%v", writeErr)
_ = os.Remove(filePath)
return buildLogsFileErrorResponse(writeErr.Error())
}
if chmodErr := os.Chmod(filePath, constants.FilePermPublic); chmodErr != nil {
_ = os.Remove(filePath)
Expand Down
44 changes: 26 additions & 18 deletions pkg/cli/workflows.go
Original file line number Diff line number Diff line change
Expand Up @@ -304,19 +304,26 @@ func getMarkdownWorkflowFiles(workflowDir string) ([]string, error) {
func filterMarkdownFilesWithFrontmatter(mdFiles []string) ([]string, error) {
workflowFiles := make([]string, 0, len(mdFiles))
for _, file := range mdFiles {
fd, err := os.Open(file)
firstLine, err := func() (firstLine string, err error) {
fd, err := os.Open(file)
if err != nil {
return "", fmt.Errorf("failed to read workflow file %s: %w", file, err)
}
defer func() {
if closeErr := fd.Close(); closeErr != nil && err == nil {
err = fmt.Errorf("failed to close workflow file %s: %w", file, closeErr)
}
}()

reader := bufio.NewReader(fd)
firstLine, err = reader.ReadString('\n')
if err != nil && !errors.Is(err, io.EOF) {
return "", fmt.Errorf("failed to read workflow file %s: %w", file, err)
}
return firstLine, nil
}()
if err != nil {
return nil, fmt.Errorf("failed to read workflow file %s: %w", file, err)
}

reader := bufio.NewReader(fd)
firstLine, readErr := reader.ReadString('\n')
closeErr := fd.Close()
if closeErr != nil {
return nil, fmt.Errorf("failed to close workflow file %s: %w", file, closeErr)
}
if readErr != nil && !errors.Is(readErr, io.EOF) {
return nil, fmt.Errorf("failed to read workflow file %s: %w", file, readErr)
return nil, err
}

if firstLine == "" {
Expand Down Expand Up @@ -392,20 +399,21 @@ func fastParseTitleFromReader(r io.Reader) (string, error) {
}

// extractWorkflowNameFromFile extracts the workflow name from a file's H1 header
func extractWorkflowNameFromFile(filePath string) (string, error) {
func extractWorkflowNameFromFile(filePath string) (title string, err error) {
fd, err := os.Open(filePath)
if err != nil {
return "", err
}
defer func() {
if closeErr := fd.Close(); closeErr != nil && err == nil {
err = fmt.Errorf("failed to close workflow file %s: %w", filePath, closeErr)
}
}()

title, err := fastParseTitleFromReader(fd)
closeErr := fd.Close()
title, err = fastParseTitleFromReader(fd)
if err != nil {
return "", err
}
if closeErr != nil {
return "", fmt.Errorf("failed to close workflow file %s: %w", filePath, closeErr)
}
if title != "" {
return title, nil
}
Expand Down