What’s New in 2.7.0
Everything added since 2.6.0. Full release history is on the
GitHub Releases page.
This release focuses on security hardening and Kickstart guided-setup fixes. There are no new commands, settings, or feature flags, but some inputs that were previously accepted are now rejected; see Behavior and compatibility.
Safer handling of cluster and kubeconfig values
Several features built shell command strings from values the extension does not control: kubeconfig context names, and object names returned by the cluster API. A crafted value could be interpreted by the local shell. This release closes those paths.
- Retina capture no longer goes through a shell.
kubectl-retinais invoked with each argument passed separately, in both the download and Blob-upload flows, so context names, node names, and SAS URLs are never parsed as shell syntax. - Names read from the cluster are validated before use. Node, namespace, pod, container, and workspace names are checked against the Kubernetes DNS-1123 naming rules where they enter the extension, and again when they come back from a webview. This covers Retina capture, TCP dumps, Inspektor Gadget, KAITO, and Draft.
- Draft is invoked without a shell.
draft createarguments are now built as arrays, removing the last shell command strings the extension assembled itself.
See Retina Distributed Capture and Collect TCP Dumps.
Kickstart guided setup fixes
- Repo picker ordering and search. Repositories are ordered by most recent push rather than by last metadata change, show a relative last-push time, page past the first 100 repos, and can be searched by any part of the name or description.
- Picking vs. pasting a repo. Choosing from the list and pasting a URL are now
separate inputs. Pasted URLs are normalized (bare
owner/repo, missing scheme, trailing slash, and GitHub/tree/<branch>/...links) and validated before cloning. - No sign-in prompt on open. The wizard no longer preselects GitHub and requests the
reposcope immediately; sign-in happens only when you click the sign-in button. - Clearer chat handoff failures. A failed handoff to Kickstart chat now shows the error instead of leaving “Opening the Kickstart chat…” on screen.
- Cluster form keeps its values. Returning to setup after a failed provisioning run restores the fields you entered, including the generated resource-name suffix.
- Dropdown accessibility. Field labels are now linked to their inputs, and the combobox exposes the expected ARIA roles and state.
See Kickstart Agent for AKS Automatic (Preview).
Behavior and compatibility
- Retina and TCP dump downloads reject unsafe folder paths. A destination path that contains spaces or shell punctuation is now refused with a message asking for a different folder. Previously, a path with a space failed silently.
- Names that fail Kubernetes naming rules are rejected. A conforming API server cannot assign such names, so real clusters are unaffected. If you see this error, check that your kubeconfig points at a cluster you trust.
- Capture names derived from kubeconfig context names are sanitized to safe characters.
Under the hood
- Routine dependency updates across the extension, webview, and repository CI
workflows, including
mocha12,@grpc/grpc-js,protobufjs, andundici.
Thanks
Thanks to @bosesuneha and @Tatsinnit for contributions, testing, and reviews.