Jelly, 118117 bytes
L⁾||ẋṫ5“/\“\/”jµ⁾<>Ḋ?⁶ẋ4¤s2¤js1s2
j@€⁾ z⁶⁾_-jⱮZj@"Ç;“¡{+Ṁ“#ßɗ⁾ŀ`m“¬ṖȥƇʂẆEẒẓ“¡ɲÇ⁹E⁸ċ⁷“¡ɲÇ⁹D⁹{Ṅ’ṃ“\ ^_(o)/|-w”¤⁶ẋ8¤;Ɱ$¤w”¤⁶;$8¡€¤
-26 bytes using base + integer compression (thanks to Bubbler for the idea)
-2 bytes thanks to caird coinheringaahing
-1 byte thanks to Nick Kennedy
thanks to Jonathan Allan for finding a bug; also -4 bytes from fixing it
-1 byte thanks to Jonathan Allan
L⁾||ẋṫ5“/\“\/”jµ⁾<>Ḋ?⁶ẋ4¤s2¤js1s2 Helper Link - generates the side borders
? If
Ḋ list[1:] (basically, if the length is not 1)
L⁾||ẋṫ5“/\“\/”jµ Sublink; generate the side borders for the non-edge case
L Take the length
⁾||ẋ Repeat "||" that many times
ṫ5 Tail; remove the first 4 elements
“/\“\/”j Use that result to join ["/\", "\/"]
⁾<> Otherwise, return "<>"
⁶ẋ4¤ " " * 4
s2¤ split into slices of size 2
j Prepend and append (Extra spaces are needed because the top and bottom borders don't have side borders)
s2 Slices of length 2 (separate the left and right border components)
s2 Slices of length 2 (group the left and right border components into pairs)
j@€⁾ z⁶⁾_-jⱮZj@"Ç;“...’ṃ“ \_(o)/|-w^”¤⁶ẋ7¤;Ɱ$¤w^”¤⁶;$8¡€¤ Main Link
j@€⁾ join " " with each row (surround in spaces)
z⁶ Zip, using space as filler
Ɱ For each column
⁾_-j Join ["_", "-"] using it (prepend _ and append -)
Z Zip
j@"Ç Vectorized swapped join with the helper link (basically, for each row, prepend and append the borders)
; Append: {{
“...’ [23386201, 8811166311836860, 134563374682941922730, 101089407352370886, 101089407336781202]
ṃ“ \_(o)/|-w^” Base decompressed with " \_(o)/|-w^" - this is the cow without leading spaces
Ɱ€ For each row
⁶ẋ7¤;⁶;$ Append Prepend " "
* 7
8¡ 8 times
¤ }}