Thanks @kandennti for your idea! I am not entirely convinced that your method is suitable for this use case because the geometries could be very complicated with lots of external features. The external bounding box method cannot effectively differentiate between internal/external cavities.
I follow on my previous thoughts and @BrianEkins suggestions to use boundaryFillFeature to find the external-shape of the body, then use CombineFeature to cut the original bodies, finally obtaining the inner-cavity bodies.
The code & samples I have used are attached with this reply, and I would like to show some demonstration of the add-in:

The add-in will add a button near the end of modify panel

Sample model for demonstration.

Fluid Volume command [internal, with patched openings] to show the internal cavities

Run the command and select bodies to be involved. If multiple bodies are selected, they will be combined.

Click Compute button to preview the result

3 internal cavities are identified and highlighted
Note: Till this step, the original objective of this thread is achieved. But I was actually trying to do something a little bit different. A further step is taken to remove the internal cavities (simply by merging them with the target body). Since this feels like a two-phase action (identify cavities ----> remove cavities), I separated them into two commands, and set the first command to execute the second command when it finishes.
Clicking OK will lead to second phase --- removing internal cavities:

Similar display highlighting the inner cavities. Note differences of command dialog (Remove cavity)

Select cavities to be removed and click OK


Now the inner cavities are removed
Not sure if this will be useful for anyone else, but it does make my workflow easier. Just sharing it for fun though, cheers!