Sadly you are correct. Resolving pronouns is not a purely algorithmic task and is subject to how you want to do it. So in fact, pronoun resolution is handled primarily by script.
Resolution algorithms involve considering whether the pronoun is a forward reference into the sentence, a backward one to a prior sentence. One might have multiple values of it ( “the car sat by the lake near the house”. then “in it lives a woman” or “in it swam a fish”). Knowing the verb involved may be required to resolve the pronoun.
Which means you decide which pronouns to try to resolve (he,she,it,they, there?, here?, that? etc).
Which means for “there” you have to decide what sentences it should think mean a place and which are merely existential there. Which means for “it” which sentences are actually referents and which are not like “it is raining”.
You have to decide if you want a simple reference or a phrase referent. If the bot said “I have a black dog”, and the user says “what does it eat” do you want that as “what does a black dog eat”, “what does the black dog eat”, “what does dog eat”, etc.
Then you have to decide what it means to resolve the pronoun… do you actually rewrite the sentence and resubmit it or do you just mark the word site with auxiliary marks. For example the “what does it eat” can remain intact, and you can mark the 3rd word with “dog” and all that that implies (~animals, ~pets, etc).
So I have script that captures pronoun values (run on both user input and bot output), and script to decode pronoun references (sometimes rewriting, sometimes just marking, sometimes deciding not to decode). The pronoun “her” generally forces a rewrite because until I know whether that is a possessive or an object pronoun, I won’t know if I want a possessive marker around regardless (eg. “her dress” will become “Mary’s dress” which tokenizes to Mary ‘s dress. ).