54f0a00dd2
Resolves the two Codex P2s raised on #4420 that merged unaddressed: - wrapUrlRows indented every continuation chunk. A multi-row terminal selection includes the newline plus that indent; address bars strip newlines but preserve or percent-encode embedded spaces, so the reassembled URL was corrupted at every chunk boundary - silently, when the damage landed inside a query value. Chunk rows now carry zero leading bytes (label rows keep their indent), and the test reassembly helper concatenates chunks raw instead of stripping the indent that previously masked exactly this defect. - #launchUrlIfSafe advertised a localhost /launch copy target for flows whose redirectUri never returns to the loopback server. Its catch-comment assumed custom-scheme URIs are non-parseable, but new URL('vscode://gitlab.gitlab-workflow/authentication') parses fine and sailed through the pathname check. The guard now requires an http(s) loopback redirectUri (localhost / 127.0.0.1 / [::1]); custom schemes, non-loopback hosts, and unparseable URIs all suppress the launch URL. Regression tests cover the GitLab Duo vscode:// shape and a fixed non-loopback HTTPS redirect. Refs #4418