The problem is that you’re only setting root for file_server. The try_files matcher also needs to be aware of the root to be able to do its job.
The solution is to use the root directive, rather than the root subdirective of file_server. The directive sets the root directive in the request context, so any subsequent handler can pick it up as their default. The root subdirective is more meant as an override for that default if necessary (usually isn’t).
Use handle instead of route, because you don’t need route’s behaviour of overriding directive ordering
Add a / to the matcher to make things like /cmpfoo not also match
Move the redirect outside since its purpose is to make sure the request always has the /, and due to the previous fix, it would no longer match if it was inside the handle.
Is there no /cmp directory in your root? The file path Caddy looks at is assembled using the root + the request path, so /Users/alpha/html/dist/cmp/index.html for example. Caddy does not do any path stripping by default, unlike the location blocks from nginx.
To get similar behaviour, use handle_path instead of handle directive, which has built-in path stripping logic (and also remove /cmp from your try_files since it becomes redundant).
You may also add this to the top of your Caddyfile to see some additional debugging information in your logs: