Portainer requires endpointId in the websocket/exec query string.
Was returning 400 "Missing query parameter".
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Shows WS URL, auth headers (truncated), full handshake request/response.
Also improves the handshake failure error to include the raw server response.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Raw OpenSSL sockets don't find the system CA bundle the same way Net::HTTP
does. ssl_verify (default: true) is now a config setting that applies to
both HTTP REST calls and WebSocket connections. Set via `portainer-cli configure`.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Prefer exact "<stack>-<service>-<N>" compose naming over generic substring
match, so "librarian" in stack "librarian" resolves to "librarian-librarian-1"
unambiguously. Substring fallback is also scoped to the stack's own containers.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Falls back to substring match when exact name isn't found. Auto-selects
if unambiguous (e.g. "librarian" → "librarian-librarian-1"), errors with
a disambiguation list if multiple containers match.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
portainer-cli console <stack> <container> looks up the stack by name to
find its endpoint ID automatically, so the user never needs to specify it.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>