On what operating system do you run this repo ?
Your ERROR message looks like coming from Windows [backslash] (No directory \home\....)
BUT the whole code seems to be written just for Linux/ Docker images

It is nowhere mentioned as a prerequisite. Might be implicit to.
>>>     "you’ll need the InterSystems Sandbox" 
I never heard of, never used it.

to get a clearer picture of the requirements it is essential to understand
how the connection operates:

  1. connection is established and messages are exchanged leaving the connection open
  2. connection is established, the message is sent, the connection is closed

It's evident that the behaviors are different  on both ends 
for #1 you start with a Listener and keep it cyclic reading, eventually writing

for #2 you open the listener, receive something and close it
to send your message you need an open - write - close cycle.

both are possible but you have to know what your opponent expects and how it reacts.

The whole requirement is rather archaic. Sounds like a webserver without HTTP.
REST would be the better approach.

Finally, you may consider outplacing the whole connection management to Node.js
which is far better suited for such exercises. Eg: wrap incoming stream into REST 
 

Zdravo Matjaž!
you are right in principle. Though there are hundreds of similar cases since DECADES!
ok, the cleaner solution brings us back to my previous proposal.
add a calculated property to your serial class ##class(Packing.Needs.Attributes) like this

Property List As %List [ CalculatedSqlComputed,
   SqlComputeCode 
= { set {*}= $LB({attr1},{attr2},{attr3},{attr4} ) }, SqlComputed ];

attr1,attr2,attr3,attr4 have to be the SQLnames of these properties !!!

WARNING#1: you have to maintain this list manually at every change of the attributes!

WARNING#2:: this calculation happens at every access to the object. 
The additional parameter     SqlComputeOnChange = (attr1,attr2,attr3,attr4
may reduce this. though I've never tried in practice

IRIS includes a bunch of "legacy" routines".
Typically %R*, %G* that you can load by "legacy" commands in a "legacy" session or terminal
(not webterminal or simliar commandline simulatiors)
They are hidden in some way, It is not specific to VSC but the same with Studio.
Though ZL %RI ZS %zRI should create a routine that you can work on. Z*,z*%Z*,%z* is writable Use code