From context, it appears $\langle A,B \rangle$ simply denotes (some value unambiguously encoding) the pair of values $A$ and $B$.
In general, when discussing high-level protocols, no specific encoding for such pairs (or more complex tuples of values) is specified. It is simply assumed that we can unambiguously store and transmit such structured data somehow, but the specific manner in which this is done is considered an implementation detail.
Of course, an interoperability standard may indeed need to specify such an encoding, especially if such data structures are to be processed by cryptographic primitives that are defined as operating on (bit or byte) strings, with the expectation that independent evaluations of the primitive on the same structure should yield the same canonical output. Some standard encoding schemes include e.g. csexps or the various ASN.1 encodings, although it's also common for specific interoperability standards to specify their own custom encoding schemes.
Note that, even if $A$ and $B$ are both strings, the pair $\langle A,B \rangle$ can not generally be unambiguously encoded merely by concatenating $A$ and $B$ together, since concatenation may introduce ambiguity when the length of the strings being concatenated is not fixed. For a simple example, $10 \,||\, 1 = 101 = 1 \,||\, 01$. That said, if the length of either $A$ or $B$ (or both) is fixed, then $A \,||\, B$ can indeed be a valid unambiguous encoding of $\langle A,B \rangle$.