fix: give the image-exists query its own TypedDict
Address msto review: the PrivateImageExists query reused PrivateImageNode,
dropping creationTime and adding workspaceId. That broke ls()'s typing,
which still reads node["creationTime"]. Split out
PrivateImageExistsNode/PrivateImageExistsResult so each query has a type
matching the fields it selects.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>