package chatd import ( "strings" "github.com/coder/coder/v2/codersdk" ) // formatSystemInstructions builds the block from // agent metadata and zero or more context-file parts. Non-context-file // parts in the slice are silently skipped. func formatSystemInstructions( operatingSystem, directory string, parts []codersdk.ChatMessagePart, ) string { hasContent := false for _, part := range parts { if part.Type == codersdk.ChatMessagePartTypeContextFile && part.ContextFileContent != "" { hasContent = true break } } if !hasContent && operatingSystem == "" && directory == "" { return "" } var b strings.Builder _, _ = b.WriteString("\n") if operatingSystem != "" { _, _ = b.WriteString("Operating System: ") _, _ = b.WriteString(operatingSystem) _, _ = b.WriteString("\n") } if directory != "" { _, _ = b.WriteString("Working Directory: ") _, _ = b.WriteString(directory) _, _ = b.WriteString("\n") } for _, part := range parts { if part.Type != codersdk.ChatMessagePartTypeContextFile || part.ContextFileContent == "" { continue } _, _ = b.WriteString("\nSource: ") _, _ = b.WriteString(part.ContextFilePath) if part.ContextFileTruncated { _, _ = b.WriteString(" (truncated to 64KiB)") } _, _ = b.WriteString("\n") _, _ = b.WriteString(part.ContextFileContent) _, _ = b.WriteString("\n") } _, _ = b.WriteString("") return b.String() }