I cannot reproduce the output you get with your code.
Besides moving the = to the second argument to \AddConstraint, as suggested in another answer, I propose a different setting, with constraints left aligned, which seems better to me.
Also I removed all \left/\right pairs, which do nothing besides adding unwanted space. A \, before dt is necessary, instead. Whether you want an upright “d” or not is your choice: conform to what is the usage in your field (or to your personal preference).
\documentclass{article}
\usepackage{amsmath,optidef}
\begin{document}
\subsection*{Original}
\begin{mini*}|s|
{\substack{\mathbf{x},\mathbf{u}}}{J = \phi\left(\mathbf{x}\left(t_f\right),t_f\right) + \int_{t_0}^{t_f}\mathcal{L}\left(\mathbf{x},\mathbf{u},t\right)dt}{}{}
\addConstraint{\dot{\mathbf{x}} =}{\mathbf{f}\left(\mathbf{x},\mathbf{u},t\right)}
\addConstraint{\mathbf{x}\left(0\right)}{= \mathbf{x}_0,}{\quad\text{(Initial condition)}}
\addConstraint{\Psi\left(\mathbf{x}_f,t_f\right) }{= 0,} {\quad\text{(Terminal constraints)}}
\end{mini*}
\subsection*{Left alignment}
\begin{mini*}|s|
{\scriptstyle\mathbf{x},\mathbf{u}}
{J = \phi(\mathbf{x}(t_f),t_f) + \int_{t_0}^{t_f}\mathcal{L}(\mathbf{x},\mathbf{u},t)\,dt}{}{}
\addConstraint{}{\dot{\mathbf{x}}=\mathbf{f}(\mathbf{x},\mathbf{u},t)}{}
\addConstraint{}{\mathbf{x}(0)= \mathbf{x}_0,}{\quad\text{(Initial condition)}}
\addConstraint{}{\Psi(\mathbf{x}_f,t_f)= 0,}{\quad\text{(Terminal constraints)}}
\end{mini*}
\subsection*{Alignment at equals signs}
\begin{mini*}|s|
{\scriptstyle\mathbf{x},\mathbf{u}}
{J = \phi(\mathbf{x}(t_f),t_f) + \int_{t_0}^{t_f}\mathcal{L}(\mathbf{x},\mathbf{u},t)\,dt}{}{}
\addConstraint{\dot{\mathbf{x}}}{=\mathbf{f}(\mathbf{x},\mathbf{u},t)}{}
\addConstraint{\mathbf{x}(0)}{= \mathbf{x}_0,}{\quad\text{(Initial condition)}}
\addConstraint{\Psi(\mathbf{x}_f,t_f)}{= 0,}{\quad\text{(Terminal constraints)}}
\end{mini*}
\end{document}
In my opinion, optidef should have an option to make the subscript variables in script size instead of normal size. I opted for a simpler \scriptstyle declaration in place of the more complicated \substack.

As a further simplification for inputting your formulas, I suggest to add something like
\newcommand{\vectorvariable}[1]{\mathbf{#1}}
\newcommand{\vf}{\vectorvariable{f}}
\newcommand{\vu}{\vectorvariable{u}}
\newcommand{\vx}{\vectorvariable{x}}
so, for instance, the first constraint would become
\addConstraint{}{\dot{\vx}}=\vf(\vx,\vu,t)}{}
In case a reviewer tells you that vector variables should be in bold italic, you'll just have to add
\usepackage{bm}
and change a single line in your code, namely
\newcommand{\vectorvariable}[1]{\bm{#1}}
After this, running LaTeX on your document would yield

(or the other layout, according to the one you prefer, of course). Similarly, adding
\newcommand{\diff}{\mathop{}\!d}
and typing \diff t when you want the differential, will allow you to cope with fussy reviewers or supervisors requiring an upright “d” by just changing a single line of code. Note that if you go this way, the \, in front of the differential in integrals should be removed.
=sign in\addConstraint{\dot{\mathbf{x}} =}{\mathbf{f}\left(\mathbf{x},\mathbf{u},t\right)}to become\addConstraint{\dot{\mathbf{x}}}{ =\mathbf{f}\left(\mathbf{x},\mathbf{u},t\right)}. – Feb 11 '20 at 06:57