Full Code of telepresenceio/telepresence for AI

release/v2 afb4f787ef2a cached
862 files
4.1 MB
1.1M tokens
5614 symbols
1 requests
Download .txt
Showing preview only (4,471K chars total). Download the full file or copy to clipboard to get everything.
Repository: telepresenceio/telepresence
Branch: release/v2
Commit: afb4f787ef2a
Files: 862
Total size: 4.1 MB

Directory structure:
gitextract_r2gzeu42/

├── .dockerignore
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── Bug_report.md
│   │   └── Feature_request.md
│   ├── actions/
│   │   ├── install-dependencies/
│   │   │   └── action.yaml
│   │   └── upload-logs/
│   │       └── action.yaml
│   ├── pull_request_template.md
│   └── workflows/
│       ├── dev.yaml
│       ├── go-dependency-submission.yaml
│       ├── image-scan.yaml
│       ├── licenses.yaml
│       ├── release-teleroute.yaml
│       ├── release.yaml
│       ├── stale.yaml
│       └── unit_tests.yaml
├── .gitignore
├── .golangci.yml
├── .mailmap
├── .protolint.yaml
├── CHANGELOG.OLD.md
├── CHANGELOG.yml
├── CLAUDE.md
├── CODE-OF-CONDUCT.md
├── CODEOWNERS
├── DEPENDENCIES.md
├── DEPENDENCY_LICENSES.md
├── GOVERNANCE-maintainer.md
├── LICENSE
├── MAINTAINERS.md
├── Makefile
├── README.md
├── SECURITY.md
├── build-aux/
│   ├── INSTALLERS.md
│   ├── admission_controller_tls/
│   │   └── main.go
│   ├── docker/
│   │   └── images/
│   │       ├── Dockerfile.client
│   │       ├── Dockerfile.routecontroller
│   │       ├── Dockerfile.traffic
│   │       └── Dockerfile.winbuild
│   ├── genversion/
│   │   └── main.go
│   ├── image-importer.yaml
│   ├── main.mk
│   ├── maintenance.mk
│   ├── pkg-installer/
│   │   ├── Distribution.xml
│   │   ├── build-pkg.sh
│   │   ├── io.telepresence.rootd.plist
│   │   ├── postinstall
│   │   ├── syslog.conf
│   │   ├── telepresence-rootd
│   │   ├── uninstall
│   │   └── welcome.rtf
│   ├── prelude.mk
│   ├── systemd-installer/
│   │   ├── .gitignore
│   │   ├── build-packages.sh
│   │   ├── config.yml
│   │   ├── nfpm.yaml.in
│   │   ├── postinstall.sh
│   │   ├── postremove.sh
│   │   ├── preremove.sh
│   │   ├── telepresence-rootd.service
│   │   └── uninstall.sh
│   ├── tools.mk
│   ├── unparsable-packages.yaml
│   ├── winmake.bat
│   └── wix-installer/
│       ├── Dialogs_en-us.wxl
│       ├── MainPackage.wxs
│       ├── Makefile
│       ├── Telepresence.wxs
│       ├── config.yml
│       ├── tpwrapper.go
│       └── txt2rtf.ps1
├── charts/
│   ├── chart.go
│   └── telepresence-oss/
│       ├── .helmignore
│       ├── Chart.yaml
│       ├── README.md
│       ├── templates/
│       │   ├── NOTES.txt
│       │   ├── _helpers.tpl
│       │   ├── agentInjectorWebhook.yaml
│       │   ├── certificate.yaml
│       │   ├── clientRbac/
│       │   │   ├── cluster-scope.yaml
│       │   │   ├── connect.yaml
│       │   │   └── namespace-scope.yaml
│       │   ├── deployment.yaml
│       │   ├── issuer.yaml
│       │   ├── pre-delete-hook.yaml
│       │   ├── routecontroller-daemonset.yaml
│       │   ├── routecontroller-rbac.yaml
│       │   ├── service.yaml
│       │   ├── tests/
│       │   │   └── test-connection.yaml
│       │   ├── trafficManager-configmap.yaml
│       │   └── trafficManagerRbac/
│       │       ├── cluster-scope.yaml
│       │       ├── namespace-scope.yaml
│       │       ├── service-account.yaml
│       │       └── webhook-secret.yaml
│       ├── values.schema.yaml
│       └── values.yaml
├── cmd/
│   ├── cobraparser/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── generate/
│   │   │   └── generate.go
│   │   ├── go.mod
│   │   ├── go.sum
│   │   ├── main.go
│   │   └── types/
│   │       └── commandinfo.go
│   ├── routecontroller/
│   │   └── main.go
│   └── teleroute/
│       ├── .gitignore
│       ├── DEVELOPING.md
│       ├── Dockerfile
│       ├── Makefile
│       ├── config.json
│       ├── driver/
│       │   ├── driver.go
│       │   ├── network.go
│       │   └── options.go
│       ├── go.mod
│       ├── go.sum
│       └── main.go
├── docs/
│   ├── CONTRIBUTING.md
│   ├── README.md
│   ├── common/
│   │   └── quantity.md
│   ├── community.md
│   ├── compare/
│   │   └── mirrord.md
│   ├── concepts/
│   │   ├── devloop.md
│   │   ├── faster.md
│   │   └── intercepts.md
│   ├── doc-links.yml
│   ├── faqs.md
│   ├── helm/
│   │   └── values.schema.json
│   ├── howtos/
│   │   ├── cluster-in-vm.md
│   │   ├── docker-compose.md
│   │   ├── docker.md
│   │   ├── engage.md
│   │   ├── large-clusters.md
│   │   └── mtls.md
│   ├── install/
│   │   ├── client.md
│   │   ├── cloud.md
│   │   ├── manager.md
│   │   └── upgrade.md
│   ├── licenses.md
│   ├── quick-start.md
│   ├── redirects.yml
│   ├── reference/
│   │   ├── architecture.md
│   │   ├── cli/
│   │   │   ├── telepresence.md
│   │   │   ├── telepresence_completion.md
│   │   │   ├── telepresence_compose.md
│   │   │   ├── telepresence_compose_attach.md
│   │   │   ├── telepresence_compose_bridge.md
│   │   │   ├── telepresence_compose_build.md
│   │   │   ├── telepresence_compose_commit.md
│   │   │   ├── telepresence_compose_config.md
│   │   │   ├── telepresence_compose_cp.md
│   │   │   ├── telepresence_compose_create.md
│   │   │   ├── telepresence_compose_down.md
│   │   │   ├── telepresence_compose_events.md
│   │   │   ├── telepresence_compose_exec.md
│   │   │   ├── telepresence_compose_export.md
│   │   │   ├── telepresence_compose_images.md
│   │   │   ├── telepresence_compose_kill.md
│   │   │   ├── telepresence_compose_logs.md
│   │   │   ├── telepresence_compose_ls.md
│   │   │   ├── telepresence_compose_pause.md
│   │   │   ├── telepresence_compose_port.md
│   │   │   ├── telepresence_compose_ps.md
│   │   │   ├── telepresence_compose_publish.md
│   │   │   ├── telepresence_compose_pull.md
│   │   │   ├── telepresence_compose_push.md
│   │   │   ├── telepresence_compose_restart.md
│   │   │   ├── telepresence_compose_rm.md
│   │   │   ├── telepresence_compose_run.md
│   │   │   ├── telepresence_compose_scale.md
│   │   │   ├── telepresence_compose_start.md
│   │   │   ├── telepresence_compose_stats.md
│   │   │   ├── telepresence_compose_stop.md
│   │   │   ├── telepresence_compose_top.md
│   │   │   ├── telepresence_compose_unpause.md
│   │   │   ├── telepresence_compose_up.md
│   │   │   ├── telepresence_compose_version.md
│   │   │   ├── telepresence_compose_volumes.md
│   │   │   ├── telepresence_compose_wait.md
│   │   │   ├── telepresence_compose_watch.md
│   │   │   ├── telepresence_config.md
│   │   │   ├── telepresence_config_view.md
│   │   │   ├── telepresence_connect.md
│   │   │   ├── telepresence_curl.md
│   │   │   ├── telepresence_docker-run.md
│   │   │   ├── telepresence_gather-logs.md
│   │   │   ├── telepresence_genyaml.md
│   │   │   ├── telepresence_genyaml_annotations.md
│   │   │   ├── telepresence_genyaml_config.md
│   │   │   ├── telepresence_genyaml_container.md
│   │   │   ├── telepresence_genyaml_initcontainer.md
│   │   │   ├── telepresence_genyaml_volume.md
│   │   │   ├── telepresence_helm.md
│   │   │   ├── telepresence_helm_install.md
│   │   │   ├── telepresence_helm_lint.md
│   │   │   ├── telepresence_helm_uninstall.md
│   │   │   ├── telepresence_helm_upgrade.md
│   │   │   ├── telepresence_helm_version.md
│   │   │   ├── telepresence_ingest.md
│   │   │   ├── telepresence_intercept.md
│   │   │   ├── telepresence_leave.md
│   │   │   ├── telepresence_list-contexts.md
│   │   │   ├── telepresence_list-namespaces.md
│   │   │   ├── telepresence_list.md
│   │   │   ├── telepresence_loglevel.md
│   │   │   ├── telepresence_mcp.md
│   │   │   ├── telepresence_mcp_claude.md
│   │   │   ├── telepresence_mcp_claude_disable.md
│   │   │   ├── telepresence_mcp_claude_enable.md
│   │   │   ├── telepresence_mcp_claude_list.md
│   │   │   ├── telepresence_mcp_cursor.md
│   │   │   ├── telepresence_mcp_cursor_disable.md
│   │   │   ├── telepresence_mcp_cursor_enable.md
│   │   │   ├── telepresence_mcp_cursor_list.md
│   │   │   ├── telepresence_mcp_start.md
│   │   │   ├── telepresence_mcp_stream.md
│   │   │   ├── telepresence_mcp_tools.md
│   │   │   ├── telepresence_mcp_vscode.md
│   │   │   ├── telepresence_mcp_vscode_disable.md
│   │   │   ├── telepresence_mcp_vscode_enable.md
│   │   │   ├── telepresence_mcp_vscode_list.md
│   │   │   ├── telepresence_quit.md
│   │   │   ├── telepresence_replace.md
│   │   │   ├── telepresence_revoke.md
│   │   │   ├── telepresence_serve.md
│   │   │   ├── telepresence_status.md
│   │   │   ├── telepresence_uninstall.md
│   │   │   ├── telepresence_version.md
│   │   │   └── telepresence_wiretap.md
│   │   ├── cluster-config.md
│   │   ├── compose.md
│   │   ├── config.md
│   │   ├── dns.md
│   │   ├── docker-run.md
│   │   ├── engagements/
│   │   │   ├── cli.md
│   │   │   ├── conflicts.md
│   │   │   ├── container.md
│   │   │   └── sidecar.md
│   │   ├── environment.md
│   │   ├── inside-container.md
│   │   ├── monitoring.md
│   │   ├── plugins.md
│   │   ├── rbac.md
│   │   ├── restapi.md
│   │   ├── route-controller.md
│   │   ├── routing.md
│   │   ├── tun-device.md
│   │   ├── volume.md
│   │   └── vpn.md
│   ├── release-notes.md
│   ├── release-notes.mdx
│   ├── troubleshooting.md
│   └── variables.yml
├── examples/
│   ├── compose/
│   │   ├── proxy-voting.override.yaml
│   │   ├── proxy-web.override.yaml
│   │   └── replace.override.yaml
│   └── docker/
│       └── iam-authenticator/
│           └── Dockerfile
├── go.mod
├── go.sum
├── integration_test/
│   ├── agent_injector_disabled_test.go
│   ├── also_proxy_test.go
│   ├── argo_rollouts_test.go
│   ├── bind_to_podip_test.go
│   ├── cidr_conflict_test.go
│   ├── cli_test.go
│   ├── cloud_config_test.go
│   ├── compose_test.go
│   ├── config_test.go
│   ├── connected_test.go
│   ├── container_test.go
│   ├── docker_daemon_test.go
│   ├── docker_run_test.go
│   ├── env_interpolate_test.go
│   ├── gather_logs_test.go
│   ├── h2c_intercept_test.go
│   ├── headless_test.go
│   ├── helm_test.go
│   ├── http_intercepts_test.go
│   ├── ignored_mounts_test.go
│   ├── inactive_client_test.go
│   ├── ingest_test.go
│   ├── inject_policy_test.go
│   ├── injector_test.go
│   ├── install_test.go
│   ├── integration_test.go
│   ├── intercept_env_test.go
│   ├── intercept_flags_test.go
│   ├── intercept_localhost_test.go
│   ├── intercept_mount_test.go
│   ├── itest/
│   │   ├── apply_app.go
│   │   ├── assertions.go
│   │   ├── cluster.go
│   │   ├── config.go
│   │   ├── connected.go
│   │   ├── context.go
│   │   ├── env.go
│   │   ├── harness.go
│   │   ├── helm.go
│   │   ├── image.go
│   │   ├── logdir.go
│   │   ├── multiple_services.go
│   │   ├── namespace.go
│   │   ├── runner.go
│   │   ├── single_service.go
│   │   ├── status.go
│   │   ├── suite.go
│   │   ├── tempdir.go
│   │   ├── template.go
│   │   ├── timed.go
│   │   └── traffic_manager.go
│   ├── kubeauth_test.go
│   ├── kubeconfig_extension_test.go
│   ├── large_files_test.go
│   ├── limitrange_test.go
│   ├── list_watch_test.go
│   ├── loglevel_test.go
│   ├── manager_grpc_test.go
│   ├── manual_agent_test.go
│   ├── mounts_test.go
│   ├── multi_connect_test.go
│   ├── multiple_intercepts_test.go
│   ├── multiple_port_intercept_test.go
│   ├── multiple_services_test.go
│   ├── multiport_test.go
│   ├── namespaces_test.go
│   ├── not_connected_test.go
│   ├── otel_test.go
│   ├── pod_cidr_test.go
│   ├── podscaling_test.go
│   ├── proxy_via_test.go
│   ├── reconnect_session_test.go
│   ├── replace_test.go
│   ├── restapi_test.go
│   ├── single_service_test.go
│   ├── subdomain_test.go
│   ├── svcdomain_test.go
│   ├── testdata/
│   │   ├── apiserveraccess/
│   │   │   └── main.go
│   │   ├── cli-container/
│   │   │   └── Dockerfile
│   │   ├── count-server/
│   │   │   └── main.go
│   │   ├── echo-server/
│   │   │   ├── Dockerfile
│   │   │   ├── certs/
│   │   │   │   ├── tls.crt
│   │   │   │   └── tls.key
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   └── main.go
│   │   ├── k8s/
│   │   │   ├── client_experiment.yaml
│   │   │   ├── client_rancher.goyaml
│   │   │   ├── client_sa.yaml
│   │   │   ├── disruption-budget.goyaml
│   │   │   ├── echo-argo-rollout.yaml
│   │   │   ├── echo-auto-inject.yaml
│   │   │   ├── echo-both.yaml
│   │   │   ├── echo-double-one-unnamed.yaml
│   │   │   ├── echo-easy.yaml
│   │   │   ├── echo-extra-udp.yaml
│   │   │   ├── echo-headless.yaml
│   │   │   ├── echo-interpolate.yaml
│   │   │   ├── echo-manual-inject-deploy.yaml
│   │   │   ├── echo-manual-inject-svc.yaml
│   │   │   ├── echo-min.yaml
│   │   │   ├── echo-no-containerport.yaml
│   │   │   ├── echo-no-svc-ann.yaml
│   │   │   ├── echo-no-svc.yaml
│   │   │   ├── echo-no-vols.yaml
│   │   │   ├── echo-one.yaml
│   │   │   ├── echo-same-target-port.yaml
│   │   │   ├── echo-secondary.yaml
│   │   │   ├── echo-spring.yaml
│   │   │   ├── echo-tls.goyaml
│   │   │   ├── echo-udp-tcp-unnamed.yaml
│   │   │   ├── echo-w-hostalias.goyaml
│   │   │   ├── echo-w-sidecars.yaml
│   │   │   ├── echo-w-subdomain.yaml
│   │   │   ├── echo_with_env.yaml
│   │   │   ├── generic.goyaml
│   │   │   ├── hello-w-volumes.goyaml
│   │   │   ├── many-volumes.yaml
│   │   │   ├── memory-constraints.yaml
│   │   │   ├── namespaces.yaml
│   │   │   ├── pol-disabled.yaml
│   │   │   ├── pol-enabled.yaml
│   │   │   ├── pol-none.yaml
│   │   │   ├── pv.goyaml
│   │   │   ├── pvc.goyaml
│   │   │   ├── rs-echo.yaml
│   │   │   ├── secret-reader-rbac.goyaml
│   │   │   ├── ss-echo.yaml
│   │   │   ├── svc-deploy.goyaml
│   │   │   ├── tel-cert.yaml
│   │   │   └── with-probes.yaml
│   │   ├── k8screds/
│   │   │   └── main.go
│   │   ├── otel/
│   │   │   ├── helm-yamls/
│   │   │   │   └── otel-operator.yml
│   │   │   └── instrumentation.yml
│   │   ├── routing-values.yaml
│   │   ├── scripts/
│   │   │   ├── veth-down.sh
│   │   │   └── veth-up.sh
│   │   ├── stdiotest/
│   │   │   └── main.go
│   │   ├── telepresence-1.9.9.tgz
│   │   └── udp-echo/
│   │       ├── Dockerfile
│   │       ├── go.mod
│   │       └── main.go
│   ├── tls_test.go
│   ├── to_pod_test.go
│   ├── udp_test.go
│   ├── uhn_dns_test.go
│   ├── uninstall_test.go
│   ├── webhook_test.go
│   ├── wiretap_test.go
│   ├── workload_configuration_test.go
│   ├── workload_watch_test.go
│   ├── workloads_test.go
│   └── wpad_test.go
├── k8s/
│   ├── agent-injector-rbac.yaml
│   ├── agent-injector-secret.yaml
│   ├── agent-injector.yaml
│   ├── apitest.yaml
│   ├── dnsutils-headless.yaml
│   ├── echo-auto-headless.yaml
│   ├── echo-double-one.yaml
│   ├── echo-double.yaml
│   ├── echo-sc.yaml
│   ├── ext-example.yaml
│   ├── hello-w-volume.yaml
│   ├── local-echo-easy.yaml
│   ├── local-echo-next.yaml
│   ├── manager.yaml
│   ├── minikube-registry.yaml
│   ├── private-reg-proxy.yaml
│   └── rs-echo-svc2.yaml
├── packaging/
│   ├── artifacthub-repo.yml
│   ├── bundle.wxs.in
│   ├── helmpackage.go
│   ├── homebrew-oss-formula.rb
│   ├── homebrew-package.sh
│   ├── install-telepresence.ps1
│   ├── telepresence.wxs.in
│   └── windows-package.sh
├── pkg/
│   ├── agentconfig/
│   │   ├── container.go
│   │   ├── container_test.go
│   │   ├── initcontainer.go
│   │   ├── injectpolicy.go
│   │   ├── intercepttarget.go
│   │   ├── sidecar.go
│   │   ├── util.go
│   │   └── volumes.go
│   ├── agentmap/
│   │   ├── capsbase26.go
│   │   ├── capsbase26_test.go
│   │   ├── discorvery.go
│   │   └── generator.go
│   ├── annotation/
│   │   └── annotation.go
│   ├── authenticator/
│   │   ├── authenticator.go
│   │   ├── config.go
│   │   ├── exec.go
│   │   ├── exec_test.go
│   │   ├── grpc/
│   │   │   └── authenticator.go
│   │   └── patcher/
│   │       └── patcher.go
│   ├── cache/
│   │   ├── client.go
│   │   └── map.go
│   ├── client/
│   │   ├── agentpf/
│   │   │   └── clients.go
│   │   ├── bwcompat/
│   │   │   └── clusterinfo.go
│   │   ├── cache/
│   │   │   ├── cache.go
│   │   │   └── watcher.go
│   │   ├── cli/
│   │   │   ├── ann/
│   │   │   │   └── annotations.go
│   │   │   ├── cmd/
│   │   │   │   ├── completion.go
│   │   │   │   ├── compose.go
│   │   │   │   ├── config.go
│   │   │   │   ├── connect.go
│   │   │   │   ├── curl.go
│   │   │   │   ├── docker_run.go
│   │   │   │   ├── gather_logs.go
│   │   │   │   ├── gather_logs_test.go
│   │   │   │   ├── genyaml.go
│   │   │   │   ├── helm.go
│   │   │   │   ├── ingest.go
│   │   │   │   ├── intercept.go
│   │   │   │   ├── kubeauth.go
│   │   │   │   ├── leave.go
│   │   │   │   ├── list.go
│   │   │   │   ├── list_contexts.go
│   │   │   │   ├── list_namespaces.go
│   │   │   │   ├── loglevel.go
│   │   │   │   ├── man-pages.go
│   │   │   │   ├── mcp.go
│   │   │   │   ├── mcp_test.go
│   │   │   │   ├── quit.go
│   │   │   │   ├── replace.go
│   │   │   │   ├── revoke.go
│   │   │   │   ├── serve.go
│   │   │   │   ├── status.go
│   │   │   │   ├── telepresence.go
│   │   │   │   ├── testdata/
│   │   │   │   │   ├── license
│   │   │   │   │   ├── testLogDir/
│   │   │   │   │   │   ├── cli.log
│   │   │   │   │   │   ├── connector-20210916T130347.log
│   │   │   │   │   │   ├── connector-20210916T130356.log
│   │   │   │   │   │   ├── connector-20210916T130624.log
│   │   │   │   │   │   ├── connector-20210916T130643.log
│   │   │   │   │   │   ├── connector.log
│   │   │   │   │   │   ├── daemon-20210916T130318.log
│   │   │   │   │   │   ├── daemon-20210916T130402.log
│   │   │   │   │   │   ├── daemon-20210916T130624.log
│   │   │   │   │   │   ├── daemon-20210916T130643.log
│   │   │   │   │   │   ├── daemon.log
│   │   │   │   │   │   ├── echo-auto-inject-6496f77cbd-n86nc
│   │   │   │   │   │   └── traffic-manager-5c69859f94-g4ntj
│   │   │   │   │   └── zipDir/
│   │   │   │   │       ├── diff_name.log
│   │   │   │   │       ├── file1.log
│   │   │   │   │       └── file2.log
│   │   │   │   ├── uninstall.go
│   │   │   │   ├── usage.go
│   │   │   │   ├── version.go
│   │   │   │   └── wiretap.go
│   │   │   ├── connect/
│   │   │   │   ├── connector.go
│   │   │   │   ├── daemon.go
│   │   │   │   ├── init_command.go
│   │   │   │   └── version_check.go
│   │   │   ├── daemon/
│   │   │   │   ├── dial.go
│   │   │   │   ├── identifier.go
│   │   │   │   ├── identifier_test.go
│   │   │   │   ├── info.go
│   │   │   │   ├── request.go
│   │   │   │   ├── request_test.go
│   │   │   │   └── userd.go
│   │   │   ├── docker/
│   │   │   │   ├── auto_complete.go
│   │   │   │   ├── compose/
│   │   │   │   │   ├── config.go
│   │   │   │   │   ├── connection.go
│   │   │   │   │   ├── dc-cli.json
│   │   │   │   │   ├── engagement.go
│   │   │   │   │   ├── extension.go
│   │   │   │   │   ├── extension_test.go
│   │   │   │   │   ├── toplevelextension.go
│   │   │   │   │   └── transform.go
│   │   │   │   ├── flags.go
│   │   │   │   ├── published_ports.go
│   │   │   │   ├── run_flags.go
│   │   │   │   └── runner.go
│   │   │   ├── env/
│   │   │   │   ├── flags.go
│   │   │   │   ├── syntax.go
│   │   │   │   └── syntax_test.go
│   │   │   ├── flags/
│   │   │   │   ├── addunique.go
│   │   │   │   ├── context.go
│   │   │   │   ├── deprecation.go
│   │   │   │   ├── map.go
│   │   │   │   ├── unparsed.go
│   │   │   │   ├── unparsed_test.go
│   │   │   │   └── zerovalue.go
│   │   │   ├── global/
│   │   │   │   └── flags.go
│   │   │   ├── helm/
│   │   │   │   ├── chart.go
│   │   │   │   ├── install.go
│   │   │   │   ├── lint.go
│   │   │   │   └── release.go
│   │   │   ├── ingest/
│   │   │   │   ├── command.go
│   │   │   │   ├── info.go
│   │   │   │   └── state.go
│   │   │   ├── intercept/
│   │   │   │   ├── command.go
│   │   │   │   ├── command_test.go
│   │   │   │   ├── describe_intercepts.go
│   │   │   │   ├── info.go
│   │   │   │   ├── info_test.go
│   │   │   │   └── state.go
│   │   │   ├── main.go
│   │   │   ├── mount/
│   │   │   │   ├── flags.go
│   │   │   │   ├── info.go
│   │   │   │   ├── prepare_unix.go
│   │   │   │   └── prepare_windows.go
│   │   │   ├── output/
│   │   │   │   ├── output.go
│   │   │   │   └── output_test.go
│   │   │   └── progress/
│   │   │       ├── colors.go
│   │   │       ├── event.go
│   │   │       ├── json.go
│   │   │       ├── noop.go
│   │   │       ├── plain.go
│   │   │       ├── quiet.go
│   │   │       ├── spinner.go
│   │   │       ├── tty.go
│   │   │       ├── tty_test.go
│   │   │       └── writer.go
│   │   ├── cmd_error.go
│   │   ├── config.go
│   │   ├── config_darwin.go
│   │   ├── config_linux.go
│   │   ├── config_test.go
│   │   ├── config_unix.go
│   │   ├── config_util.go
│   │   ├── config_windows.go
│   │   ├── const.go
│   │   ├── docker/
│   │   │   ├── container.go
│   │   │   ├── context.go
│   │   │   ├── daemon.go
│   │   │   ├── daemon_test.go
│   │   │   ├── image.go
│   │   │   ├── kubeauth/
│   │   │   │   └── cmd.go
│   │   │   ├── plugin.go
│   │   │   ├── teleroute/
│   │   │   │   ├── network.go
│   │   │   │   ├── server.go
│   │   │   │   ├── server_linux.go
│   │   │   │   └── server_other.go
│   │   │   ├── volume.go
│   │   │   └── volume_test.go
│   │   ├── ensured_state.go
│   │   ├── envconfig.go
│   │   ├── envconfig_unix.go
│   │   ├── envconfig_windows.go
│   │   ├── install_id.go
│   │   ├── k8s/
│   │   │   ├── cani.go
│   │   │   ├── cluster.go
│   │   │   ├── config.go
│   │   │   └── connect.go
│   │   ├── logging/
│   │   │   ├── cached_timed_level.go
│   │   │   ├── dup_test.go
│   │   │   ├── dup_unix.go
│   │   │   ├── dup_windows.go
│   │   │   ├── initcontext.go
│   │   │   ├── initcontext_test.go
│   │   │   ├── initcontext_unix_test.go
│   │   │   ├── initcontext_windows_test.go
│   │   │   ├── rotatingfile.go
│   │   │   ├── rotatingfile_unix.go
│   │   │   ├── rotatingfile_windows.go
│   │   │   ├── stat.go
│   │   │   ├── stat_darwin.go
│   │   │   ├── stat_linux.go
│   │   │   ├── stat_linux_test.go
│   │   │   ├── stat_test.go
│   │   │   └── stat_windows.go
│   │   ├── portforward/
│   │   │   ├── borrowed_kubectl_cmdutil.go
│   │   │   ├── grpcresolver.go
│   │   │   ├── podaddr.go
│   │   │   ├── resolve.go
│   │   │   └── streamconn.go
│   │   ├── remotefs/
│   │   │   ├── bridge.go
│   │   │   ├── fuseftp.go
│   │   │   ├── fuseftp_docker.go
│   │   │   ├── fuseftp_embedded.go
│   │   │   ├── fuseftp_external.go
│   │   │   ├── fuseftp_grpc.go
│   │   │   ├── fuseftp_linked.go
│   │   │   ├── fuseftp_other.go
│   │   │   ├── mounter.go
│   │   │   └── sftp.go
│   │   ├── rootd/
│   │   │   ├── dbus/
│   │   │   │   └── resolved.go
│   │   │   ├── dns/
│   │   │   │   ├── client.go
│   │   │   │   ├── client_queue.go
│   │   │   │   ├── connpool.go
│   │   │   │   ├── connpool_test.go
│   │   │   │   ├── resolved_linux.go
│   │   │   │   ├── server.go
│   │   │   │   ├── server_darwin.go
│   │   │   │   ├── server_linux.go
│   │   │   │   ├── server_test.go
│   │   │   │   └── server_windows.go
│   │   │   ├── grpc.go
│   │   │   ├── in_process.go
│   │   │   ├── service.go
│   │   │   ├── session.go
│   │   │   ├── stream_creator.go
│   │   │   └── vip/
│   │   │       ├── env_nat.go
│   │   │       ├── env_nat_test.go
│   │   │       └── vip.go
│   │   ├── stream_error.go
│   │   ├── userd/
│   │   │   ├── daemon/
│   │   │   │   ├── grpc.go
│   │   │   │   └── service.go
│   │   │   ├── service.go
│   │   │   ├── session.go
│   │   │   └── trafficmgr/
│   │   │       ├── agents.go
│   │   │       ├── config.go
│   │   │       ├── context.go
│   │   │       ├── gather_logs.go
│   │   │       ├── ingest.go
│   │   │       ├── ingest_test.go
│   │   │       ├── intercept.go
│   │   │       ├── mount.go
│   │   │       ├── podaccess.go
│   │   │       ├── session.go
│   │   │       └── session_info_cache.go
│   │   ├── version.go
│   │   └── version_test.go
│   ├── dnsproxy/
│   │   ├── lookup.go
│   │   ├── lookup_test.go
│   │   ├── resolvefile_unix.go
│   │   ├── resolvefile_unix_test.go
│   │   └── rpc.go
│   ├── dos/
│   │   ├── aferofs/
│   │   │   └── wrapper.go
│   │   ├── env.go
│   │   ├── exe.go
│   │   ├── filesystem.go
│   │   ├── filesystem_test.go
│   │   ├── lockedfile.go
│   │   ├── package.go
│   │   ├── stdio.go
│   │   └── wdwrapper.go
│   ├── dpipe/
│   │   ├── dpipe.go
│   │   ├── dpipe_test.go
│   │   ├── dpipe_unix.go
│   │   ├── dpipe_windows.go
│   │   └── testdata/
│   │       └── echo/
│   │           └── echo.go
│   ├── errcat/
│   │   └── errors.go
│   ├── filelocation/
│   │   ├── app.go
│   │   ├── ctx.go
│   │   ├── osfile.go
│   │   ├── osfile_darwin.go
│   │   ├── osfile_linux.go
│   │   └── osfile_windows.go
│   ├── forwarder/
│   │   ├── basic.go
│   │   ├── tcp.go
│   │   └── udp.go
│   ├── grpc/
│   │   ├── client/
│   │   │   └── connect.go
│   │   ├── error.go
│   │   ├── errors/
│   │   │   └── errors.go
│   │   ├── server/
│   │   │   ├── context.go
│   │   │   ├── logging.go
│   │   │   └── server.go
│   │   └── watcher/
│   │       └── watcher.go
│   ├── icept/
│   │   ├── conflicts.go
│   │   ├── conflicts_test.go
│   │   └── find.go
│   ├── informer/
│   │   ├── context.go
│   │   └── factory.go
│   ├── ioutil/
│   │   ├── free_ports.go
│   │   ├── keyvalueformatter.go
│   │   ├── print.go
│   │   ├── safename.go
│   │   ├── tempname.go
│   │   └── writeallto.go
│   ├── iputil/
│   │   ├── ipnet.go
│   │   ├── ips.go
│   │   ├── join.go
│   │   ├── normalize.go
│   │   └── parse.go
│   ├── json/
│   │   └── marshal.go
│   ├── k8sapi/
│   │   ├── cani.go
│   │   ├── clientconfigprovider.go
│   │   ├── interface.go
│   │   ├── kind.go
│   │   ├── namespaceid.go
│   │   ├── object.go
│   │   ├── util.go
│   │   └── workload.go
│   ├── labels/
│   │   └── selector.go
│   ├── log/
│   │   ├── base_logger.go
│   │   ├── group.go
│   │   └── timed_level.go
│   ├── maps/
│   │   ├── utils.go
│   │   └── xmap.go
│   ├── matcher/
│   │   ├── header_stringer.go
│   │   ├── header_stringer_test.go
│   │   ├── headers.go
│   │   ├── headers_test.go
│   │   ├── paths.go
│   │   ├── request.go
│   │   ├── request_test.go
│   │   └── value.go
│   ├── pprof/
│   │   └── pprof.go
│   ├── proc/
│   │   ├── cmd.go
│   │   ├── docker_linux.go
│   │   ├── docker_other.go
│   │   ├── exec.go
│   │   ├── exec_unix.go
│   │   ├── exec_windows.go
│   │   ├── wsl_linux.go
│   │   └── wsl_other.go
│   ├── restapi/
│   │   ├── api.go
│   │   └── api_test.go
│   ├── routing/
│   │   ├── routing.go
│   │   ├── routing_darwin.go
│   │   ├── routing_linux.go
│   │   ├── routing_test.go
│   │   ├── routing_unix.go
│   │   ├── routing_unix_test.go
│   │   └── routing_windows.go
│   ├── shellquote/
│   │   ├── shellstring.go
│   │   ├── shellstring_unix.go
│   │   ├── shellstring_unix_test.go
│   │   ├── shellstring_windows.go
│   │   └── shellstring_windows_test.go
│   ├── sigctx/
│   │   └── context.go
│   ├── slice/
│   │   ├── contains.go
│   │   ├── csv.go
│   │   └── strings.go
│   ├── subnet/
│   │   ├── bitfield256.go
│   │   ├── bitfield256_test.go
│   │   ├── set.go
│   │   ├── set_test.go
│   │   ├── subnet.go
│   │   ├── subnet_test.go
│   │   └── testdata/
│   │       └── ips.txt
│   ├── tmconfig/
│   │   ├── admin_command.go
│   │   └── configmap.go
│   ├── tunnel/
│   │   ├── client_stream.go
│   │   ├── connid.go
│   │   ├── connid_test.go
│   │   ├── context.go
│   │   ├── dialer.go
│   │   ├── message.go
│   │   ├── metrics.go
│   │   ├── pipe.go
│   │   ├── pool.go
│   │   ├── probe.go
│   │   ├── provider.go
│   │   ├── server_stream.go
│   │   ├── stream.go
│   │   ├── stream_conn.go
│   │   ├── stream_conn_test.go
│   │   ├── stream_test.go
│   │   ├── synthetic.go
│   │   ├── timed_handler.go
│   │   └── udplistener.go
│   ├── types/
│   │   ├── addrportandproto.go
│   │   ├── engagement.go
│   │   ├── mountpolicy.go
│   │   ├── portandproto.go
│   │   ├── portidentifier.go
│   │   ├── portmapping.go
│   │   └── proto.go
│   ├── version/
│   │   └── version.go
│   ├── vif/
│   │   ├── device.go
│   │   ├── device_darwin.go
│   │   ├── device_linux.go
│   │   ├── device_notlinux.go
│   │   ├── device_unix.go
│   │   ├── device_windows.go
│   │   ├── logging.go
│   │   ├── router.go
│   │   ├── router_test.go
│   │   ├── stack.go
│   │   └── tunneling_device.go
│   └── workload/
│       ├── informers.go
│       ├── state.go
│       └── util.go
├── rpc/
│   ├── LICENSE
│   ├── agent/
│   │   ├── agent.pb.go
│   │   ├── agent.proto
│   │   └── agent_grpc.pb.go
│   ├── authenticator/
│   │   ├── authenticator.pb.go
│   │   ├── authenticator.proto
│   │   └── authenticator_grpc.pb.go
│   ├── common/
│   │   ├── version.pb.go
│   │   └── version.proto
│   ├── connector/
│   │   ├── connector.pb.go
│   │   ├── connector.proto
│   │   └── connector_grpc.pb.go
│   ├── daemon/
│   │   ├── daemon.pb.go
│   │   ├── daemon.proto
│   │   └── daemon_grpc.pb.go
│   ├── go.mod
│   ├── go.sum
│   ├── manager/
│   │   ├── manager.pb.go
│   │   ├── manager.proto
│   │   └── manager_grpc.pb.go
│   └── teleroute/
│       ├── service.pb.go
│       ├── service.proto
│       └── service_grpc.pb.go
└── test-infra/
    ├── aws-okd/
    │   ├── README.md
    │   └── dns/
    │       ├── .gitignore
    │       └── dns.tf
    └── aws-vpn/
        ├── .gitignore
        ├── README.md
        ├── dns.tf
        ├── eks.tf
        ├── locals.tf
        ├── network.tf
        ├── pki.sh
        ├── provider.tf
        └── vpn.tf

================================================
FILE CONTENTS
================================================

================================================
FILE: .dockerignore
================================================
.circleci/
.idea/
.git/
build-aux/
build-output/
!build-output/version.txt
!build-output/helm-version.txt
integration_test/
k8s/
packaging/
test-infra/
tools/


================================================
FILE: .editorconfig
================================================
root = true

[*]
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.go]
indent_style = tab
; mimic gofmt's go/printer.printer.funcBody().maxSize
max_line_length = 100
; mimic gofmt's cmd/gofmt.tabWidth
tab_width = 8

[{go.mod,go.sum}]
indent_style = tab

[*.proto]
indent_style = space
indent_size = 2


================================================
FILE: .gitattributes
================================================
# Always check out with LF so that golangci-lint doesn't break
*.go text eol=lf

================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: [thallgren]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
thanks_dev: # Replace with a single thanks.dev username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']


================================================
FILE: .github/ISSUE_TEMPLATE/Bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve Telepresence

---

**Describe the bug**
A clear and concise description of what the bug is.

Please use `telepresence loglevel debug` to ensure we have the most helpful logs,
reproduce the error, and then run `telepresence gather-logs` to create a
zip file of all logs for Telepresence's components (root and user daemons,
traffic-manager, and traffic-agents) and attach it to this issue. See an
example command below:
```
telepresence loglevel debug

* reproduce the error *

telepresence gather-logs --output-file /tmp/telepresence_logs.zip

# To see all options, run the following command
telepresence gather-logs --help
```


**To Reproduce**
Steps to reproduce the behavior:
1. When I run '...'
2. I see '....'
3. So I look at '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Versions (please complete the following information):**
 - Output of `telepresence version` (preferably while telepresence is connected)
 - Operating system of workstation running `telepresence` commands
 - Kubernetes environment and Version [e.g. Minikube, bare metal, Google Kubernetes Engine]

**Additional context**
Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/Feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for Telepresence

---

**Please describe your use case / problem.**
A clear and concise description of your use case / problem. The "why" is really valuable to us. For example, "I have a set of services whose clients have long-lived connections."

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Versions (please complete the following information)**
  - Output of `telepresence version` (just in case the feature exists in future versions)
  - Kubernetes Environment and Version

**Additional context**
Add any other context about the feature request here.


================================================
FILE: .github/actions/install-dependencies/action.yaml
================================================
name: "Install dependencies"
description: "Install dependencies required by the runner"
runs:
  using: composite
  steps:
    - uses: actions/setup-go@v5
      with:
        go-version: stable
    - if: runner.os == 'Linux'
      name: install Linux dependencies
      shell: bash
      run: |
        sudo rm -f /etc/apt/sources.list.d/google-chrome.list
        sudo apt-get update
        sudo apt-get install -y gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu sshfs socat libfuse-dev make jq
        sudo sh -c 'echo user_allow_other >> /etc/fuse.conf'
    - if: runner.os == 'macOS'
      name: install macOS dependencies
      shell: bash
      env:
        HOMEBREW_NO_INSTALL_FROM_API: ""
        HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: "1"
      run: |
        brew untap homebrew/core || :
        brew untap homebrew/cask || :

        # Remove Python3 symlinks in /usr/local/bin as workaround to brew update issues
        # https://github.com/actions/setup-python/issues/577
        rm /usr/local/bin/2to3* || :
        rm /usr/local/bin/idle3* || :
        rm /usr/local/bin/pydoc* || :
        rm /usr/local/bin/python3* || :

        brew update
        brew install --cask macfuse
        brew install gromgit/fuse/sshfs-mac
        brew link --overwrite sshfs-mac

        if [[ ${RUNNER_ARCH} == "ARM64" ]]; then
          brew install jq
        fi
    - if: runner.os == 'Windows'
      name: setup make
      shell: pwsh
      run: |
        # Use make from Git for Windows (pre-installed on runners)
        echo "C:\Program Files\Git\usr\bin" | Out-File -FilePath $env:GITHUB_PATH -Append
    - if: runner.os == 'Windows'
      name: download winfsp
      uses: nick-fields/retry/@v3
      with:
        max_attempts: 3
        timeout_minutes: 1
        shell: bash
        command: make winfsp.msi
    - if: runner.os == 'Windows'
      name: download sshfs
      uses: nick-fields/retry/@v3
      with:
        max_attempts: 3
        timeout_minutes: 1
        shell: bash
        command: make sshfs-win.msi
    - if: runner.os == 'Windows'
      name: download sshfs
      uses: nick-fields/retry/@v3
      with:
        max_attempts: 3
        timeout_minutes: 1
        shell: bash
        command: make wintun.dll
    - if: runner.os == 'Windows'
      name: install winfsp and sshfs
      shell: powershell
      run: |
        Start-Process msiexec -Wait -verb runAs -Args "/i build-output\\winfsp.msi /passive /qn /L*V winfsp-install.log"
        Start-Process msiexec -Wait -verb runAs -Args "/i build-output\\sshfs-win.msi /passive /qn /L*V sshfs-win-install.log"

        [Environment]::SetEnvironmentVariable("Path", "C:\\;C:\\Program Files\\SSHFS-Win\\bin;$ENV:Path", "Machine")


================================================
FILE: .github/actions/upload-logs/action.yaml
================================================
name: "Upload logs"
description: "Upload logs from the test run"
runs:
  using: composite
  steps:
    - run: |
        LOGS="test-logs/${{ runner.os }}/${{ runner.arch }}"
        mkdir -p "$LOGS"
        if [[ $RUNNER_OS != Windows ]]; then
          rsync -ma --include='*/' --include='*.tap' --include='*.log' --include='Test*.webm' --exclude='*' . "$LOGS"
        fi
        for file in \
          {"${XDG_CACHE_HOME:-$HOME/.cache}/telepresence/logs","$HOME/Library/Logs/telepresence","$LOCALAPPDATA/telepresence/logs","."}/*.log
        do
          if [ -s "$file" ]; then
            cp -v "$file" "$LOGS" || true
          fi
        done
      shell: bash
      name: Gather logs
    - name: Upload logs
      uses: actions/upload-artifact@v4
      with:
        # If an environment variable LOG_SUFFIX is set, it will be appended to the log filename.
        name: ${{github.job}}-logs-${{ env.LOG_SUFFIX }}
        path: |
          test-logs/${{ runner.os }}/${{ runner.arch }}/*


================================================
FILE: .github/pull_request_template.md
================================================
## Description

A few sentences describing the overall goals of the pull request's commits.

## Checklist

<!--
  Please review the requirements for each checkbox, and check them
  off (change "[ ]" to "[x]") as you verify that they are complete.
-->

 - [ ] I made sure to update `./CHANGELOG.yml` (our release notes are generated from this file).
 - [ ] I made sure to add any documentation changes required for my change.
 - [ ] My change is adequately tested.
 - [ ] I updated `CONTRIBUTING.md` with any special dev tricks I had to use to work on this code efficiently.
 - [ ] Once my PR is ready to have integration tests ran, I posted the PR in #telepresence-oss channel on the
       [CNCF Slack](https://slack.cncf.io/) so that the "ok to test" label can be applied.

================================================
FILE: .github/workflows/dev.yaml
================================================
name: "Integration Tests"
on:
  pull_request:
    types:
      - labeled

permissions:
  contents: read
  pull-requests: write

env:
  TELEPRESENCE_REGISTRY: local

jobs:
  build_and_test:
    if: ${{ github.event.label.name == 'ok to test' || github.event.label.name == 'compatibility test' }}
    strategy:
      fail-fast: false
      matrix:
        runners:
          - ubuntu-latest
          # Re-enable when we can run a proper cluster. Colima almost works on macOS but the very limited
          # resources available make the test fail very often. On windows, we'll need WSL2
          # - macos-latest
          # - windows-latest
    runs-on: ${{ matrix.runners }}
    steps:
      - name: Remove ok to test label
        if: github.event.label.name == 'ok to test'
        uses: buildsville/add-remove-label@v2.0.1
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          labels: ok to test
          type: remove
      - name: Remove compatibility test label
        if: github.event.label.name == 'compatibility test'
        uses: buildsville/add-remove-label@v2.0.1
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          labels: compatibility test
          type: remove
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          ref: "${{ github.event.pull_request.head.sha }}"
      - name: install dependencies
        uses: ./.github/actions/install-dependencies
      - name: Get Telepresence Version
        id: version
        run: |
          v=$(go run build-aux/genversion/main.go ${{github.run_id}})
          echo "TELEPRESENCE_VERSION=$v" >> "$GITHUB_ENV"
          echo "TELEPRESENCE_SEMVER=${v#v}" >> "$GITHUB_ENV"
      - name: Start minikube
        if: runner.os == 'Linux'
        uses: medyagh/setup-minikube@latest
        with:
          kubernetes-version: v1.33.5
      - name: Build client
        run: make build
      - name: Build images
        run: make client-image tel2-image routecontroller-image
      - name: Load images into minikube
        run: |
          minikube image load ${{env.TELEPRESENCE_REGISTRY}}/telepresence:${{env.TELEPRESENCE_SEMVER}}
          minikube image load ${{env.TELEPRESENCE_REGISTRY}}/tel2:${{env.TELEPRESENCE_SEMVER}}
          minikube image load ${{env.TELEPRESENCE_REGISTRY}}/route-controller:${{env.TELEPRESENCE_SEMVER}}
      - name: Run integration tests
        if: github.event.label.name == 'ok to test'
        uses: nick-fields/retry/@v3
        with:
          max_attempts: 3
          shell: bash
          timeout_minutes: 90
          command: |
            set -ex
            if [[ ${RUNNER_OS} == "Windows" ]]; then
              export PATH="$PATH:/C/Program Files/SSHFS-Win/bin:$HOME/kubectl-plugins"
            fi
            make check-integration
      - name: Compatibility with older manager and agent
        if:  ${{ github.event.label.name == 'compatibility test' }}
        env:
          DEV_MANAGER_VERSION: "2.24.1"
          DEV_MANAGER_REGISTRY: ghcr.io/telepresenceio
        uses: nick-fields/retry/@v3
        with:
          max_attempts: 3
          shell: bash
          timeout_minutes: 90
          command: |
            set -ex
            if [[ ${RUNNER_OS} == "Windows" ]]; then
              export PATH="$PATH:/C/Program Files/SSHFS-Win/bin:$HOME/kubectl-plugins"
            fi
            make check-integration
      - name: Compatibility with older client
        if:  ${{ github.event.label.name == 'compatibility test' }}
        env:
          DEV_CLIENT_VERSION: "2.24.1"
          DEV_CLIENT_REGISTRY: ghcr.io/telepresenceio
        uses: nick-fields/retry/@v3
        with:
          max_attempts: 3
          shell: bash
          timeout_minutes: 90
          command: |
            set -ex
            if [[ ${RUNNER_OS} == "Windows" ]]; then
              export PATH="$PATH:/C/Program Files/SSHFS-Win/bin:$HOME/kubectl-plugins"
            fi
            make check-integration
      - uses: ./.github/actions/upload-logs
        env:
          LOG_SUFFIX: "${{ runner.os }}-${{ runner.arch }}-${{ matrix.clusters.distribution }}-${{ matrix.clusters.version }}"
        if: ${{ always() }}


================================================
FILE: .github/workflows/go-dependency-submission.yaml
================================================
name: Go Dependency Submission
on:
  push:
    branches:
      - release/v2

# The API requires write permission on the repository to submit dependencies
permissions:
  contents: write

jobs:
  go-action-detection:
    runs-on: ubuntu-latest
    steps:
      - name: 'Checkout Repository'
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: actions/setup-go@v5
        with:
          go-version: stable
      # we need fuseftp.bits
      - name: "Build dependencies"
        run: make build-deps

      - name: Run snapshot action
        uses: actions/go-dependency-submission@v1
        with:
          go-mod-path: go.mod
          go-build-target: cmd/telepresence/main.go


================================================
FILE: .github/workflows/image-scan.yaml
================================================
name: image-scan
on:
  push:
    branches:
      - release/v2
  pull_request:
jobs:
  trivy-container-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          ref: ${{ github.event.pull_request.head.sha }}
      - uses: actions/setup-go@v5
        with:
          go-version: stable
      - name: Build dev image
        run: |
          make save-tel2-image
      - name: Scan
        uses: aquasecurity/trivy-action@master
        with:
          input: build-output/tel2-image.tar
          format: sarif
          exit-code: 0 # only warn for now until we have backed it into our processes
          output: trivy-results.sarif
          ignore-unfixed: true
          vuln-type: "os,library"
          severity: "CRITICAL,HIGH"
          hide-progress: false
      - name: Upload Scan to GitHub Security Tab
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: "trivy-results.sarif"
  pass:
    name: image-scan
    needs:
      - trivy-container-scan
    runs-on: ubuntu-latest
    steps:
      - name: No-Op
        if: ${{ false }}
        run: "echo Pass"


================================================
FILE: .github/workflows/licenses.yaml
================================================
name: "License verification"
on:
  pull_request:
  workflow_dispatch:
jobs:
  dependency_info_linux:
    name: "Linux: Verify use of forbidden licenses"
    runs-on: ubuntu-latest
    outputs:
      is-up-to-date: ${{ steps.check.outputs.up-to-date }}
      diff: ${{ steps.check.outputs.diff }}
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          ref: "${{ github.event.pull_request.head.sha }}"
      - name: install dependencies
        uses: ./.github/actions/install-dependencies
      - name: "Generate dependency information"
        shell: bash
        run: make generate
      - name: "Update dependency information after dependabot change"
        uses: datawire/go-mkopensource/actions/save-dependabot-changes@v0.0.7
        id: changed-by-dependabot
        with:
          branches_to_skip: 'release/v2'
      - name: "Abort if dependencies changed"
        if: steps.changed-by-dependabot.outputs.is_dirty == 'true'
        run: |
          echo "Dependabot triggered a dependency update. Aborting workflow."
          exit 1
      - name: "Check dependency files are up-to-date"
        id: check
        shell: bash
        run: |
          set -e
          git add .
          if [[ -n "$(git status --porcelain)" ]]; then
            echo "diff=$(PAGER= git diff --cached 2>&1 | base64 -w0)" >> $GITHUB_OUTPUT
            echo "up-to-date=no" >> $GITHUB_OUTPUT
          else
            echo "up-to-date=yes" >> $GITHUB_OUTPUT
          fi
  up_to_date_check_linux:
    name: "Linux: Check out-of-date licenses"
    needs: dependency_info_linux
    runs-on: ubuntu-latest
    steps:
      - name: "Check dependency files are up-to-date"
        shell: bash
        run: |
          set -e
          if [[ "${{needs.dependency_info_linux.outputs.is-up-to-date}}" == "no" ]]; then
            echo '::error:: Changes detected after dependency generation. Run ' \
              '`make generate` and commit the latest version of the ' \
              'dependency information files'

            echo ${{needs.dependency_info_linux.outputs.diff}} | base64 -d
            exit 1
          fi

          echo '::info:: Files are up-to-date'


================================================
FILE: .github/workflows/release-teleroute.yaml
================================================
on:
  push:
    tags:
      # These aren't regexps. They are "Workflow Filter patterns"
      - teleroute-[0-9]+.[0-9]+.[0-9]

jobs:
  build-release:
    strategy:
      fail-fast: false
      matrix:
        architecture:
          - amd64
          - arm64
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-go@v5
        with:
          go-version: stable
      - name: Push image
        working-directory: ./cmd/teleroute
        env:
          PLUGIN_ARCH: ${{ matrix.architecture }}
          VER: ${{ github.ref }}
        run: |
          echo '${{ secrets.GITHUB_TOKEN }}' | docker login ghcr.io -u='${{ github.actor }}' --password-stdin
          PLUGIN_VERSION=${VER#refs/tags/teleroute-} make push


================================================
FILE: .github/workflows/release.yaml
================================================
name: Releases

on:
  push:
    tags:
      # These aren't regexps. They are "Workflow Filter patterns"
      - v[0-9]+.[0-9]+.[0-9]
      - v[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+
      - v[0-9]+.[0-9]+.[0-9]+-test.[0-9]+

env:
  TELEPRESENCE_REGISTRY: ghcr.io/telepresenceio

jobs:
  build-release:
    strategy:
      fail-fast: false
      matrix:
        runner:
          - ubuntu-latest
          - macos-latest
          - windows-latest
        arch:
          - amd64
          - arm64
    runs-on: ${{ matrix.runner }}
    env:
      GOARCH: ${{ matrix.arch }}
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: ./.github/actions/install-dependencies
        name: install dependencies
      - name: set version
        shell: bash
        run: echo "TELEPRESENCE_VERSION=${{ github.ref_name }}" >> $GITHUB_ENV
      - name: generate binaries
        run: make release-binary
      - name: Install WiX Toolset
        if: runner.os == 'Windows' && matrix.arch == 'amd64'
        shell: pwsh
        run: |
          dotnet tool install --global wix --version 6.0.2
          wix extension add -g WixToolset.BootstrapperApplications.wixext/6.0.2
          wix extension add -g WixToolset.UI.wixext/6.0.2
          wix extension add -g WixToolset.Util.wixext/6.0.2
      - name: Build WiX Installer
        if: runner.os == 'Windows' && matrix.arch == 'amd64'
        shell: bash
        run: |
          export PATH="$USERPROFILE/.dotnet/tools:$PATH"
          cd build-aux/wix-installer
          make bundle ARCH=${{ matrix.arch }}
          cp ../../build-output/bin/TelepresenceInstall.exe ../../build-output/release/telepresence-windows-${{ matrix.arch }}-setup.exe
      - name: Install nfpm
        if: runner.os == 'Linux'
        shell: bash
        run: |
          # Always download x86_64 nfpm since ubuntu-latest runners are x86_64
          # nfpm cross-compiles packages for the target arch specified in config
          curl -sfL "https://github.com/goreleaser/nfpm/releases/download/v2.44.1/nfpm_2.44.1_Linux_x86_64.tar.gz" | tar xz -C /tmp
          sudo mv /tmp/nfpm /usr/local/bin/nfpm
      - name: Build Linux Packages
        if: runner.os == 'Linux'
        shell: bash
        run: |
          cd build-aux/systemd-installer
          VERSION="${TELEPRESENCE_VERSION#v}" ARCH=${{ matrix.arch }} ./build-packages.sh
      - name: Upload binaries
        uses: actions/upload-artifact@v4
        with:
          name: binaries-${{ matrix.runner }}-${{ matrix.arch }}
          path: build-output/release
          retention-days: 1

  push-images:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: ./.github/actions/install-dependencies
        name: install dependencies
      - name: set version
        shell: bash
        run: |
          v=${{ github.ref_name }}
          echo "TELEPRESENCE_VERSION=$v" >> "$GITHUB_ENV"
          echo "TELEPRESENCE_SEMVER=${v#v}" >> "$GITHUB_ENV"
      - name: Setup docker buildx
        uses: docker/setup-buildx-action@v3
        with:
          platforms: linux/amd64,linux/arm64
      - name: Build image dependencies
        run: make images-deps
      - name: Make helm chart
        run: make helm-chart
      - name: Log in to registry
        run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
      - name: Push client image
        run: |
          docker buildx build --platform=linux/amd64,linux/arm64 --build-arg TELEPRESENCE_VERSION=${{env.TELEPRESENCE_SEMVER}} \
          --push --tag ${{env.TELEPRESENCE_REGISTRY}}/telepresence:${{env.TELEPRESENCE_SEMVER}} -f build-aux/docker/images/Dockerfile.client .
      - name: Push tel2 image
        run: |
          docker buildx build --platform=linux/amd64,linux/arm64 --build-arg TELEPRESENCE_VERSION=${{env.TELEPRESENCE_SEMVER}} \
          --push --tag ${{env.TELEPRESENCE_REGISTRY}}/tel2:${{env.TELEPRESENCE_SEMVER}} -f build-aux/docker/images/Dockerfile.traffic .
      - name: Push routeController image
        run: |
          docker buildx build --platform=linux/amd64,linux/arm64 \
          --push --tag ${{env.TELEPRESENCE_REGISTRY}}/route-controller:${{env.TELEPRESENCE_SEMVER}} -f build-aux/docker/images/Dockerfile.routecontroller .
      - name: Push Helm Chart
        run: helm push build-output/telepresence-oss-chart.tgz oci://${{env.TELEPRESENCE_REGISTRY}}
      - name: Log out from registry
        if: always()
        run: docker logout

  publish-release:
    runs-on: ubuntu-latest
    needs:
      - build-release
    outputs:
      draft: ${{ steps.semver_check.outputs.draft }}
      prerelease: ${{ steps.semver_check.outputs.prerelease }}
      semver: ${{ steps.semver_check.outputs.semver }}
    steps:
      - name: Download artifacts
        uses: actions/download-artifact@v4
      - name: Display structure of downloaded files
        run: ls -R
      - name: Determine if version is RC, TEST, or GA
        id: semver_check
        run: |
          v=${{ github.ref_name }}
          echo "semver=${v#v}" >> "$GITHUB_OUTPUT"
          if [[ "${v}" =~ ^v[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+$ ]]; then
            echo "make_latest=false" >> $GITHUB_OUTPUT
            echo "draft=false" >> $GITHUB_OUTPUT
            echo "prerelease=true" >> $GITHUB_OUTPUT
          elif [[ "${v}" =~ ^v[0-9]+.[0-9]+.[0-9]+-test.[0-9]+$ ]]; then
            echo "make_latest=false" >> $GITHUB_OUTPUT
            echo "draft=false" >> $GITHUB_OUTPUT
            echo "prerelease=true" >> $GITHUB_OUTPUT
          elif [[ "${v}" =~ ^v[0-9]+.[0-9]+.[0-9]+-draft.[0-9]+$ ]]; then
            echo "make_latest=false" >> $GITHUB_OUTPUT
            echo "draft=true" >> $GITHUB_OUTPUT
            echo "prerelease=false" >> $GITHUB_OUTPUT
          else
            echo "make_latest=true" >> $GITHUB_OUTPUT
            echo "draft=false" >> $GITHUB_OUTPUT
            echo "prerelease=false" >> $GITHUB_OUTPUT
          fi
      - name: Create draft release
        if: ${{ steps.semver_check.outputs.draft == 'true' }}
        uses: ncipollo/release-action@v1
        with:
          artifacts: "binaries-*/*"
          token: ${{ secrets.GITHUB_TOKEN }}
          draft:
          tag: ${{ github.ref_name }}
          body: |
            ## Draft Release
            For more information, visit our [installation docs](https://www.telepresence.io/docs/latest/quick-start).
      - name: Create release
        if: ${{ steps.semver_check.outputs.draft == 'false' }}
        uses: ncipollo/release-action@v1
        with:
          artifacts: "binaries-*/*"
          token: ${{ secrets.GITHUB_TOKEN }}
          prerelease: ${{ steps.semver_check.outputs.prerelease }}
          makeLatest: ${{ steps.semver_check.outputs.make_latest }}
          tag: ${{ github.ref_name }}
          body: |
            ## Official Release Artifacts

            ### Installers (with root daemon as a system service)
            These installers include the option to run the root daemon as a system service, eliminating the need for elevated privileges when using Telepresence.

            | Platform | Architecture | Package |
            |----------|--------------|---------|
            | Linux (Debian/Ubuntu) | amd64 | [telepresence-linux-amd64.deb](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-${{ steps.semver_check.outputs.semver }}-linux-amd64.deb) |
            | Linux (Debian/Ubuntu) | arm64 | [telepresence-linux-arm64.deb](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-${{ steps.semver_check.outputs.semver }}-linux-arm64.deb) |
            | Linux (Fedora/RHEL) | amd64 | [telepresence-linux-amd64.rpm](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-${{ steps.semver_check.outputs.semver }}-linux-amd64.rpm) |
            | Linux (Fedora/RHEL) | arm64 | [telepresence-linux-arm64.rpm](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-${{ steps.semver_check.outputs.semver }}-linux-arm64.rpm) |
            | macOS | amd64 | [telepresence-darwin-amd64.pkg](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-darwin-amd64.pkg) |
            | macOS | arm64 | [telepresence-darwin-arm64.pkg](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-darwin-arm64.pkg) |
            | Windows | amd64 | [telepresence-windows-amd64-setup.exe](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-windows-amd64-setup.exe) |
            | Windows | arm64 | *Not available — WinFSP and SSHFS-Win installers lack arm64 versions. Use the zip file below.* |

            ### Standalone Binaries
            Standalone binaries for manual installation. The root daemon runs on-demand with elevated privileges.

            | Platform | Architecture | Binary |
            |----------|--------------|--------|
            | Linux | amd64 | [telepresence-linux-amd64](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-linux-amd64) |
            | Linux | arm64 | [telepresence-linux-arm64](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-linux-arm64) |
            | macOS | amd64 | [telepresence-darwin-amd64](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-darwin-amd64) |
            | macOS | arm64 | [telepresence-darwin-arm64](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-darwin-arm64) |
            | Windows | amd64 | [telepresence-windows-amd64.zip](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-windows-amd64.zip) |
            | Windows | arm64 | [telepresence-windows-arm64.zip](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-windows-arm64.zip) |

            ### Helm Chart
               - 📦 [Telepresence Helm Chart](https://artifacthub.io/packages/helm/telepresence-oss/telepresence-oss/${{ steps.semver_check.outputs.semver }})

            For more information, visit our [installation docs](https://www.telepresence.io/docs/quick-start).
      - uses: actions/checkout@v4
        if: ${{ steps.semver_check.outputs.make_latest == 'true' }}
      - name: Update Homebrew
        if: ${{ steps.semver_check.outputs.make_latest == 'true' }}
        run: |
          v=${{ github.ref_name }}
          packaging/homebrew-package.sh "${v#v}" "${{ vars.GH_BOT_USER }}" "${{ vars.GH_BOT_EMAIL }}" "${{ secrets.HOMEBREW_TAP_TOKEN }}"

  prune-images:
    if: ${{ always() }}
    runs-on: ubuntu-latest
    permissions:
      packages: write
    needs:
      - push-images
    steps:
      - name: Prune tel2 and telepresence
        uses: dataaxiom/ghcr-cleanup-action@v1
        with:
          owner: telepresenceio
          packages: tel2,telepresence
          token: ${{ secrets.GITHUB_TOKEN }}
          delete-untagged: true
          delete-ghost-images: true
          delete-partial-images: true
          delete-orphaned-images: true

  build-macos-pkg:
    # This job builds signed and notarized macOS .pkg installers.
    # It uses a protected environment requiring approval from authorized reviewers.
    # If not approved, the release proceeds without .pkg installers (standalone binaries are still available).
    environment: macos-signing
    needs:
      - publish-release
    strategy:
      fail-fast: false
      matrix:
        arch:
          - amd64
          - arm64
    runs-on: macos-latest
    env:
      GOARCH: ${{ matrix.arch }}
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: ./.github/actions/install-dependencies
        name: install dependencies
      - name: set version
        shell: bash
        run: echo "TELEPRESENCE_VERSION=${{ github.ref_name }}" >> $GITHUB_ENV
      - name: generate binaries
        run: make release-binary
      - name: Import Apple certificates
        env:
          MACOS_CERTIFICATE_P12: ${{ secrets.MACOS_CERTIFICATE_P12 }}
          MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
        run: |
          # Create a temporary keychain
          KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
          KEYCHAIN_PASSWORD=$(openssl rand -base64 32)

          security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"
          security set-keychain-settings -lut 21600 "$KEYCHAIN_PATH"
          security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"

          # Import certificates from base64-encoded P12
          echo "$MACOS_CERTIFICATE_P12" | base64 --decode > $RUNNER_TEMP/certificate.p12
          security import $RUNNER_TEMP/certificate.p12 -P "$MACOS_CERTIFICATE_PASSWORD" -A -t cert -f pkcs12 -k "$KEYCHAIN_PATH"
          rm $RUNNER_TEMP/certificate.p12

          # Add keychain to search list and set as default
          security list-keychain -d user -s "$KEYCHAIN_PATH" login.keychain
          security default-keychain -s "$KEYCHAIN_PATH"

          # Allow codesign to access the keychain without prompting
          security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"

          # Store keychain path for cleanup
          echo "KEYCHAIN_PATH=$KEYCHAIN_PATH" >> $GITHUB_ENV

      - name: Build signed macOS Installer
        env:
          MACOS_SIGN_APPLICATION: ${{ secrets.MACOS_SIGN_APPLICATION }}
          MACOS_SIGN_INSTALLER: ${{ secrets.MACOS_SIGN_INSTALLER }}
          MACOS_NOTARIZE_APPLE_ID: ${{ secrets.MACOS_NOTARIZE_APPLE_ID }}
          MACOS_NOTARIZE_TEAM_ID: ${{ secrets.MACOS_NOTARIZE_TEAM_ID }}
          MACOS_NOTARIZE_PASSWORD: ${{ secrets.MACOS_NOTARIZE_PASSWORD }}
        run: |
          cd build-aux/pkg-installer
          VERSION="${TELEPRESENCE_VERSION#v}" ARCH=${{ matrix.arch }} ./build-pkg.sh

      - name: Cleanup macOS keychain
        if: always() && env.KEYCHAIN_PATH != ''
        run: |
          security delete-keychain "$KEYCHAIN_PATH" || true

      - name: Add signed package to release
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          cp build-output/Telepresence.pkg telepresence-darwin-${{ matrix.arch }}.pkg
          gh release upload ${{ github.ref_name }} telepresence-darwin-${{ matrix.arch }}.pkg --clobber

  test-release:
    needs:
      - push-images
      - publish-release
    if: ${{ needs.publish-release.outputs.draft == 'false' }}
    strategy:
      fail-fast: false
      matrix:
        runner:
          - ubuntu-latest
          - macos-latest
          - windows-latest
        arch:
          - amd64
          - arm64
    runs-on: ${{ matrix.runner }}
    steps:
      - name: download binary
        env:
          DOWNLOAD_URL: "https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}"
        shell: bash
        run: |
          if [ "${{ runner.os }}" = "macOS" ]; then
            curl -fL ${{ env.DOWNLOAD_URL }}/telepresence-darwin-${{ matrix.arch }} -o ./telepresence || { echo "Curl command failed" ; exit 1; }
          elif [ "${{ runner.os }}" = "Windows" ]; then
            curl -fL ${{ env.DOWNLOAD_URL }}/telepresence-windows-${{ matrix.arch }}.zip -o ./telepresence.zip || { echo "Curl command failed" ; exit 1; }
            unzip ./telepresence.zip || { echo "Unzip command failed" ; exit 1; }
          else
              curl -fL ${{ env.DOWNLOAD_URL }}/telepresence-linux-${{ matrix.arch }} -o ./telepresence || { echo "Curl command failed" ; exit 1; }
          fi
      - name: test binary
        shell: bash
        if: ${{ !((runner.os == 'Linux' || runner.os == 'Windows') && runner.arch == 'X64' && matrix.arch == 'arm64') }}
        run: |
          chmod +x ./telepresence

          output=$(./telepresence version)

          if [ $? -eq 0 ]; then
              echo "Telepresence command executed successfully"
          else
              echo "Telepresence command failed"
              exit 1
          fi

          echo "$output" | grep -q "Client\s*:\s*${{ github.ref_name }}"

          if [ $? -eq 0 ]; then
              echo "Version match!"
          else
              echo "Version does not match!"
              exit 1
          fi

================================================
FILE: .github/workflows/stale.yaml
================================================
name: 'Close stale issues and PR'
on:
  schedule:
    - cron: '12 10 * * *'

jobs:
  stale:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/stale@v9
        with:
          stale-issue-message: 'This issue is stale because it has been open 60 days with no activity. Remove stale label or comment, or this will be closed in 7 days.'
          stale-pr-message: 'This PR is stale because it has been open 30 days with no activity. Remove stale label or comment, or this will be closed in 14 days.'
          close-issue-message: 'This issue was closed because it has been stalled for 7 days with no activity.'
          close-pr-message: 'This PR was closed because it has been stalled for 14 days with no activity.'
          days-before-issue-stale: 60
          days-before-pr-stale: 30
          days-before-issue-close: 7
          days-before-pr-close: 14
          operations-per-run: 80
          exempt-issue-labels: feature,friction


================================================
FILE: .github/workflows/unit_tests.yaml
================================================
name: "Build and Unit test"
on:
  pull_request:
env:
  HOMEBREW_NO_INSTALL_FROM_API:
jobs:
  unit:
    strategy:
      fail-fast: false
      matrix:
        runners:
          - ubuntu-latest
          - macos-latest
          - windows-latest
    runs-on: ${{ matrix.runners }}
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          ref: "${{ github.event.pull_request.head.sha }}"
      - name: install dependencies
        uses: ./.github/actions/install-dependencies
      - name: install build dependencies
        run: make build-deps
      - name: Lint
        if: ${{ runner.os != 'Windows' }}
        uses: golangci/golangci-lint-action@v7
        with:
          args: --timeout 8m ./...
      - name: Lint (limited on windows)
        if: ${{ runner.os == 'Windows' }}
        uses: golangci/golangci-lint-action@v7
        with:
          args: --timeout 8m ./cmd/telepresence/... ./integration_test/... ./pkg/...
      - name: Build
        run: make build
      - name: Run tests
        uses: nick-fields/retry/@v3
        with:
          max_attempts: 3
          timeout_minutes: 12
          command: make check-unit


================================================
FILE: .gitignore
================================================
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib

# Test binary, built with `go test -c`
*.test

# Output of the go coverage tool, specifically when used with LiteIDE
*.out

# Dependency directories
vendor/

# Editor nonsense
.vscode
.idea
*.iml
*.swp
.DS_Store

build-output
/tools/*
!/tools/src/

# Don't accidentally add files from `go build`
telepresence
traffic
tst-manager
!/cmd/*/
mcp-tools.json

# Include Chart directory
!/charts/telepresence-oss
# But don't include this one
/charts/telepresence-oss/k8s-defs.json

# Downloaded fuseftp bits
fuseftp.bits

# Needed to build on windows
.wintools
.gocache

# Don't accidentally add binaries built byintegration tests
/integration_test/testdata/echo-server/echo-server
/build-aux/genversion/genversion

# Vagrant
.vagrant/
tests.log
/.claude/settings.local.json
/bugs/


================================================
FILE: .golangci.yml
================================================
version: "2"
run:
  build-tags:
    - citest
  modules-download-mode: readonly
linters:
  enable:
    - asasalint
    - asciicheck
    - bidichk
    - bodyclose
    - copyloopvar
    - cyclop
    - decorder
    - depguard
    - dogsled
    - durationcheck
    - errname
    - forbidigo
    - gochecknoglobals
    - gocognit
    - gocritic
    - gocyclo
    - godot
    - goheader
    - gomodguard
    - goprintffuncname
    - grouper
    - importas
    - lll
    - loggercheck
    - makezero
    - misspell
    - nakedret
    - nolintlint
    - nosprintfhostport
    - prealloc
    - predeclared
    - reassign
    - unconvert
    - unparam
    - usestdlibvars
    - whitespace
  disable:
    - containedctx
    - contextcheck
    - dupl
    - err113
    - errchkjson
    - errorlint
    - exhaustive
    - exhaustruct
    - forcetypeassert
    - funlen
    - gochecknoinits
    - goconst
    - godox
    - gomoddirectives
    - gosec
    - interfacebloat
    - ireturn
    - maintidx
    - nestif
    - nilerr
    - nilnil
    - nlreturn
    - noctx
    - nonamedreturns
    - paralleltest
    - promlinter
    - revive
    - rowserrcheck
    - sqlclosecheck
    - tagliatelle
    - testpackage
    - thelper
    - tparallel
    - varnamelen
    - wastedassign
    - wrapcheck
    - wsl
  settings:
    cyclop:
      max-complexity: 32
    depguard:
      rules:
        main:
          files:
            - $all
          deny:
            - pkg: io/ioutil
              desc: '`io/ioutil` is deprecated in Go 1.16, use `io` or `os` instead'
            - pkg: syscall
              desc: Use `golang.org/x/sys/...` instead of `syscall`
            - pkg: github.com/golang/protobuf
              desc: Use `google.golang.org/protobuf` instead of `github.com/golang/protobuf`
            - pkg: github.com/kballard/go-shellquote
              desc: Use `github.com/telepresenceio/telepresence/pkg/shellquote.ShellString` instead of `github.com/kballard/go-shellquote.Join`
    forbidigo:
      forbid:
        - pattern: '^os\.IsNotExist$'
          msg: Use errors.Is(err, fs.ErrNotExist)
    gocognit:
      min-complexity: 60
    gocyclo:
      min-complexity: 35
    gomodguard:
      blocked:
        modules:
          - gotest.tools:
              recommendations:
                - github.com/stretchr/testify
                - github.com/google/go-cmp/cmp
          - gotest.tools/v2:
              recommendations:
                - github.com/stretchr/testify
                - github.com/google/go-cmp/cmp
          - gotest.tools/v3:
              recommendations:
                - github.com/stretchr/testify
                - github.com/google/go-cmp/cmp
    lll:
      line-length: 180
      tab-width: 2
    nolintlint:
      require-explanation: true
      require-specific: true
      allow-no-explanation:
        - gocognit
      allow-unused: true
    prealloc:
      range-loops: false
    staticcheck:
      checks:
        - all
        # Don't check "Apply De Morgan's law".
        # https://staticcheck.dev/docs/checks/#QF1001
        - -QF1001
        # Don't check "Incorrect or missing package comment".
        # https://staticcheck.dev/docs/checks/#ST1000
        - -ST1000
        # Don't check "Poorly chosen identifier".
        # https://staticcheck.dev/docs/checks/#ST1003
        - -ST1003


  exclusions:
    generated: lax
    rules:
      - linters:
          - const
          - dupl
          - gochecknoglobals
          - goconst
          - golint
          - lll
          - unparam
        path: _test\.go
      - path: (.+)\.go$
        text: Error return value of `(\w+\.)+(Close|CloseSend|Flush|Remove|(Un)?Setenv|(Fp|P)rint(f|ln))\` is not checked
      - path: (.+)\.go$
        text: 'structtag: struct field \w+ repeats json tag'
      - path: (.+)\.go$
        text: Subprocess launched with function call as argument or cmd arguments
      - linters:
          - cyclop
        path: (.+)_test\.go
    paths:
      - third_party$
      - builtin$
      - examples$
issues:
  max-same-issues: 0
formatters:
  enable:
    - gofmt
    - gofumpt
  exclusions:
    generated: lax
    paths:
      - third_party$
      - builtin$
      - examples$


================================================
FILE: .mailmap
================================================
Alex Gervais <alex@datawire.io>                        alex <alex@datawire.io>
Alex Gervais <alex@datawire.io>                        <alex.gervais@gmail.com>
Donny Yung <donaldyung@datawire.io>                    <donaldryung@gmail.com>
Flynn <flynn@datawire.io>                              <kflynn@users.noreply.github.com>
John Esmet <johnesmet@datawire.io>                     <jesmet@appnexus.com>
Luke Shumaker <lukeshu@datawire.io>                    <lukeshu@lukeshu.com>
Maxime Legault-Venne <maximelegaultvenne@datawire.io>  <mlegoven@hotmail.com>
Rafael Schloming <rhs@datawire.io>                     <rhs@alum.mit.edu>
Thomas Hallgren <thomas@datawire.io>                   <thomas@tada.se>

Abhay Saxena <ark3@email.com>            <ark3@datawire.io>
Alvaro Saurin <alvaro.saurin@gmail.com>  <1841612+inercia@users.noreply.github.com>
Philip Lombardi <plombardi89@gmail.com>  plombardi <plombardi89@gmail.com>
Philip Lombardi <plombardi89@gmail.com>  <893096+plombardi89@users.noreply.github.com>
Philip Lombardi <plombardi89@gmail.com>  <plombardi@datawire.io>


================================================
FILE: .protolint.yaml
================================================
lint:
  # Which rules to enable/disable.
  rules:
    remove:
      - ENUM_FIELD_NAMES_PREFIX
  # Settings for those rules.
  rules_option:
    max_line_length:
      max_chars: 120


================================================
FILE: CHANGELOG.OLD.md
================================================
# Changelog

### 2.13.3 (May 25, 2023)

- Feature: Add `.Values.hooks.curl.imagePullSecrets` and `.Values.hooks.curl.imagePullSecrets` to Helm values.
  PR [3079](https://github.com/telepresenceio/telepresence/pull/3079).

- Change: The default setting of the reinvocationPolicy for the mutating webhook dealing with agent injections
  changed from `Never` to `IfNeeded`.

- Bugfix: The `eks.amazonaws.com/serviceaccount` volume injected by EKS is now exported and remotely mounted
  during an intercept.
  Ticket [3166](https://github.com/telepresenceio/telepresence/issues/3166).

- Bugfix: The mutating webhook now correctly applies the namespace selector even if the cluster version contains
  non-numeric characters. For example, it can now handle versions such as Major:"1", Minor:"22+".
  PR [3184](https://github.com/telepresenceio/telepresence/pull/3184).

- Bugfix: The "telepresence" Docker network will now propagate DNS AAAA queries to the Telepresence DNS resolver when
  it runs in a Docker container.
  Ticket [3179](https://github.com/telepresenceio/telepresence/issues/3179).

- Bugfix: Running `telepresence intercept --local-only --docker-run` no longer  results in a panic.
  Ticket [3171](https://github.com/telepresenceio/telepresence/issues/3171).

- Bugfix: Running `telepresence intercept --local-only --mount false` no longer results in an incorrect error message
  saying "a local-only intercept cannot have mounts".
  Ticket [3171](https://github.com/telepresenceio/telepresence/issues/3171).

- Bugfix: The helm chart now correctly handles custom `agentInjector.webhook.port` that was not being set in hook URLs.
  PR [3161](https://github.com/telepresenceio/telepresence/pull/3161).

- Bugfix: `.intercept.disableGlobal` and `.timeouts.agentArrival` are now correctly honored.

### 2.13.2 (May 12, 2023)
- Bugfix: Replaced `/` characters with a `-` when the authenticator service creates the kubeconfig in the Telepresence cache.
  PR [3167](https://github.com/telepresenceio/telepresence/pull/3167).

- Feature: Configurable strategy (`auto`, `powershell`. or `registry`) to set the global DNS search path on Windows. Default
  is `auto` which means try `powershell` first, and if it fails, fall back to `registry`.
  Ticket [3152](https://github.com/telepresenceio/telepresence/issues/3152).

- Feature: The timeout for the traffic manager to wait for traffic agent to arrive can
  now be configured in the `values.yaml` file using `timeouts.agentArrival`. The default
  timeout is still 30 seconds.
  PR [3148](https://github.com/telepresenceio/telepresence/pull/3148).

- Bugfix: The automatic discovery of a local container based cluster (minikube or kind) used when the
  Telepresence daemon runs in a container, now works on macOS and Windows, and with different profiles,
  ports, and cluster names
  PR [3165](https://github.com/telepresenceio/telepresence/pull/3165).

- Bugfix: FTP Stability improvements. Multiple simultaneous intercepts can transfer large files in bidirectionally and in parallel.
  PR [3157](https://github.com/telepresenceio/telepresence/pull/3157).

- Bugfix: Pods using persistent volumes no longer causes timeouts when intercepted.

- Bugfix: Ensure that `telepresence connect` succeeds even though DNS isn't configured correctly.
  Ticket [3143](https://github.com/telepresenceio/telepresence/issues/3143).
  PR [3154](https://github.com/telepresenceio/telepresence/pull/3154).

- Bugfix: The traffic-manager would sometimes panic with a "close of closed channel" message and exit.
  PR [3160](https://github.com/telepresenceio/telepresence/pull/3160).

- Bugfix: The traffic-manager would sometimes panic and exit after some time due to a type cast panic.
  Ticket [3149](https://github.com/telepresenceio/telepresence/issues/3149).

### 2.13.1 (April 20, 2023)

- Change: Update ambassador-agent to version 1.13.13

### 2.13.0 (April 18, 2023)

- Feature: The Docker network used by a Kind or Minikube (using the "docker" driver) installation, is automatically
  detected and connected to a Docker container running the Telepresence daemon.

- Feature: Mapped namespaces are included in the output of the `telepresence status` command.

- Feature: There's a new --address flag to the intercept command allowing users to set the target IP of the intercept.

- Feature: The new flags `--docker-build`, and `--docker-build-opt` was added to `telepresence intercept` to facilitate a
  docker run directly from a docker context.

- Bugfix: Using `telepresence intercept --docker-run` now works with a container based daemon started with `telepresence connect --docker`

- Bugfix: DNS works properly even when no cluster subnet is routed by the Telepresence VIF.

- Bugfix: The Traffic Manager uses a fail-proof way to determine the cluster domain.

- Bugfix: DNS on windows is more reliable and performant.

- Bugfix: The agent is now correctly injected even with a high number of deployment starting at the same time.

- Bugfix: The kubeconfig is made self-contained before running Telepresence daemon in a Docker container.

- Bugfix: The client will no longer need cluster wide permissions when connected to a namespace scoped Traffic Manager.

- BugFix: The version command won't throw an error anymore if there is no kubeconfig file defined.

### 2.12.2 (April 4, 2023)

- Security: Update golang to 1.20.3 to address CVE-2023-24534, CVE-2023-24536, CVE-2023-24537, CVE-2023-24538

### 2.12.1 (March 22, 2023)

- Bugfix: Illegal characters are now replaced when a docker container name is generated from a kubernetes context name.

### 2.12.0 (March 20, 2023)

- Feature: Telepresence can now start or connect to a daemon in a docker container by use of the global `--docker` flag.

- Feature: Adds an authenticator package to support integration with the [client-go credential](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins) plugins when the
  daemon runs in a docker container.

- Feature: The `telepresence helm` command now accepts a `--namespace` flag.

- Change: Telepresence will now detect if services and pods are routable, independently of one another, before adding their routes. This is a change from before, when being already able to connect to pods prevented the addition of routes for services too.

- Bugfix: The traffic-manager will no longer panic when the CNAME of kubernetes.default doesn't contain .svc.

- Bugfix: The `telepresence helm install/upgrade --set` family of flags now work correctly with comma separated values.

### 2.11.1 (February 27, 2023)

- Bugfix: The multi-arch build now for the proprietary traffic-manager and traffic-agent now works for both amd64 and arm64.

### 2.11.0 (February 22, 2023)

- Feature: When Telepresence detects that it runs in a docker container, it will now expose its DNS on `localhost:53`. This makes the
  container itself a DNS server. Very handy when other containers use `--network container:[tp-container]`.

- Feature: A new flag, `--local-mount-port <port>` will make `telepresence intercept --detailed-output --output=[yaml|json]` create
  a bridge to the remote SFTP service instead of starting an sshfs client. This enables the sshfs client to be started outside of the
  container, and thus, mount filesystems that then can be used as source for volumes that other containers will use.

- Feature: The Telepresence daemon can now run as a long-lived process in a docker container so that CLI commands that
  run in other containers can use a common daemon for network access and intercepts.

- Feature: A new boolean flag `--detailed-output` was added to the `telepresence intercept` command. It will output very
  detailed information about an intercept when used together with `--output=[json|yaml]`.
  Pull Request [3013](https://github.com/telepresenceio/telepresence/pull/3013).

- Feature: IPv6 support. Thanks to [@0x6a77](https://www.github.com/0x6a77).
  Ticket [2978](https://github.com/telepresenceio/telepresence/issues/2978).

- Feature: Adds two parameters `--also-proxy` and `--never-proxy` to the `telepresence connect` command.
  Ticket [2950](https://github.com/telepresenceio/telepresence/issues/2950).

- Feature: Add a parameter `--manager-namespace` to the `telepresence connect` command.
  Ticket [2968](https://github.com/telepresenceio/telepresence/issues/2968)

- Feature: Add a configuration `cluster.defaultManagerNamespace` for setting the default manager namespace.
  Ticket [2968](https://github.com/telepresenceio/telepresence/issues/2968)

- Change: The namespace of the connected manager is now displayed in the `telepresence status` output.
  Ticket [2968](https://github.com/telepresenceio/telepresence/issues/2968)

- Change: Depreciate `--watch` flag in `telepresence list` command. This is now covered by `--output json-stream`

- Change: Add `--output` option `json-stream`

- Bugfix: Fixed a bug when detecting VPN conflicts on macOS that removed conflicting gateway links.

- Bugfix: Fixed a bug where connecting to certain VPNs that map the CIDR range of the cluster would result in no routes getting added.
  Ticket [3006](https://github.com/telepresenceio/telepresence/issues/3006)

- Bugfix: Support ARM64 architecture
  Ticket [2786](https://github.com/telepresenceio/telepresence/issues/2786)

### 2.10.6 (February 14, 2023)

Security release to rebuild with go 1.19.6

### 2.10.5 (February 6, 2023)

- Change: mTLS Secrets will now be mounted into the traffic agent, instead of expected to be read by it from the API.

- Bugfix: Fixed a bug that prevented the local daemons from automatically reconnecting to the traffic manager when the network connection was lost.

### 2.10.4 (January 20, 2023)

- Bugfix: Fix backward compatibility issue when using traffic-managers of version 2.9.5 or older.

### 2.10.2 (January 16, 2023)

- Bugfix: Ensure that CLI and user-daemon binaries are the same version when running `telepresence helm install`
  or `telepresence helm upgrade`.

### 2.10.1 (January 11, 2023)

- Bugfix: Fixed a regex in our release process.

### 2.10.0 (January 11, 2023)

- Feature: The Traffic Manager can now be set to either "team" mode or "single user" mode.
  When in team mode, intercepts will default to http intercepts.

- Feature: The `telepresence helm` sub-commands `insert` and `upgrade` now accepts all types
  of helm `--set-XXX` flags.

- Feature: A new `telepresence helm upgrade` command was added with the additional flags
  `--reuse-values` and `--reset-values`. This means that the `telpresence helm install --upgrade`
  flag has been deprecated.

- Feature: Image pull secrets for the traffic-agent can now be added using the Helm chart setting
  `agent.image.pullSecrets`.

- Change: The configmap `traffic-manager-clients` has been renamed to `traffic-manager`.

- Change: The Helm installation will now fail if `intercept.disableGlobal=true` and `traffiManager.mode`
  is not set to `team`.

- Change: If the cluster is Kubernetes 1.21 or later, the mutating webhook will find the correct namespace
  using the label `kubernetes.io/metadata.name` rather than `app.kuberenetes.io/name`. Ticket [2913](https://github.com/telepresenceio/telepresence/issues/2913).

- Change: The name of the mutating webhook now contains the namespace of the traffic-manager so
  that the webhook is easier to identify when there are multiple namespace scoped telepresence
  installations in the cluster.

- Change: The OSS Helm chart is no longer pushed to the datawire Helm repository. It will
  instead be pushed from the telepresence proprietary repository. The OSS Helm chart is still
  what's embedded in the OSS telepresence client. PR [2943](https://github.com/telepresenceio/telepresence/pull/2943).

- Bugfix: Telepresence no longer panics when `--docker-run` is combined with `--name <name>` instead of
  `--name=<name>`. Ticket [2953](https://github.com/telepresenceio/telepresence/issues/2953).

- Bugfix: Telepresence traffic-manager extracts the cluster domain (e.g. "cluster.local") using a CNAME lookup for "kubernetes.default"
  instead of "kubernetes.default.svc".

- Bugfix: A timeout was added to the pre-delete hook `uninstall-agents`, so that a helm uninstall doesn't
  hang when there is no running traffic-manager. PR [2937](https://github.com/telepresenceio/telepresence/pull/2937).

### 2.9.5 (December 8, 2022)

- Security: Update golang to 1.19.4 to address
  [CVE-2022-41720 and CVE-2022-41717](https://groups.google.com/g/golang-announce/c/L_3rmdT0BMU).

- Bugfix: A regression that was introduced in 2.9.3, preventing use of gce authentication without also
  having a config element present in the gce configuration in the kubeconfig, has been fixed.

### 2.9.4 (December 5, 2022)

- Feature: The traffic-manager can automatically detect that the node subnets are different from the
  pod subnets, and switch detection strategy to instead use subnets that cover the pod IPs.

- Bugfix: The `telepresence helm` command `--set x=y` flag didn't correctly set values of other types
  than `string`. The code now uses standard Helm semantics for this flag.

- Bugfix: Telepresence now uses the correct `agent.image` properties in the Helm chart when copying
  agent image settings from the `config.yml` file.

- Bugfix: Initialization of FTP type file sharing is delayed, so that setting it using the Helm chart
  value `intercept.useFtp=true` works as expected.

- Bugfix: The port-forward that is created when Telepresence connects to a cluster is now properly
  closed when `telepresence quit` is called.

- Bugfix: The user daemon no longer panics when the `config.yml` is modified at a time when the user daemon
  is running but no session is active.

- Bugfix: Fix race condition that would occur when `telepresence connect` `telepresence leave` was called
  several times in rapid succession.

### 2.9.3 (November 23, 2022)

- Feature: The helm chart now supports `livenessProbe` and `readinessProbe` for the traffic-manager
  deployment, so that the pod automatically restarts if it doesn't respond.

- Change: The root daemon now communicates directly with the traffic-manager instead of routing all
  outbound traffic through the user daemon.

- Change: The output of `telepresence version` is now aligned and no longer contains "(api v3)"

- Bugfix: Using `telepresence loglevel LEVEL` now also sets the log level in the root daemon.

- Bugfix: Multi valued kubernetes flags such as `--as-group` are now propagated correctly.

- Bugfix: The root daemon would sometimes hang indefinitely when quit and connect were called
  in rapid succession.

- Bugfix: Don't use `systemd.resolved` base DNS resolver unless cluster is proxied.

### 2.9.2 (November 16, 2022)

- Bugfix: Fix panic when connecting to an older traffic-manager.

- Bugfix: Fix `http-header` flag sometimes wouldn't propagate correctly.

### 2.9.1 (November 15, 2022)

- Bugfix: Fix regression in 2.9.0 causing `no Auth Provider found for name “gcp”` when connecting.

### 2.9.0 (November 15, 2022)

- Feature: A new `telepresence config view` command was added that shows how the client is currently configured.

- Feature: The traffic-manager can now configure all clients that connect through the `client:` map in
  the `values.yaml` file.

- Feature: The traffic-manager version is now included in the output from the `telepresence version` command.
- Feature: add `podLabels` values to Helm Chart to add extra labels to deployment.

- Feature: The telepresence flag `--output` now accepts `yaml` as a valid format.

- Change: The `telepresence status --json` flag is deprecated. Use `telepresence status --output=json` instead.

- Bugfix: Informational messages that don't really originate from the command, such as "Launching Telepresence Root Daemon",
  or "An update of telepresence ...", are discarded instead of being printed as plain text before the actual formatted
  output when using the `--output=json`.

- Bugfix: An attempt to use an invalid value for the global `--output` flag now renders a proper error message.

- Bugfix: Unqualified service names now resolves OK when using `telepresence intercept --docker-run`.

- Bugfix: Files lingering under /etc/resolver on macOS are now removed when a new root daemon starts.

### 2.8.5 (November 2, 2022)

- Change: This is a security release. It's identical with 2.8.3 but built using Go 1.19.3 to address
  [CVE-2022-41716 and Go issue https://go.dev/issue/56284](https://github.com/golang/go/issues/56284).

### 2.8.4 (November 2, 2022)

- Change: Failed security release. Use 2.8.5.

### 2.8.3 (October 27, 2022)

- Feature: The traffic-manager can be configured to disable global (non-http) intercepts using the
  Helm chart setting `intercept.disableGlobal`.

- Feature: The port used for the mutating webhook can be configured using the Helm chart setting
  `agentInjector.webhook.port`.

- Feature: A new repeated `--set a.b.c=v` flag was added to the `telepresence helm install` command so that
  values can be passed directly from the command line, without first storing them in a file.

- Change: The default port for the mutating webhook is now `443`. It used to be `8443`.

- Change: The traffic-manager will no longer default to use the `tel2` image for the traffic-agent when it is
  unable to connect to Ambassador Cloud. Air-gapped environments must declare what image to use in the Helm chart.

- Bugfix: `telepresence connect` now works as long as the traffic manager is installed, even if
  it wasn't installed via `helm install`

- Bugfix: Telepresence check-vpn no longer crashes when the daemons don't start properly.

- Bugfix: The root daemon no longer crashes when the session boot times out before the cluster connection succeeds.

### 2.8.2 (October 15, 2022)

- Feature: The Telepresence DNS resolver is now capable of resolving queries of type `A`, `AAAA`, `CNAME`,
  `MX`, `NS`, `PTR`, `SRV`, and `TXT`.

- Feature: A new `client` struct was added to the Helm chart. It contains a `connectionTTL` that controls
  how long the traffic manager will retain a client connection without seeing any sign of life from the client.

- Feature: A `dns` struct container the fields `includeSuffixes` and `excludeSuffixes` was added to the Helm
  chart `client` struct, making those values configurable per cluster.

- Feature: The API port used by the traffic-manager is now configurable using the Helm chart value `apiPort`.
  The default port is 8081.

- Change: The Helm chart `dnsConfig` was deprecated but retained for backward compatibility. The fields
  `alsoProxySubnets` and `neverProxySubnets` can now be found under `routing` in the `client` struct.

- Change: The Helm chart `agentInjector.agentImage` was moved to `agent.image`. The old value is deprecated but
  retained for backward compatibility.

- Change: The Helm chart `agentInjector.appProtocolStrategy` was moved to `agent.appProtocolStrategy`. The old
  value is deprecated but retained for backward compatibility.

- Change: The Helm chart `dnsServiceName`, `dnsServiceNamespace`, and `dnsServiceIP` has been removed, because
  they are no longer needed. The TUN-device will use the traffic-manager pod-IP on platforms where it needs to
  dedicate an IP for its local resolver.

- Bugfix: Environment variable interpolation now works for all definitions that are copied from pod containers
  into the injected traffic-agent container.

- Bugfix: An attempt to create simultaneous intercepts that span multiple namespace on the same workstation
  is detected early and prohibited instead of resulting in failing DNS lookups later on.

- Bugfix: Spurious and incorrect ""!! SRV xxx"" messages will no longer appear in the logs when the reason
  is normal context cancellation.

- Bugfix: Single label names now resolves correctly when using Telepresence in Docker on a Linux host

- Bugfix: The Helm chart value `appProtocolStrategy` is now correctly named (used to be `appPortStategy`)
- Bugfix: Include file name in error message when failing to parse JSON file.

### 2.7.6 (September 16, 2022)

- Reintroduce everything from 2.7.4 with fix for issue preventing the CLI from launching on arm64 builds

### 2.7.5 (September 14, 2022)

- Revert of release 2.7.5 (so essentially the same as 2.7.3)

### 2.7.4 (September 14, 2022)

- Feature: The `resources` for the traffic-agent container and the optional init container can
  be specified in the Helm chart using the `resource` and `initResource` fields of the
  `agentInjector.agentImage`.

- Feature: When the traffic-manager fails to inject a traffic-agent, the cause for the failure is
  detected by reading the cluster events, and propagated to the user.

- Feature: Telepresence can now use an embedded FTP client and load an existing FUSE library
  instead of running an external `sshfs` or `sshfs-win` binary. This feature is experimental
  in 2.7.x and enabled by setting `intercept.useFtp` to `true` in the `config.yml`.

- Change: Telepresence on Windows upgraded winfsp from version 1.10 to 1.11

- Bugfix: Running CLI commands on Apple M1 machines will no longer throw warnings about `/proc/cpuinfo`
  and `/proc/self/auxv`.

### 2.7.3 (September 7, 2022)

- Bugfix: CLI commands that are executed by the user daemon now use a pseudo TTY. This enables
  `docker run -it` to allocate a TTY and will also give other commands like `bash read` the
  same behavior as when executed directly in a terminal.

- Bugfix: The traffic-manager will no longer log numerous warnings saying: "Issuing a
  systema request without ApiKey or InstallID may result in an error".

- Bugfix: The traffic-manager will no longer log an error saying: "Unable to derive subnets
  from nodes" when the `podCIDRStrategy` is `auto` and it chooses to instead derive the
  subnets from the pod IPs.

### 2.7.2 (August 25, 2022)

- Bugfix: Standard I/O is restored when using `telepresence intercept <opts> -- <command>`.

- Bugfix: Graciously handle nil intercept environment from the traffic-manager.

- Feature: The timeout for the initial connectivity check that Telepresence performs
  in order to determine if the cluster's subnets are proxied or not can now be configured
  in the `config.yml` file using `timeouts.connectivityCheck`. The default timeout was
  changed from 5 seconds to 500 milliseconds to speed up the actual connect.

- Feature: Adds cli autocompletion for the `--namespace` flag on the `list` and `intercept` commands,
  autocompletion for interceptable workloads on the `intercept` command, and autocompletion for
  active intercepts on the `leave` command.

- Change: The command `telepresence gather-traces` now prints out a message on success.
- Change: The command `telepresence upload-traces` now prints out a message on success.
- Change: The command `telepresence gather-traces` now traces itself and reports errors with trace gathering

- Change: The `cli.log` log is now logged at the same level as the `connector.log`

- Bugfix: Streams created between the traffic-agent and the workstation are now properly closed
  when no interceptor process has been started on the workstation. This fixes a potential problem where
  a large number of attempts to connect to a non-existing interceptor would cause stream congestion
  and an unresponsive intercept.

- Bugfix: Telepresence help message functionality without a running user daemon has been restored.

- Bugfix: The `telepresence list` command no longer includes the `traffic-manager` deployment.

### 2.7.1 (August 10, 2022)

- Change: The command `telepresence uninstall` has been restored, but the `--everything` flag is now deprecated.

- Change: `telepresence helm uninstall` will only uninstall the traffic-manager and no longer accepts the `--everything`, `--agent`,
  or `--all-agents` flags.

- Bugfix: `telepresence intercept` will attempt to connect to the traffic manager before creating an intercept.

### 2.7.0 (August 8, 2022)

- Feature: `telepresence intercept` has gained a
  `--preview-url-add-request-headers` flag (and `telepresence preview create` a `--add-request-headers` flag) that can be used to inject
  request headers in to every request made through the preview URL.

- Feature: The Docker image now contains a new program in addition to
  the existing traffic-manager and traffic-agent: the pod-daemon. The
  pod-daemon is a trimmed-down version of the user-daemon that is
  designed to run as a sidecar in a Pod, enabling CI systems to create
  preview deploys.

- Feature: The Telepresence components now collect OpenTelemetry traces.
  Up to 10MB of trace data are available at any given time for collection from
  components. `telepresence gather-traces` is a new command that will collect
  all that data and place it into a gzip file, and `telepresence upload-traces` is
  a new command that will push the gzipped data into an OTLP collector.

- Feature: The agent injector now supports a new annotation, `telepresence.getambassador.io/inject-ignore-volume-mounts`, that can be used to make the injector ignore specified volume mounts denoted by a comma-separated string.

- Change: The traffic manager is no longer automatically installed into the cluster. Connecting or creating an intercept in a cluster without a traffic manager will return an error.

- Feature: A new telepresence helm command was added to provide an easy way to install, upgrade, or uninstall the telepresence traffic-manager.

- Change: The command `telepresence uninstall` has been moved to `telepresence helm uninstall`.

- Change: Add an emptyDir volume and volume mount under `/tmp` on the agent sidecar so it works with `readOnlyRootFileSystem: true`

- Feature: Added prometheus support to the traffic manager.

### 2.6.8 (June 23, 2022)

- Feature: The name and namespace for the DNS Service that the traffic-manager uses in DNS auto-detection can now be specified.

- Feature: Should the DNS auto-detection logic in the traffic-manager fail, users can now specify a fallback IP to use.

- Feature: It is now possible to intercept UDP ports with Telepresence and also use `--to-pod` to forward UDP
  traffic from ports on localhost.

- Change: The Helm chart will now add the `nodeSelector`, `affinity` and `tolerations` values to the traffic-manager's
  post-upgrade-hook and pre-delete-hook jobs.

- Bugfix: Telepresence no longer fails to inject the traffic agent into the pod generated for workloads that have no
  volumes and `automountServiceAccountToken: false`.

- Feature: The helm-chart now supports settings resources, securityContext and podSecurityContext for use with chart hooks.

### 2.6.7 (June 22, 2022)

- Bugfix: The Telepresence client will remember and reuse the traffic-manager session after a network failure
  or other reason that caused an unclean disconnect.

- Bugfix: Telepresence will no longer forward DNS requests for "wpad" to the cluster.

- Bugfix: The traffic-agent will properly shut down if one of its goroutines errors.

### 2.6.6 (June 9, 2022)

- Bugfix: The propagation of the `TELEPRESENCE_API_PORT` environment variable now works correctly.

- Bugfix: The `--output json` global flag no longer outputs multiple objects.

### 2.6.5 (June 3, 2022)

- Feature: The `reinvocationPolicy` or the traffic-agent injector webhook can now be configured using the Helm chart.

- Feature: The traffic manager now accepts a root CA for a proxy, allowing it to connect to ambassador cloud from behind an HTTPS proxy.
  This can be configured through the helm chart.

- Feature: A policy that controls when the mutating webhook injects the traffic-agent was added, and can be configured in the Helm chart.

- Change: Telepresence on Windows upgraded wintun.dll from version 0.12 to version 0.14.1

- Change: Telepresence on Windows upgraded winfsp from version 1.9 to 1.10

- Change: Telepresence upgraded its embedded Helm from version 3.8.1 to 3.9

- Change: Telepresence upgraded its embedded Kubernetes API from version 0.23.4 to 0.24.1

- Feature: Added a `--watch` flag to `telepresence list` that can be used to watch interceptable workloads.

- Change: The configuration setting for `images.webhookAgentImage` is now deprecated. Use `images.agentImage` instead.

- Bugfix: The `reinvocationPolicy` or the traffic-agent injector webhook now defaults to `Never` insteadof `IfNeeded` so
  that `LimitRange`s on namespaces can inject a missing `resources` element into the injected traffic-agent container.

- Bugfix: UDP based communication with services in the cluster now works as expected.

- Bugfix: The command help will only show Kubernetes flags on the commands that supports them

- Bugfix: Only the errors from the last session will be considered when counting the number of errors in the log after
  a command failure.

### 2.6.4 (May 23, 2022)

- Bugfix: The traffic-manager RBAC grants permissions to update services, deployments, replicatsets, and statefulsets. Those
  permissions are needed when the traffic-manager upgrades from versions < 2.6.0 and can be revoked after the upgrade.

### 2.6.3 (May 20, 2022)

- Bugfix: The `--mount` intercept flag now handles relative mount points correctly on non-windows platforms. Windows
  still require the argument to be a drive letter followed by a colon.

- Bugfix: The traffic-agent's configuration update automatically when services are added, updated or deleted.

- Bugfix: The `--mount` intercept flag now handles relative mount points correctly on non-windows platforms. Windows
  still require the argument to be a drive letter followed by a colon.

- Bugfix: The traffic-agent's configuration update automatically when services are added, updated or deleted.

- Bugfix: Telepresence will now always inject an initContainer when the service's targetPort is numeric

- Bugfix: Workloads that have several matching services pointing to the same target port are now handled correctly.

- Bugfix: A potential race condition causing a panic when closing a DNS connection is now handled correctly.

- Bugfix: A container start would sometimes fail because and old directory remained in a mounted temp volume.

### 2.6.2 (May 17, 2022)

- Bugfix: Workloads controlled by workloads like Argo `Rollout` are injected correctly.

- Bugfix: Multiple services appointing the same container port no longer result in duplicated ports in an injected pod.

- Bugfix: The `telepresence list` command no longer errors out with "grpc: received message larger than max" when listing namespaces
  with a large number of workloads.

### 2.6.1 (May 16, 2022)

- Bugfix: Telepresence will now handle multiple path entries in the KUBECONFIG environment correctly.

- Bugfix: Telepresence will no longer panic when using preview URLs with traffic-managers < 2.6.0

- Change: Traffic-manager now attempts to obtain a cluster id from the license if it could not obtain it from the Kubernetes API.

### 2.6.0 (May 13, 2022)

- Feature: Traffic-agent is now capable of intercepting multiple containers and multiple ports per container.

- Feature: Telepresence client now require less RBAC permissions in order to intercept.

- Change: All pod-injection is performed by the mutating webhook. Client will no longer modify workloads.

- Change: Traffic-agent is configured using a ConfigMap entry. In prior versions, the configuration was passed in the container environment.

- Change: The helm-chart no longer has a default set for the agentInjector.image.name, and unless its set, the traffic-manager will ask
  SystemA for the preferred image.

- Change: Client no longer needs RBAC permissions to update deployments, replicasets, and statefulsets.

- Change: Telepresence now uses Helm version 3.8.1 when installing the traffic-manager

- Change: The traffic-manager will not accept connections from clients older than 2.6.0. It can't, because they still use the old way of
  injecting the agent by modifying the workload.

- Change: When upgrading, all workloads with injected agents will have their agent "uninstalled" automatically. The mutating webhook will
  then ensure that their pods will receive an updated traffic-agent.

- Bugfix: Remote mounts will now function correctly with custom `securityContext`.

- Bugfix: The help for commands that accept kubernetes flags will now display those flags in a separate group.

- Bugfix: Using `telepresence leave` or `telepresence quit` on an intercept that spawned a command using `--` on the command line
  will now terminate that command since it's considered parented by the intercept that is removed.

- Change: Add support for structured output as JSON by setting the global --output=json flag.

### 2.5.8 (April 27, 2022)

- Bugfix: Telepresence now ensures that the download folder for the enhanced free client is created prior to downloading it.

### 2.5.7 (April 25, 2022)

- Change: A namespaced traffic-manager will no longer require cluster wide RBAC. Only Roles and RoleBindings are now used.

- Bugfix: The DNS recursion detector didn't work correctly on Windows, resulting in sporadic failures to resolve names
  that were resolved correctly at other times.

- Bugfix: A telepresence session will now last for 24 hours after the user's last connectivity. If a session expires, the connector will automatically try to reconnect.

### 2.5.6 (April 15, 2022)

- Bugfix: The `gather-logs` command will no longer send any logs through `gRPC`.

- Change: Telepresence agents watcher will now only watch namespaces that the user has accessed since the last `connect`.

### 2.5.5 (April 8, 2022)

- Change: The traffic-manager now requires permissions to read pods across namespaces even if installed with limited permissions

- Bugfix: The DNS resolver used on Linux with systemd-resolved now flushes the cache when the search path changes.

- Bugfix: The `telepresence list` command will produce a correct listing even when not preceded by a `telepresence connect`.

- Bugfix: The root daemon will no longer get into a bad state when a disconnect is rapidly followed by a new connect.

- Bugfix: The client will now only watch agents from accessible namespaces, and is also constrained to namespaces explicitly mapped
  using the `connect` command's `--mapped-namespaces` flag.

- Bugfix: The `gather-logs` command will only gather traffic-agent logs from accessible namespaces, and is also constrained to namespaces
  explicitly mapped using the `connect` command's `--mapped-namespaces` flag.

### 2.5.4 (March 29, 2022)

- Change: The list command, when used with the `--intercepts` flag, will list the users intercepts from all namespaces

- Change: The status command includes the install id, user id, account id, and user email in its result, and can print output as JSON

- Change: The lookup-timeout config flag used to set timeouts for DNS queries resolved by a cluster now also configures the timeout for fallback queries (i.e. queries not resolved by the cluster) when connected to the cluster.

- Change: The TUN device will no longer route pod or service subnets if it is running in a machine that's already connected to the cluster

- Bugfix: The client's gather logs command and agent watcher will now respect the configured grpc.maxReceiveSize

- Bugfix: Client and agent sessions no longer leaves dangling waiters in the traffic-manager when they depart.

- Bugfix: An advice to "see logs for details" is no longer printed when the argument count is incorrect in a CLI command.

- Bugfix: Removed a bad concatenation that corrupted the output path of `telepresence gather-logs`.

- Bugfix: Agent container is no longer sensitive to a random UID or an UID imposed by a SecurityContext.

- Bugfix: Intercepts that fail to create are now consistently removed to prevent non-working dangling intercepts from sticking around.

- Bugfix: The ingress-l5 flag will no longer be forcefully set to equal the --ingress-host flag

- Bugfix: The DNS fallback resolver on Linux now correctly handles concurrent requests without timing them out

### 2.5.3 (February 25, 2022)

- Feature: Client-side binaries for the arm64 architecture are now available for linux

- Bugfix: Fixed bug in the TCP stack causing timeouts after repeated connects to the same address

### 2.5.2 (February 23, 2022)

- Bugfix: Fixed a bug where Telepresence would use the last server in resolv.conf

### 2.5.1 (February 19, 2022)

- Bugfix: Fixed a bug where using a GKE cluster would error with: No Auth Provider found for name "gcp"

### 2.5.0 (February 18, 2022)

- Feature: The flags `--http-path-equal`, `--http-path-prefix`, and `--http-path-regex` can can be used in addition to the `--http-match`
  flag to filter personal intercepts by the request URL path

- Feature: The flag `--http-meta` can be used to declare metadata key value pairs that will be returned by the Telepresence rest API
  endpoint /intercept-info

- Feature: Telepresence Login now prompts you to optionally install an enhanced free client, which has some additional features when used with Ambassador Cloud.

- Change: Logs generated by the CLI are no longer discarded. Instead, they will end up in `cli.log`.

- Change: Both daemon logfiles now rotate daily instead of once for each new connect

- Change: The flag `--http-match` was renamed to `--http-header`. Old flag still works, but is deprecated and doesn't
  show up in the help.

- Change: The verb "watch" was added to the set of required verbs when accessing services and workloads for the client RBAC ClusterRole

- Change: Telepresence is no longer backward compatible with versions 2.4.4 or older because the deprecated multiplexing tunnel functionality was removed.

- Change: The global networking flags are no longer global. Using them will render a deprecation warning unless they are supported by the command.
  The subcommands that support networking flags are `connect`, `current-cluster-id`, and `genyaml`.

- Change: Telepresence now includes GOARCH of the binary in the metadata reported.

- Bugfix: The also-proxy and never-proxy subnets are now displayed correctly when using the `telepresence status` command

- Bugfix: Telepresence will no longer require `SETENV` privileges when starting the root daemon.

- Bugfix: Telepresence will now parse device names containing dashes correctly when determining routes that it should never block.

- Bugfix: The cluster domain (typically "cluster.local") is no longer added to the DNS `search` on Linux using `systemd-resolved`. Instead,
  it is added as a `domain` so that names ending with it are routed to the DNS server.

- Bugfix: Fixed a bug where the `--json` flag did not output json for `telepresence list` when there were no workloads.

- Change: Updated README file with more details about the project.

- Bugfix: Fixed a bug where the overriding DNS resolver would break down in Linux if /etc/resolv.conf listed an ipv6 resolver

### 2.4.11 (February 10, 2022)

- Change: Include goarch metadata for reporting to distinguish between Intel and Apple Silicon Macs

### 2.4.10 (January 13, 2022)

- Feature: The flag `--http-plaintext` can be used to ensure that an intercept uses plaintext http or grpc when
  communicating with the workstation process.

- Feature: The port used by default in the `telepresence intercept` command (8080), can now be changed by setting
  the `intercept.defaultPort` in the `config.yml` file.

- Feature: The strategy when selecting the application protocol for personal intercepts in agents injected by the
  mutating webhook can now be configured using the `agentInjector.appProtocolStrategy` in the Helm chart.

- Feature: The strategy when selecting the application protocol for personal intercepts can now be configured using
  the `intercept.appProtocolStrategy` in the `config.yml` file.

- Change: Telepresence CI now runs in GitHub Actions instead of Circle CI.

- Bugfix: Telepresence will no longer log invalid: "unhandled connection control message: code DIAL_OK" errors.

- Bugfix: User will not be asked to log in or add ingress information when creating an intercept until a check has been
  made that the intercept is possible.

- Bugfix: Output to `stderr` from the traffic-agent's `sftp` and the client's `sshfs` processes are properly logged as errors.

- Bugfix: Auto installer will no longer not emit backslash separators for the `/tel-app-mounts` paths in the
  traffic-agent container spec when running on Windows

### 2.4.9 (December 9, 2021)

- Bugfix: Fixed an error where access tokens were not refreshed if you log in
  while the daemons are already running.

- Bugfix: A helm upgrade using the --reuse-values flag no longer fails on a "nil pointer" error caused by a nil `telpresenceAPI` value.

### 2.4.8 (December 3, 2021)

- Feature: A RESTful service was added to Telepresence, both locally to the client and to the `traffic-agent` to help determine if messages with a set of headers should be
  consumed or not from a message queue where the intercept headers are added to the messages.

- Change: The environment variable TELEPRESENCE_LOGIN_CLIENT_ID is no longer used.

- Feature: There is a new subcommand, `test-vpn`, that can be used to diagnose connectivity issues with a VPN.

- Bugfix: The tunneled network connections between Telepresence and
  Ambassador Cloud now behave more like ordinary TCP connections,
  especially around timeouts.

### 2.4.7 (November 24, 2021)

- Feature: The agent injector now supports a new annotation, `telepresence.getambassador.io/inject-service-name`, that can be used to set the name of the service to be intercepted.
  This will help disambiguate which service to intercept for when a workload is exposed by multiple services, such as can happen with Argo Rollouts

- Feature: The kubeconfig extensions now support a `never-proxy` argument, analogous to `also-proxy`, that defines a set of subnets that will never be proxied via telepresence.

- Feature: Added flags to "telepresence intercept" that set the ingress fields as an alternative to using the dialogue.

- Change: Telepresence check the versions of the client and the daemons and ask the user to quit and restart if they don't match.

- Change: Telepresence DNS now uses a very short TTL instead of explicitly flushing DNS by killing the `mDNSResponder` or doing `resolvectl flush-caches`

- Bugfix: Legacy flags such as `--swap-deployment` can now be used together with global flags.

- Bugfix: Outbound connections are now properly closed when the peer closes.

- Bugfix: The DNS-resolver will trap recursive resolution attempts (may happen when the cluster runs in a docker-container on the client).

- Bugfix: The TUN-device will trap failed connection attempts that results in recursive calls back into the TUN-device (may happen when the
  cluster runs in a docker-container on the client).

- Bugfix: Fixed a potential deadlock when a new agent joined the traffic manager.

- Bugfix: The app-version value of the Helm chart embedded in the telepresence binary is now automatically updated at build time. The value is hardcoded in the
  original Helm chart when we release so this fix will only affect our nightly builds.

- Bugfix: The configured webhookRegistry is now propagated to the webhook installer even if no webhookAgentImage has been set.

- Bugfix: Login logs the user in when their access token has expired, instead of having no effect.

### 2.4.6 (November 2, 2021)

- Feature: Telepresence CLI is now built and published for Apple Silicon Macs.

- Feature: Telepresence now supports manually injecting the traffic-agent YAML into workload manifests.
  Use the `genyaml` command to create the sidecar YAML, then add the `telepresence.getambassador.io/manually-injected: "true"` annotation to your pods to allow Telepresence to intercept them.

- Feature: Added a json flag for the "telepresence list" command. This will aid automation.

- Change: `--help` text now includes a link to https://www.telepresence.io/ so users who download Telepresence via Brew or some other mechanism are able to find the documentation easily.

- Bugfix: Telepresence will no longer attempt to proxy requests to the API server when it happens to have an IP address within the CIDR range of pods/services.

### 2.4.5 (October 15, 2021)

- Feature: Intercepting headless services is now supported. It's now possible to request a headless service on whatever port it exposes and get a response from the intercept.

- Feature: Preview url questions have more context and provide "best guess" defaults.

- Feature: The `gather-logs` command added two new flags. One to anonymize pod names + namespaces and the other for getting the pod yaml of the `traffic-manager` and any pod that contains a `traffic-agent`.

- Change: Use one tunnel per connection instead of multiplexing into one tunnel. This client will still be backwards compatible with older `traffic-manager`s that only support multiplexing.

- Bugfix: Telepresence will now log that the kubernetes server version is unsupported when using a version older than 1.17.

- Bugfix: Telepresence only adds the security context when necessary: intercepting a headless service or using a numeric port with the webhook agent injector.

### 2.4.4 (September 27, 2021)

- Feature: The strategy used by traffic-manager's discovery of pod CIDRs can now be configured using the Helm chart.

- Feature: Add the command `telepresence gather-logs`, which bundles the logs for all components
  into one zip file that can then be shared in a GitHub issue, in slack, etc. Use
  `telepresence gather-logs --help` to see additional options for running the command.

- Feature: The agent injector now supports injecting Traffic Agents into pods that have unnamed ports.

- Bugfix: The traffic-manager now uses less CPU-cycles when computing the pod CIDRs.

- Bugfix: If a deployment annotated with webhook annotations is deployed before telepresence is installed, telepresence will now install an agent in that deployment before intercept

- Bugfix: Fix an issue where the traffic-manager would sometimes go into a CPU loop.

- Bugfix: The TUN-device no longer builds an unlimited internal buffer before sending it when receiving lots of TCP-packets without PSH.
  Instead, the buffer is flushed when it reaches a size of 64K.

- Bugfix: The user daemon would sometimes hang when it encountered a problem connecting to the cluster or the root daemon.

- Bugfix: Telepresence correctly reports an intercept port conflict instead of panicking with segfault.

### 2.4.3 (September 15, 2021)

- Feature: The environment variable `TELEPRESENCE_INTERCEPT_ID` is now available in the interceptor's environment.

- Bugfix: A timing related bug was fixed that sometimes caused a "daemon did not start" failure.

- Bugfix: On Windows, crash stack traces and other errors were not
  written to the log files, now they are.

- Bugfix: On Linux kernel 4.11 and above, the log file rotation now
  properly reads the birth-time of the log file. On older kernels, it
  continues to use the old behavior of using the change-time in place
  of the birth-time.

- Bugfix: Telepresence will no longer refer the user to the daemon logs for errors that aren't related to
  problems that are logged there.

- Bugfix: The overriding DNS resolver will no longer apply search paths when resolving "localhost".

- Bugfix: The cluster domain used by the DNS resolver is retrieved from the traffic-manager instead of being
  hard-coded to "cluster.local".

- Bugfix: "Telepresence uninstall --everything" now also uninstalls agents installed via mutating webhook

- Bugfix: Downloading large files during an intercept will no longer cause timeouts and hanging traffic-agent.

- Bugfix: Passing false to the intercept command's --mount flag will no longer result in a filesystem being mounted.

- Bugfix: The traffic manager will establish outbound connections in parallel instead of sequentially.

- Bugfix: The `telepresence status` command reports correct DNS settings instead of "Local IP: nil, Remote IP: nil"

### 2.4.2 (September 1, 2021)

- Feature: A new `telepresence loglevel <level>` subcommand was added that enables changing the loglevel
  temporarily for the local daemons, the `traffic-manager` and the `traffic-agents`.

- Change: The default log-level is now `info` for all components of Telepresence.

- Bugfix: The overriding DNS resolver will no longer apply search paths when resolving "localhost".

- Bugfix: The RBAC was not updated in the helm chart to enable the traffic-manager to `get` and `list`
  namespaces, which would impact users who use licensed features of the Telepresence extensions in an
  air-gapped environment.

- Bugfix: The timeout for Helm actions wasn't always respected which could cause a failing install of the
  `traffic-manager` to make the user daemon to hang indefinitely.

### 2.4.1 (August 30, 2021)

- Bugfix: Telepresence will now mount all directories from `/var/run/secrets`, not just the kubernetes.io ones.
  This allows the mounting of secrets directories such as eks.amazonaws.com (for IRSA tokens)

- Bugfix: The grpc.maxReceiveSize setting is now correctly propagated to all grpc servers.
  This allows users to mitigate a root daemon crash when sending a message over the default maximum size.

- Bugfix: Some slight fixes to the `homebrew-package.sh` script which will enable us to run
  it manually if we ever need to make homebrew point at an older version.

- Feature: Helm chart has now a feature to on demand regenerate certificate used for mutating webhook by setting value.
  `agentInjector.certificate.regenerate`

- Change: The traffic-manager now requires `get` namespace permissions to get the cluster ID instead of that value being
  passed in as an environment variable to the traffic-manager's deployment.

- Change: The traffic-manager is now installed via an embedded version of the Helm chart when `telepresence connect` is first performed on a cluster.
  This change is transparent to the user.
  A new configuration flag, `timeouts.helm` sets the timeouts for all helm operations performed by the Telepresence binary.

- Bugfix: Telepresence will initialize the default namespace from the kubeconfig on each call instead of just doing it when connecting.

- Bugfix: The timeout to keep idle outbound TCP connections alive was increased from 60 to 7200 seconds which is the same as
  the Linux `tcp_keepalive_time` default.

- Bugfix: Telepresence will now remove a socket that is the result of an ungraceful termination and retry instead of printing
  an error saying "this usually means that the process has terminated ungracefully"

- Change: Failure to report metrics is logged using loglevel info rather than error.

- Bugfix: A potential deadlock situation is fixed that sometimes caused the user daemon to hang when the user
  was logged in.

- Feature: The scout reports will now include additional metadata coming from environment variables starting with
  `TELEPRESENCE_REPORT_`.

- Bugfix: The config setting `images.agentImage` is no longer required to contain the repository. The repository is
  instead picked from `images.repository`.

- Change: The `registry`, `webhookRegistry`, `agentImage` and `webhookAgentImage` settings in the `images` group of the `config.yml`
  now get their defaults from `TELEPRESENCE_AGENT_IMAGE` and `TELEPRESENCE_REGISTRY`.

### 2.4.0 (August 4, 2021)

- Feature: There is now a native Windows client for Telepresence.
  All the same features supported by the macOS and Linux client are available on Windows.

- Feature: Telepresence can now receive messages from the cloud and raise
  them to the user when they perform certain commands.

- Bugfix: Initialization of `systemd-resolved` based DNS sets
  routing domain to improve stability in non-standard configurations.

- Bugfix: Edge case error when targeting a container by port number.
  Before if your matching/target container was at containers list index 0,
  but if there was a container at index 1 with no ports, then the
  "no ports" container would end up the selected one

- Bugfix: A `$(NAME)` reference in the agent's environment will now be
  interpolated correctly.

- Bugfix: Telepresence will no longer print an INFO level log message when
  no config.yml file is found.

- Bugfix: A panic is no longer raised when passing an argument to the
  `telepresence intercept` option `--http-match` that doesn't contain an
  equal sign.

- Bugfix: The `traffic-manager` will only send subnet updates to a
  client root daemon when the subnets actually change.

- Bugfix: The agent uninstaller now distinguishes between recoverable
  and unrecoverable failures, allowing uninstallation from manually changed
  resources

### 2.3.7 (July 23, 2021)

- Feature: An `also-proxy` entry in the Kubernetes cluster config will
  show up in the output of the `telepresence status` command.

- Feature: `telepresence login` now has an `--apikey=KEY` flag that
  allows for non-interactive logins. This is useful for headless
  environments where launching a web-browser is impossible, such as
  cloud shells, Docker containers, or CI.

- Bugfix: Dialer will now close if it gets a ConnectReject. This was
  encountered when doing an intercept without a local process running
  and would result in requests hanging indefinitely.

- Bugfix: Made `telepresence list` command faster.

- Bugfix: Mutating webhook injector correctly hides named ports for probes.

- Bugfix: Initialization of `systemd-resolved` based DNS is more stable and
  failures causing telepresence to default to the overriding resolver will no
  longer cause general DNS lookup failures.

- Bugfix: Fixed a regression introduced in 2.3.5 that caused `telepresence current-cluster-id`
  to crash.

- Bugfix: New API keys generated internally for communication with
  Ambassador Cloud no longer show up as "no description" in the
  Ambassador Cloud web UI. Existing API keys generated by older
  versions of Telepresence will still show up this way.

- Bugfix: Fixed a race condition that logging in and logging out
  rapidly could cause memory corruption or corruption of the
  `user-info.json` cache file used when authenticating with Ambassador
  Cloud.

### 2.3.6 (July 20, 2021)

- Bugfix: Fixed a regression introduced in 2.3.5 that caused preview
  URLs to not work.

- Bugfix: Fixed a regression introduced in 2.3.5 where the Traffic
  Manager's `RoleBinding` did not correctly appoint the
  `traffic-manager` `Role`, causing subnet discovery to not be able to
  work correctly.

- Bugfix: Fixed a regression introduced in 2.3.5 where the root daemon
  did not correctly read the configuration file; ignoring the user's
  configured log levels and timeouts.

- Bugfix: Fixed an issue that could cause the user daemon to crash
  during shutdown, as during shutdown it unconditionally attempted to
  close a channel even though the channel might already be closed.

### 2.3.5 (July 15, 2021)

- Feature: Telepresence no longer depends on having an external
  `kubectl` binary, which might not be present for OpenShift users
  (who have `oc` instead of `kubectl`).
- Feature: `skipLogin` can be used in the config.yml to tell the cli not to connect to cloud when using an air-gapped environment.
- Feature: The Telepresence Helm chart now supports installing multiple
  Traffic Managers in multiple namespaces. This will allow operators to
  install Traffic Managers with limited permissions that match the
  permissions restrictions that Telepresence users are subject to.
- Feature: The maximum size of messages that the client can receive over gRPC can now be configured. The gRPC default of 4MB isn't enough
  under some circumstances.
- Change: `TELEPRESENCE_AGENT_IMAGE` and `TELEPRESENCE_REGISTRY` are now only configurable via config.yml.
- Bugfix: Fixed and improved several error messages, to hopefully be
  more helpful.
- Bugfix: Fixed a DNS problem on macOS causing slow DNS lookups when connecting to a local cluster.

### 2.3.4 (July 9, 2021)

- Bugfix: Some log statements that contained garbage instead of a proper IP address now produce the correct address.
- Bugfix: Telepresence will no longer panic when multiple services match a workload.
- Bugfix: The traffic-manager will now accurately determine the service subnet by creating a dummy-service in its own namespace.
- Bugfix: Telepresence connect will no longer try to update the traffic-manager's clusterrole if the live one is identical to the desired one.
- Bugfix: The Telepresence helm chart no longer fails when installing with `--set clientRbac.namespaced=true`

### 2.3.3 (July 7, 2021)

- Feature: Telepresence now supports installing the Traffic Manager
  via Helm. This will make it easy for operators to install and
  configure the server-side components of Telepresence separately from
  the CLI (which in turn allows for better separation of permissions).

- Feature: As the `traffic-manager` can now be installed in any
  namespace via Helm, Telepresence can now be configured to look for
  the traffic manager in a namespace other than `ambassador`. This
  can be configured on a per-cluster basis.

- Feature: `telepresence intercept` now supports a `--to-pod` flag
  that can be used to port-forward sidecars' ports from an intercepted
  pod

- Feature: `telepresence status` now includes more information about
  the root daemon.

- Feature: We now do nightly builds of Telepresence for commits on release/v2 that haven't been tagged and published yet.

- Change: Telepresence no longer automatically shuts down the old
  `api_version=1` `edgectl` daemon. If migrating from such an old
  version of `edgectl` you must now manually shut down the `edgectl`
  daemon before running Telepresence. This was already the case when
  migrating from the newer `api_version=2` `edgectl`.

- Bugfix: The root daemon no longer terminates when the user daemon
  disconnects from its gRPC streams, and instead waits to be
  terminated by the CLI. This could cause problems with things not
  being cleaned up correctly.

- Bugfix: An intercept will survive deletion of the intercepted pod
  provided that another pod is created (or already exists) that can
  take over.

### 2.3.2 (June 18, 2021)

- Feature: The mutator webhook for injecting traffic-agents now
  recognizes a `telepresence.getambassador.io/inject-service-port`
  annotation to specify which port to intercept; bringing the
  functionality of the `--port` flag to users who use the mutator
  webook in order to control Telepresence via GitOps.

- Feature: Outbound connections are now routed through the intercepted
  Pods which means that the connections originate from that Pod from
  the cluster's perspective. This allows service meshes to correctly
  identify the traffic.

- Change: Inbound connections from an intercepted agent are now
  tunneled to the manager over the existing gRPC connection, instead
  of establishing a new connection to the manager for each inbound
  connection. This avoids interference from certain service mesh
  configurations.

- Change: The traffic-manager requires RBAC permissions to list Nodes,
  Pods, and to create a dummy Service in the manager's namespace.

- Change: The on-laptop client no longer requires RBAC permissions to
  list Nodes in the cluster or to create Services, as that
  functionality has been moved to the traffic-manager.

- Bugfix: Telepresence will now detect the pod CIDR ranges even if
  they are not listed in the Nodes.

- Bugfix: The list of cluster subnets that the virtual network
  interface will route is now configured dynamically and will follow
  changes in the cluster.

- Bugfix: Subnets fully covered by other subnets are now pruned
  internally and thus never superfluously added to the laptop's
  routing table.

- Change: The `trafficManagerAPI` timout default has changed from 5
  seconds to 15 seconds, in order to facilitate the extended time it
  takes for the traffic-manager to do its initial discovery of cluster
  info as a result of the above bugfixes.

- Bugfix: On macOS, files generated under `/etc/resolver/` as the
  result of using `include-suffixes` in the cluster config are now
  properly removed on quit.

- Bugfix: Telepresence no longer erroneously terminates connections
  early when sending a large HTTP response from an intercepted
  service.

- Bugfix: When shutting down the user-daemon or root-daemon on the
  laptop, `telepresence quit` and related commands no longer return
  early before everything is fully shut down. Now it can be counted
  on that by the time the command has returned that all the
  side-effects on the laptop have been cleaned up.

### 2.3.1 (June 14, 2021)

- Feature: Agents can now be installed using a mutator webhook
- Feature: DNS resolver can now be configured with respect to what IP addresses that are used, and what lookups that gets sent to the cluster.
- Feature: Telepresence can now be configured to proxy subnets that aren't part of the cluster but only accesible from the cluster.
- Change: The `trafficManagerConnect` timout default has changed from 20 seconds to 60 seconds, in order to facilitate
  the extended time it takes to apply everything needed for the mutator webhook.
- Change: Telepresence is now installable via `brew install datawire/blackbird/telepresence`
- Bugfix: Fix a bug where sometimes large transfers from services on the cluster would hang indefinitely

### 2.3.0 (June 1, 2021)

- Feature: Telepresence is now installable via brew
- Feature: `telepresence version` now also includes the version of the currently running user daemon.
- Change: A TUN-device is used instead of firewall rules for routing outbound connections.
- Change: Outbound connections now use gRPC instead of ssh, and the traffic-manager no longer has a sshd running.
- Change: The traffic-agent no longer has a sshd running. Remote volume mounts use sshfs in slave mode, talking directly to sftp.
- Change: The local DNS now routes the name lookups to intercepted agents or traffic-manager.
- Change: The default log-level for the traffic-manager and the root-daemon was changed from "debug" to "info".
- Change: The command line is now statically-linked, so it is usable on systems with different libc's.
- Bugfix: Using --docker-run no longer fail to mount remote volumes when docker runs as root.
- Bugfix: Fixed a number of race conditions.
- Bugfix: Fix a crash when there is an error communicating with the traffic-manager about Ambassador Cloud.
- Bugfix: Fix a bug where sometimes when displaying or logging a timeout error it fails to determine which configurable timeout is responsible.
- Bugfix: The root-user daemon now respects the timeouts in the normal user's configuration file.

### 2.2.2 (May 17, 2021)

- Feature: Telepresence translates legacy Telepresence commands into viable Telepresence commands.
- Bugfix: Intercepts will only look for agents that are in the same namespace as the intercept.

### 2.2.1 (April 29, 2021)

- Bugfix: Improve `ambassador` namespace detection that was trying to create the namespace even when the namespace existed, which was an undesired RBAC escalation for operators.
- Bugfix: Telepresence will now no longer generate excessive traffic trying repeatedly to exchange auth tokens with Ambassador Cloud. This could happen when upgrading from <2.1.4 if you had an expired `telepresence login` from before upgrading.
- Bugfix: `telepresence login` now correctly handles expired logins, just like all of the other subcommands.

### 2.2.0 (April 19, 2021)

- Feature: `telepresence intercept` now has the option `--docker-run` which will start a docker container with intercepted environment and volume mounts.
- Bugfix: `telepresence uninstall` can once again uninstall agents installed by older versions of Telepresence.
- Feature: Addition of `telepresence current-cluster-id` and `telepresence license` commands for using licenses with the Ambassador extension, primarily in air-gapped environments.

### 2.1.5 (April 12, 2021)

- Feature: When intercepting `--port` now supports specifying a service port or a service name. Previously, only service name was supported.
- Feature: Intercepts using `--mechanism=http` now support mTLS.
- Bugfix: One of the log messages was using the incorrect variable, which led to misleading error messages on `telepresence uninstall`.
- Bugfix: Telepresence no longer generates port names longer than 15 characters.

### 2.1.4 (April 5, 2021)

- Feature: `telepresence status` has been enhanced to provide more information. In particular, it now provides separate information on the daemon and connector processes, as well as showing login status.
- Feature: Telepresence now supports intercepting StatefulSets
- Change: Telepresence necessary RBAC has been refined to support StatefulSets and now requires "get,list,update" for StatefulSets
- Change: Telepresence no longer requires that port 1080 must be available.
- Change: Telepresence now makes use of refresh tokens to avoid requiring the user to manually log in so often.
- Bugfix: Fix race condition that occurred when intercepting a ReplicaSet while another pod was terminating in the same namespace (this fixes a transient test failure)
- Bugfix: Fix error when intercepting a ReplicaSet requires the containerPort to be hidden.
- Bugfix: `telepresence quit` no longer starts the daemon process just to shut it down.
- Bugfix: Telepresence no longer hangs the next time it's run after getting killed.
- Bugfix: Telepresence now does a better job of automatically logging in as necessary, especially with regard to expired logins.
- Bugfix: Telepresence was incorrectly looking across all namespaces for services when intercepting, but now it only looks in the given namespace. This should prevent people from running into "Found multiple services" errors when services with the same selectors existed in other namespaces.

### 2.1.3 (March 29, 2021)

- Feature: Telepresence now supports intercepting ReplicaSets (that aren't owned by a Deployment)
- Change: The --deployment (-d) flag is now --workload (-w), as we start supporting more workloads than just Deployments
- Change: Telepresence necessary RBAC has changed and now requires "delete" for Pods and "get,list,update" for ReplicaSets
- Security: Upgrade to a newer OpenSSL, to address OpenSSL CVE-2021-23840.
- Bugfix: Connecting to Minikube/Hyperkit no longer fails intermittently.
- Bugfix: Telepresence will now make /var/run/secrets/kubernetes.io available when mounting remote volumes.
- Bugfix: Hiccups in the connection to the cluster will no longer cause the connector to shut down; it now retries properly.
- Bugfix: Fix a crash when binary dependencies are missing.
- Bugfix: You can now specify a service when doing an intercept (--service), this is useful if you have two services that select on the same labels (e.g. If using Argo Rollouts do deployments)

### 2.1.2 (March 19, 2021)

- Bugfix: Uninstalling agents now only happens once per deployment instead of once per agent.
- Bugfix: The list command no longer shows agents from namespaces that aren't mapped.
- Bugfix: IPv6 routes now work and don't prevent other pfctl rules being written in macOS
- Bugfix: Pods with `hostname` and/or `subdomain` now get correct DNS-names and routes.
- Change: Service UID was added to InterceptSpec to better link intercepts and services.
- Feature: All timeouts can now be configured in a <user-config-dir>/telepresence/config.yml file

### 2.1.1 (March 12, 2021)

- Bugfix: When looking at the container to intercept, it will check if there's a better match before using a container without containerPorts.
- Bugfix: Telepresence will now map `kube-*` and `ambassador` namespaces by default.
- Bugfix: Service port declarations that lack a TargetPort field will now correctly default to using the Port field instead.
- Bugfix: Several DNS fixes. Notably, introduce a fake "tel2-search" domain that gets replaced with a dynamic DNS search when queried, which fixes DNS for Docker with no `-net host`.
- Change: Improvements to how we report the requirements for volume mounts; notably, if the requirements are not met then it defaults to `--mount=false`.
- Change: There has been substantial code cleanup in the "connector" process.

### 2.1.0 (March 8, 2021)

- Feature: Support headless services (including ExternalName), which you can use if you used "Also Proxy" in telepresence 1.
- Feature: Preview URLs can now set a layer-5 hostname (TLS-SNI and HTTP "Host" header) that is different than the layer-3 hostname (IP-address/DNS-name) that is used to dial to the ingress.
- Feature: The Ingress info will now contain a layer-5 hostname that can be used for TLS-SLI and HTTP "Host" header when accessing a service.
- Feature: Users can choose which port to intercept when intercepting a service with multiple ports.
- Bugfix: Environment variables declared with `envFrom` in the app-container are now propagated correctly to the client during intercept.
- Bugfix: The description of the `--everything` flag for the `uninstall` command was corrected.
- Bugfix: Connecting to a large cluster could take a very long time and even make the process hang. This is no longer the case.
- Bugfix: Telepresence now explicitly requires macFUSE version 4.0.5 or higher for macOS.
- Bugfix: A `tail -F <daemon log file>` no longer results in a "Permission denied" when reconnecting to the cluster.
- Change: The telepresence daemon will no longer use port 1234 for the firewall-to-SOCKS server, but will instead choose an available port dynamically.
- Change: On connect, telepresence will no longer suggest the `--mapped-namespaces` flag when the user connects to a large cluster.

### 2.0.3 (February 24, 2021)

- Feature: There is now an extension mechanism where you can tell Telepresence about different agents and what arguments they support. The new `--mechanism` flag can explicitly identify which extension to use.
- Feature: An intercept of `NAME` that is made using `--namespace=NAMESPACE` but not using `--deployment` will use `NAME` as the name of the deployment and `NAME-NAMESPACE` as the name of the intercept.
- Feature: Declare a local-only intercept for the purpose of getting direct outbound access to the intercept's namespace using boolean flag `--local-only`.
- Bugfix: Fix a regression in the DNS resolver that prevented name resolution using NAME.NAMESPACE. Instead, NAME.NAMESPACE.svc.cluster.local was required.
- Bugfix: Fixed race-condition in the agent causing attempts to dial to `:0`.
- Bugfix: It is now more strict about which agent versions are acceptable and will be more eager to apply upgrades.
- Change: Related to things now being in extensions, the `--match` flag has been renamed to `--http-match`.
- Change: Cluster connection timeout has been increased from 10s to 20s.
- Change: On connect, if telepresence detects a large cluster, it will suggest the `--mapped-namespaces` flag to the user as a way to speed it up.
- Change: The traffic-agent now has a readiness probe associated with its container.

### 2.0.2 (February 18, 2021)

- Feature: Telepresence is now capable of forwarding the intercepted Pod's volume mounts (as Telepresence 0.x did) via the `--mount` flag to `telepresence intercept`.
- Feature: Telepresence will now allow simultaneous intercepts in different namespaces.
- Feature: It is now possible for a user to limit what namespaces that will be used by the DNS-resolver and the NAT.
- Bugfix: Fix the kubectl version number check to handle version numbers with a "+" in them.
- Bugfix: Fix a bug with some configurations on macOS where we clash with mDNSResponder's use of port 53.

### 2.0.1 (February 9, 2021)

- Feature: Telepresence is now capable of forwarding the environment variables of an intercepted service (as Telepresence 0.x did) and emit them to a file as text or JSON. The environment variables will also be propagated to any command started by doing a `telepresence intercept nnn -- <command>`.
- Bugfix: A bug causing a failure in the Telepresence DNS resolver when attempting to listen to the Docker gateway IP was fixed. The fix affects Windows using a combination of Docker and WSL2 only.
- Bugfix: Telepresence now works correctly while OpenVPN is running on macOS.
- Change: The background processes `connector` and `daemon` will now use rotating logs and a common directory.
  - macOS: `~/Library/Logs/telepresence/`
  - Linux: `$XDG_CACHE_HOME/telepresence/logs/` or `$HOME/.cache/telepresence/logs/`


================================================
FILE: CHANGELOG.yml
================================================
# The YAML in this file should contain:
#
# items: An array of releases with the following attributes:
#     - version: The (optional) version number of the release, if applicable.
#     - date: >-
#         The date of the release in the format YYYY-MM-DD.
#         If the date is (SUPERSEDED), then the release didn't happen, which means
#         that its notes belong to the next release.
#     - notes: An array of noteworthy changes included in the release, each having the following attributes:
#         - type: The type of change, one of `bugfix`, `feature`, `security` or `change`.
#         - title: A short title of the noteworthy change.
#         - body: >-
#             Two or three sentences describing the change and why it
#             is noteworthy.  This is HTML, not plain text or
#             markdown.  It is handy to use YAML's ">-" feature to
#             allow line-wrapping.
#         - image: >-
#             The URL of an image that visually represents the
#             noteworthy change.  This path is relative to the
#             `release-notes` directory; if this file is
#             `FOO/releaseNotes.yml`, then the image paths are
#             relative to `FOO/release-notes/`.
#         - docs: The path to the documentation page where additional information can be found.
#
# For older changes, see CHANGELOG.OLD.md
items:
  - version: 2.27.2
    date: 2026-03-09
    notes:
      - type: bugfix
        title: Fix duplicate Section field in .deb package causing dpkg install failure
        body: >-
          The <code>.deb</code> package control file contained a duplicate <code>Section</code> field,
          which caused <code>dpkg -i</code> to fail with a parsing error. The <code>Section</code>
          field was specified both as a top-level <code>nfpm</code> default and explicitly under
          <code>deb.fields</code>. Moved to the top-level <code>section</code> key and removed the
          <code>deb.fields</code> block entirely.
        docs: https://github.com/telepresenceio/telepresence/issues/4073
  - version: 2.27.1
    date: 2026-03-08
    notes:
      - type: bugfix
        title: Fix duplicate Priority field in .deb package causing dpkg install failure
        body: >-
          The <code>.deb</code> package control file contained a duplicate <code>Priority</code> field,
          which caused <code>dpkg -i</code> to fail with a parsing error. This was caused by
          <code>nfpm</code> adding <code>Priority: optional</code> by default while the build
          configuration also specified it explicitly under <code>deb.fields</code>.
        docs: https://github.com/telepresenceio/telepresence/issues/4070
      - type: bugfix
        title: Fix ingest command lookup when container name is not specified
        body: >-
          The traffic manager now properly handles ingest lookups when using
          <code>telepresence ingest &lt;workload&gt; -- command</code> without specifying
          a container name. Previously, this would fail for workloads because the lookup
          couldn't find ingests with empty container names. The traffic manager now provides
          clearer error messages when a container name is required but not specified, and
          correctly resolves ingests for single-container workloads automatically.
        docs: https://github.com/telepresenceio/telepresence/issues/4067
  - version: 2.27.0
    date: 2026-02-28
    notes:
      - type: feature
        title: Add macOS package installer with root daemon as a system service
        body: >-
          A new macOS package installer (.pkg) is now available that installs Telepresence with the root daemon
          configured as a launchd service. This eliminates the need for elevated privileges when using Telepresence,
          as the daemon starts automatically at boot and runs in the background. Available for both Intel (amd64)
          and Apple Silicon (arm64) Macs.
        docs: install/client
      - type: feature
        title: Add Linux package installers with root daemon as a system service
        body: >-
          New Linux package installers (.deb for Debian/Ubuntu and .rpm for Fedora/RHEL) are now available that
          install Telepresence with the root daemon configured as a systemd service. This eliminates the need for
          elevated privileges when using Telepresence, as the service is enabled and started automatically during
          installation. Available for both amd64 and arm64 architectures.
        docs: install/client
      - type: feature
        title: Add Windows installer with root daemon as a system service
        body: >-
          A new Windows installer (.exe) is now available that installs Telepresence with the root daemon configured
          as a Windows service. The installer bundles WinFSP and SSHFS-Win dependencies for volume mount support,
          adds Telepresence to the system PATH, and optionally installs the TelepresenceDaemon service. This eliminates
          the need for elevated privileges when using Telepresence. Currently available for amd64 architecture only
          due to dependency constraints.
        docs: install/client
      - type: feature
        title: Add route-controller DaemonSet to prevent routing loops on local clusters
        body: >-
          A new optional <code>route-controller</code> DaemonSet can be deployed alongside the traffic-manager
          on local Kubernetes clusters (Kind, minikube, k3d, Docker Desktop) to prevent routing loops caused by
          deleted or non-existent service ClusterIPs. It installs an iptables <code>FORWARD</code> chain
          <code>DROP</code> rule for the service CIDR on every node, and adds per-IP kernel blackhole routes
          when a Service is deleted. Enable it with <code>routeController.enabled=true</code> in the Helm chart.
        docs: reference/route-controller
      - type: feature
        title: Automatic cache cleanup on version change
        body: >-
          Telepresence now tracks its version in a version.json file in the cache directory. When the CLI detects
          that the major.minor version differs from the running binary, it automatically quits running daemons and
          clears stale cache entries (preserving logs). This prevents issues caused by leftover cache files from a
          previous version. Patch and pre-release version changes do not trigger a cache cleanup.
      - type: bugfix
        title: Cluster DNS not injected into containers started by telepresence compose
        body: >-
          When using <code>telepresence compose up</code>, cluster hostnames did not resolve inside the compose 
          container because the daemon DNS IP and the tel2-search DNS search domain were not being added to the
          generated compose spec. DNS and dns_search are now correctly set for all engaged compose services.
        docs: https://github.com/telepresenceio/telepresence/issues/4053
  - version: 2.26.2
    date: 2026-02-14
    notes:
      - type: bugfix
        title: Dial 127.0.0.1 instead of 0.0.0.0 when connecting to local daemons
        body: >-
          When a VPN routes all private network addresses, dialing 0.0.0.0 gets routed through the VPN instead
          of reaching the locally running daemon. This causes Telepresence to report that no daemon is running
          even though the processes are active and listening. The client now dials 127.0.0.1 explicitly, and
          the Docker-published daemon port is bound to 127.0.0.1 to match.
        docs: https://github.com/telepresenceio/telepresence/issues/4048
      - type: bugfix
        title: Fix HTTP intercepts via telepresence compose failing when httpFilters or httpPaths are set
        body: >-
          The compose extension set HeaderFilters and PathFilters on the intercept spec but left the mechanism as "tcp".
          This caused the traffic manager to reject the intercept with "global TCP/UDP intercepts are disabled".
          The mechanism is now correctly switched to "http" when any HTTP filters are specified, matching the behavior
          of the CLI intercept command.
      - type: bugfix
        title: Fix "root daemon is embedded" error on Windows elevated terminals
        body: >-
          When running Telepresence in an elevated (administrator) terminal on Windows, commands like connect and
          loglevel failed with "root daemon is embedded". The user daemon now correctly delegates to the in-process
          root daemon session instead of returning an error.
        docs: https://github.com/telepresenceio/telepresence/issues/4049
      - type: bugfix
        title: Fix h2c (HTTP/2 cleartext) prior knowledge not working on transport
        body: >-
          Since Go 1.24, having both HTTP1 and UnencryptedHTTP2 enabled on an HTTP transport causes Go to
          default to HTTP/1.1 instead of using h2c prior knowledge. The transport now explicitly disables
          HTTP1 when UnencryptedHTTP2 is enabled, fixing h2c communication for both the default forwarding
          handler and intercepted traffic.
        docs: https://github.com/telepresenceio/telepresence/issues/4056
  - version: 2.26.1
    date: 2026-01-26
    notes:
      - type: bugfix
        title: Add support for "warning" as an alias for "warn" in log levels
        body: >-
          The "warning" alias for "warn" was the only acceptable value in the Helm chart, yet the traffic manager didn't accept it. This is
          now fixed so that both names are accepted by the Helm chart and by the traffic manager.
        docs: https://github.com/telepresenceio/telepresence/issues/4043
  - version: 2.26.0
    date: 2026-01-23
    notes:
      - type: feature
        title: Add ability for cluster admins to revoke other users' intercepts.
        body: |-
          The traffic-manager can now execute commands defined in the traffic-manager ConfigMap. As a result, clients that are authorized to
          update this ConfigMap can issue those commands.

          This mechanism lays the groundwork for distinguishing administrators from regular users in Telepresence. Administrators can be
          granted RBAC permissions that allow them to update the traffic-manager ConfigMap, while regular users cannot.

          The new command, `telepresence revoke <intercept-id>`, uses this mechanism to revoke the intercept associated with the specified
          ID.
        docs: reference/engagements/conflicts
      - type: feature
        title: Add support for overriding intercepts owned by inactive clients
        body: >-
          Introduce the Helm chart setting `intercept.inactiveBlockTimeout` that controls the maximum amount of time an intercept may be
          held by a client that is unreachable or inactive. Once this timeout is exceeded, the intercept no longer blocks conflicting
          intercepts and may be automatically removed when another client attempts to create a conflicting intercept.
        docs: reference/engagements/conflicts
      - type: feature
        title: Add support for sudo-rs
        body: >-
          Telepresence now supports running the root daemon using `sudo-rs`. This is necessary on Ubuntu where `sudo-rs` has become the
          default for `sudo`.
      - type: feature
        title: Add configuration to disable global TCP/UDP intercepts
        body: >-
          A new Helm chart configuration option `intercept.allowGlobalIntercepts` has been added to control
          whether global TCP/UDP intercepts are permitted. When set to `false`, only HTTP intercepts with
          header or path filters are allowed, preventing users from creating global intercepts that block
          other developers from intercepting the same port. This is particularly useful in shared development
          environments where multiple developers need to work on the same service simultaneously. The setting
          defaults to `true` to maintain full backward compatibility with existing deployments. When a user
          attempts to create a global intercept while the setting is disabled, they receive a helpful error
          message suggesting the use of `--http-header` or `--http-path-*` flags for HTTP-filtered intercepts.
        docs: reference/cluster_config#restricting_global_intercepts
      - type: feature
        title: Enhanced Traffic Manager Startup Reliability
        body: |-
          The Traffic Manager deployment now includes a `startupProbe` that accurately detects when the service is fully initialized and
          ready to handle traffic. This enhancement brings the following benefits:
          
          - **Prevents Premature Traffic Routing**: The manager only reports itself as ready after all configurations are loaded,
          eliminating potential race conditions
          - **Smoother Upgrades and Rollouts**: Deployment orchestration tools can reliably determine when the Traffic Manager is
          operational, improving overall installation stability
          
          This change is particularly beneficial in large clusters or complex networking environments where initialization may take longer
          than expected.
      - type: feature
        title: Support customizable daemon config file
        body: >-
          The config file for Telepresence is now configurable through the command-line flag `--config`.
          The `--config <agent config>` flag of the `telepresence genyaml` command was renamed to `--agent` to avoid confusion.
      - type: feature
        title: Support customizable daemon log file paths
        body: >-
          Log file paths for the Telepresence daemons are now configurable through the command-line flag `--logfile`
          that denotes a custom log file location or redirect of the log output to stdout/stderr. Two new log-level
          configuration entries for `cli` and `kubeAuthDaemon` are also introduced, expanding the existing log-level
          controls beyond just `userDaemon` and `rootDaemon`.
      - type: feature
        title: Add ability to exclude or include modifications made by other injectors when injecting the traffic agent.
        body: >-
          The Traffic Agent now has a new configuration option `agentInjector.mutationAware` that can be set to `false` to exclude
          modifications made by other injectors when injecting the traffic agent. Setting `agentInjector.mutationAware=true` requires
          `agentInjector.webhook.reinvocationPolicy=IfNeeded`. The default setting is `true`.
      - type: feature
        title: Add ability to disable the Traffic Agent's HTTP2/Clear-Text probing.
        body: >-
          The Traffic Agent now has a new configuration option `agent.enableH2cProbing` that can be set to `false` to disable the
          HTTP2/Clear-Text probing. The default setting is `true` to preserve backwards compatibility, but this will be changed to `false`
          in a future release.
      - type: feature
        title: Add ability to configure the Traffic Agent's retry interval for watching intercepts.
        body: >-
          The Traffic Agent's retry interval when it establishes its watcher for intercepts is now configurable using the Helm chart value
          `agent.watchRetryInterval`. The default retry interval was also increased from 2 seconds to 10 seconds to improve resilience when
          connections to the traffic manager are lost.
      - type: feature
        title: Make traffic-agent consumption metrics reporting optional.
        body: >-
          Metrics reporting for the traffic-agent can now be optionally enabled or disabled via the `agent.enableConsumptionMetrics` Helm
          chart value. The traffic-agent metrics will also be completely disabled when the Helm chart value `prometheus.port` is unset or
          zero.
          This change is intended to reduce the amount of unnecessary traffic generated by the traffic-agent when consumption metrics
          reporting is of no interest to the user.
      - type: feature
        title: Improved efficiency of traffic manager map updates.
        body: >-
          The watchable map has been refactored into a client/server model that supports delta-based updates. Where supported, gRPC now
          transmits only incremental changes instead of full snapshots, significantly reducing payload sizes. This improvement is especially
          important for large clusters, where full snapshots can be sizable and costly to transmit. Full snapshot streaming remains
          available as a backward-compatible fallback for clients that do not support delta methods.
      - type: change
        title: Use TCP/IP instead of Unix sockets for all communication between local processes.
        body: >-
          Telepresence now uses TCP/IP sockets for all communication between local processes. This change reduces the
          risk of socket-related errors caused by lingering sockets from previous Telepresence sessions. It also
          eliminates the difficulties of using Unix sockets for communication between a system service and user
          processes on Windows.
      - type: change
        title: Don't allow connect with --docker when client is configured with intercept.useFtp=true
        body: |-
          The `--docker` flag is not allowed when the client is configured with `intercept.useFtp=true` and an error is now generated
          instantly by the `telepresence connect --docker` command.
          
          The docker volume plugin cannot use FTP because it requires two ports: a fixed control port that Telepresence can proxy, and a
          dynamic data port (randomly chosen during connection) that Telepresence cannot proxy on-demand. The port-forwarder only forwards
          pre-configured ports and doesn't understand FTP's protocol. Consequently, FTP isn't allowed in this scenario. If it was, then when
          an FTP server tells the client to use an unpredictable second port for file transfers, Telepresence would block it—causing the
          connection to fail every time.
      - type: change
        title: Better names for the Telepresence Daemons
        body: |-
          Using the name xxx-foreground isn't very intuitive when talking about daemon processes. Yes, the command, when issued in a
          terminal, will start the daemon in foreground so the names of the commands does have some logic to them, but then again, starting
          in the foreground is the default behavior of any command. And when the same command is started from the CLI, it will be started in
          the background, despite its name.

          The daemons are therefore now renamed:

          - connector-foreground =&gt; userd
          - daemon-foreground =&gt; rootd
          - kubeauth-foreground =&gt; kubeauthd
          
          This also affects the Telepresence hidden CLI commands `telepresence daemon-foreground` and `telepresence connector-foreground`.
      - type: bugfix
        title: Add retry logic for tunnel connection attempts
        body: >-
          The tunnel dialer now uses a backoff-based retry mechanism when establishing connections. This ensures that dialing attempts for
          both TCP and UDP protocols persist if the target IP is not immediately ready to receive requests.
      - type: bugfix
        title: Retry mechanism for client tunnel creation
        body: >-
          The traffic agent now includes a backoff-based retry mechanism when establishing tunnel streams to a client. This prevents
          "no dial watcher" connection failures caused by a race condition where the tunnel request arrives before the client has fully
          initialized its communication channel.
      - type: bugfix
        title: Fix "close of closed channel" panic in the root daemon process.
        body: >-
          The root daemon process would sometimes panic with "close of closed channel" due to a race condition in the DNS cache logic.
          This issue has been fixed.
  - version: 2.25.2
    date: 2025-12-26
    notes:
      - type: bugfix
        title: Ensure that the exit code from a docker command becomes the exit code of the Telepresence command.
        body: >-
          When running a Docker command using `telepresence docker-run` or `telepresence curl`, the exit code would be 1 for all non-zero
          exit codes from the Docker command. This has been fixed so that the exit code from the Docker command becomes the exit code of the
          Telepresence command.
      - type: bugfix
        title: Fix a bug causing truncation of command text when generating external command help.
        body: >-
          The Telepresence CLI would truncate the command text when generating help for external commands such as `docker compose` that
          had text spanning more than one line. This has been fixed so that the full command text is displayed.
      - type: bugfix
        title: Fix schema for agent.image.pullSecrets
        body: >-
          The `agent.image.pullSecrets` is referenced by the helm chart's deployment.yaml but was previously disallowed by the schema file.
  - version: 2.25.1
    date: 2025-11-10
    notes:
      - type: bugfix
        title: Volumes did not mount correctly when using `telepresence connect --docker` when Docker had IPv6 enabled.
        body: >-
          Telepresence failed to mount volumes after connecting with `telepresence connect --docker` when Docker Engine had IPv6 enabled in
          its default bridge network. Disabling IPv6 in the Telepresence client configuration did not resolve the issue. This was fixed in
          Telepresence Volume Plugin "telemount" version 0.3.2, which circumvented a [bug in sshfs](https://github.com/libfuse/sshfs/issues/335).
          Additionally, the volume plugin will no longer use IPv6 when the client configuration `docker.enableIPv6` is set to `false`.
      - type: bugfix
        title: Remove unnecessary setcap from traffic binary
        body: >-
          The setcap capability (cap_net_bind_service) was removed from the traffic binary build process.
          This capability was originally added to allow the binary to bind to privileged ports, specifically
          port 443 for the mutating webhook. Since version 2.24.0, the default mutating webhook port was
          changed to 8443 (a non-privileged port), making this capability unnecessary. Removing it simplifies
          the build process and reduces the security surface area.
  - version: 2.25.0
    date: 2025-10-16
    notes:
      - type: feature
        title: HTTP Intercepts with HTTP header and path filtering
        body: |-
          Telepresence now supports HTTP Intercepts, enabling fine-grained HTTP traffic filtering for intercepts.
          Users can intercept only specific HTTP requests based on headers and URL paths using the new `--http-header`,
          `--http-path-prefix`, `--http-path-equal`, and `--http-path-regex` flags. This allows multiple developers
          to work on the same service simultaneously by intercepting only their specific traffic patterns, rather than
          intercepting all traffic to a service.

          **Routing Precedence Model**: Header-based intercepts take priority over path-only intercepts. When multiple
          intercepts are active on the same workload, requests are evaluated against header-based filters first, then
          path-only filters. This enables different developers to use header-based personal intercepts (e.g.,
          `x-user=alice`) while others use path-based intercepts (e.g., `/admin/*`) without conflicts.

          **Conflict Detection**: Intercepts conflict only when their filters would route the same traffic to different
          destinations. Key rules:

          - Different header values (e.g., `X-User=adam` vs `X-User=bertil`) do NOT conflict
          - Header filters use subset logic: `X-User=adam` conflicts with `X-User=adam, X-Session=123` (first is subset)
          - Same headers with different paths do NOT conflict: `X-User=adam + /api/*` vs `X-User=adam + /admin/*`
          - Path-only intercepts operate at a lower priority tier than header-based intercepts

          The feature maintains full backward compatibility with existing TCP intercepts.
        docs: howtos/engage#intercept-your-application
      - type: feature
        title: TLS/mTLS Intercept Support
        body: |-
          Support was added for HTTP-filtered intercepts on applications using TLS/mTLS encryption. The new functionality enables
          Telepresence to decrypt and inspect encrypted traffic by accessing TLS certificates, facilitating debugging and testing of secure
          applications.

          Certificates can be accessed via mounted volumes or Kubernetes secrets in the same namespace. New annotations
          (`telepresence.io/downstream-cert-path` and `telepresence.io/downstream-cert-secret`) allow configuration of certificate paths or
          secrets for decrypting traffic on specified ports. For mTLS, the `telepresence.io/upstream-cert-` annotation prefix supports
          re-encryption of upstream traffic using client-side certificates.

          For self-signed certificates, the `telepresence.io/upstream-insecure-skip-verify` annotation bypasses verification, enabling
          HTTP-filtered intercepts in development environments. The `--plaintext` option allows unencrypted traffic during intercepts or
          wiretaps.
        docs: howtos/mtls
      - type: feature
        title: Add MCP server to Telepresence CLI
        body: >-
          The Telepresence CLI now includes a lightweight MCP server that can be used to allow local AI agents to execute
          some CLI commands, such as connecting to a traffic manager, listing interceptable apps, and creating an intercept.
          The server can be enabled using the new `telepresence mcp claude enable` or `telepresence mcp vscode enable` commands.
      - type: feature
        title: Enhance Resilience of Engagements During Traffic-Manager Redeploys
        body: >-
          The telepresence client and traffic-agent now automatically reconnect to the traffic-manager after a restart.
          Upon reconnection, they share their current state, ensuring ongoing engagements remain uninterrupted. This
          improvement minimizes user impact during traffic-manager upgrades.
      - type: feature
        title: Add support for IPv6 and dual-stack when using `telepresence connect --docker`
        body: |-
          Telepresence now supports using `telepresence connect --docker` together with Kubernetes single-stack IPv4
          networking, single-stack IPv6 networking, or dual-stack networking with both network families. Both are
          enabled by default, but can be disabled by setting the `client.docker.enableIPv4` or `client.docker.enableIPv6`
          to false in the Helm chart, or by using the corresponding settings `docker.enableIPv4` or `docker.enableIPv6`
          the client configuration file.

          The new dual-stack support requires the teleroute network plugin 0.4.0 or later. The client will install this
          version automatically unless you work in an air-gapped environment.
      - type: feature
        title: RESTful API Service Reintroduced with HTTP Filtering Support
        body: >-
          The Telepresence RESTful API service has been restored with enhanced support for HTTP header and path filtering. This service
          enables workloads to programmatically query whether they should handle requests based on active intercepts.
          Added `--metadata` flag allows attaching custom metadata to intercepts that can be retrieved through the API endpoints.
          The API server is now accessible via `TELEPRESENCE_API_HOST` and `TELEPRESENCE_API_PORT` environment variables in both cluster
          pods and local intercept handlers.
        docs: reference/restapi
      - type: feature
        title: More efficient DNS handling in the traffic-manager
        body: |-
          Telepresence will no longer send DNS queries for A and AAAA records to the traffic-manager. Instead, it will
          send a single query for the name and then derive the record type from the type of IP address (IPv4 or IPv6) in
          the response. This reduces the number of DNS queries sent to the cluster's DNS server and makes the behavior
          more consistent with the `net.LookupNetIP` function in the Go standard library, which the traffic-manager
          ultimately uses.

          The lookups will now be performed exclusively by the traffic-manager, never by the traffic-agent. This means
          that traffic-agents with special DNS configurations might stop working. If this is a problem, the old behavior
          can be restored by setting the `client.dns.useComplexLookup` parameter in the Helm chart or the
          `dns.useComplexLookup` parameter in the client configuration file.
      - type: feature
        title: Updated Helm chart to include keywords and the source repository URL.
        body: >-
          Improves the Helm chart's discoverability on platforms like Artifact Hub and
          automatically adds a direct link to the source code for users, providing better context.
      - type: change
        title: Telepresence client now requires a traffic manager version of at least 2.21.0.
        body: >-
          The traffic manager is now required to be at least version 2.21.0. Versions earlier than 2.21.0 will no
          longer work. The reason for this is that implementing the new reconnect behavior would require too much
          conditional code with older traffic-managers, and a lot of functionality wouldn't work anyway.
      - type: change
        title: Build binaries and docker images that are stripped from dwarf and debug info.
        body: >-
          The Telepresence binaries and docker images are now built with the `-w -s` flags, which strip the debug
          symbols and the DWARF information. This reduces the size of the binaries and docker images by about 50MB.
          Debug binaries can be built using `DEBUG=1 make build`.
  - version: 2.24.1
    date: 2025-09-05
    notes:
      - type: bugfix
        title: Fix invalid filename generated by telepresence gather-logs command
        body: >-
          The `telepresence gather-logs` command would generate a filename that was invalid on Windows unless the user
          specified the filename explicitly using the `--output-file` flag. This was fixed using a more condensed
          format for the timestamp in the filename.
        docs: https://github.com/telepresenceio/telepresence/issues/3956
      - type: bugfix
        title: A `telepresence connect --docker` fails kubeconfig points to a port-forwarded localhost
        body: >-
          Telepresence would fail to connect to a cluster from within a container if the kubeconfig pointed to a
          port-forwarded localhost because that localhost is not reachable from within the container. This situation is
          now detected so that the address used from within the container has "localhost" replaced with
          "host.docker.internal", or an alternative alias configured by the user using the new `docker.hostGateway`
          parameter in the client configuration.
      - type: bugfix
        title: A `telepresence connect --docker` would fail with some k3s configurations
        body: >-
          Telepresence would fail to connect to a k3s cluster unless the cluster's IP was a loopback address. This is
          now changed so that any IP:port combination is accepted as long as a container can be found that defines a
          mapping for it.
      - type: bugfix
        title: Restore default value for agent-state.yaml in the traffic-manager configmap
        body: >-
          The value was previously an empty string which caused problems when when Argo CD tried to synchronize it.
        docs: https://github.com/telepresenceio/telepresence/pull/3953
  - version: 2.24.0
    date: 2025-08-25
    notes:
      - type: feature
        title: Support for Docker Compose
        body: >-
          Telepresence now supports integration with Docker Compose. It connects to and interacts with cluster resources
          by utilizing `x-tele` extensions within a Docker Compose specification. These extensions configure
          your local services to effectively act as handlers for Telepresence connections, providing them with the
          necessary access to the traffic, volumes, and environment of the engaged container.
        docs: howtos/docker-compose
      - type: feature
        title: Serve up a web-page with telepresence serve.
        body: >-
          A new `telepresence serve <service>` command was added that starts a web browser on the specified service. The
          command is especially useful when used in combination with `telepresence connect --docker` because it will
          then expose the given service on a random port on localhost.
        docs: reference/cli/telepresence_serve
      - type: feature
        title: Add ability to optionally clean up sidecars that have been idle above a specified duration
        body: >-
          Added configuration parameter `agent.maxIdleTime` to the Helm Chart, to control how long a sidecar can be idle before it is cleaned up.
          The updating of latestEngagementTime is done every 1m in the Remain Call, which is now called every 1min, compared to every 5s in the past.
          The agent state (containing latestEngagementTime) is updated in memory, and lazily persisted to the traffic-manager configmap every 2min.
          Removal of the sidecar is also done in the Remain Call, if the sidecar has been idle for longer than the configured `agent.maxIdleTime`.
      - type: feature
        title: Add option to drop client label in prometheus metrics for GDPR compliance
        docs: https://github.com/telepresenceio/telepresence/issues/3491
        body: >-
          The Helm Chart now has a `prometheus.dropClientLabel` option that can be set to true to drop the client label from the prometheus metrics.
          This is useful for GDPR compliance, as the client label contains personal data, which can be potentially problematic, i.e allowing the ability to
          track the working times of an individual.
      - type: feature
        title: Prefix metrics with "telepresence_"
        docs: https://github.com/telepresenceio/telepresence/issues/3920
        body: Avoids metric conflicts and makes these more explicit to improve search in observability stacks.
      - type: feature
        title: CLI documentation in markdown format
        body: >-
          The Telepresence CLI is now capable of generating its own documentation in markdown format using the
          new `telepresence man-pages` command. The generated documentation is included under the heading "Telepresence
          CLI" in the the Telepresence reference documentation.
        docs: reference/cli/telepresence
      - type: feature
        title: Service Port Rerouting
        body: >-
          The telepresence connect command introduces a new `--reroute-remote <host>:<port>:<new-port>[/{tcp|udp}]` flag,
          allowing users to remap service ports. This feature redirects requests sent to `<host>:<new-port>` to
          `<host>:<port>` within the Telepresence VIF. The flag can be repeated.
      - type: feature
        title: Local Port Rerouting
        body: >-
          The telepresence connect command introduces a new `--reroute-local <local-port>:<host>:<port>[/{tcp|udp}]` flag,
          allowing users to redirect requests sent to ports on localhost to arbitrary service ports. This feature enables
          requests sent to `localhost:<local-port>` to be redirected to `<host:port>`. The flag can be repeated.
      - type: feature
        title: Add information about using Kubernetes auth plugins when using Telepresence CLI in a container
        body: >-
          Kubernetes, and hence the Telepresence CLI, must have access to auth plugins declared in the kubeconfig. A
          section was added to the documentation explaining how to achieve this when using the Telepresence CLI in a
          container.
        docs: reference/inside-container#kubernetes-auth-plugins
      - type: feature
        title: Add log directory to the output of `telepresence config view`
        body: >-
          The `telepresence config view` command now includes the path to the directory where the Telepresence logs are
          stored.
      - type: change
        title: The default port for the mutating webhook is now 8443. It used to be 443
        body: >-
          Port numbers below 1000 are reserved for privileged processes and are often restricted by firewalls.
          Consequently, the default port for the mutating webhook was changed from 443 to 8443. You can override this
          default port using the agentInjector.webhook.port value in the Helm Chart. This change is particularly
          significant for clusters using Telepresence, where firewall rules limit the admission webhook's access to
          worker nodes, such as in an Amazon EKS cluster.
  - version: 2.23.6
    date: 2025-07-23
    notes:
      - type: bugfix
        title: Public DNS names aren't resolved from local docker application started by Telepresence
        body: >-
          A container running using `telepresence docker-run` or `telepresence <engage-type> --docker-run` was not able to resolve public
          DNS names such as "google.com". The problem is caused by an undocumented behavior in Docker's internal DNS-resolver when the
          `--dns` flag is used in conjunction with the teleroute network, where the DNS-server no longer finds public names even thought
          another bridge network is connected. The problem was solved by using a fallback resolver in the Telepresence DNS resolver.
  - version: 2.23.5
    date: 2025-07-20
    notes:
      - type: bugfix
        title: Let docker.Start pass on --interactive to docker start.
        body: >-
          An `-i` or `--interactive` flag given when the user runs a container with telepresence must be propagated to
          `docker start` to attach `stdin`.
  - version: 2.23.4
    date: 2025-07-18
    notes:
      - type: bugfix
        title: Never truncate meaningful output from a command
        body: >-
          The new human-friendly output using a progress reporter would sometimes truncate error output. This is no
          longer the case. Instead, all output will be wrapped.
      - type: bugfix
        title: Typo in client mount-policy "RemoteReadonly" should be "RemoteReadOnly"
        body: >-
          The Helm Chart correctly expects the remote read-only mount policy to be `RemoteReadOnly`, but the client
          expected it to be `RemoteReadonly` (without a leading capital letter in the word "only").
      - type: bugfix
        title: DNS server does not respect semicolons as comments in resolv.conf files
        body: >-
          Telepresence does not work correctly if `/etc/resolv.conf` contains semicolons, which are valid comments as of
          [linux manpage](https://man7.org/linux/man-pages/man5/resolv.conf.5.html).
        docs: https://github.com/telepresenceio/telepresence/issues/3908
      - type: bugfix
        title: Use NXDOMAIN instead SERVFAIL for DNS recursion errors (timeouts)
        body: >-
          A DNS for a single label name that fails in a minikube - or another type of local cluster - will sometimes
          result in a recursive lookup on the host. Without any type of recursion detection, this lookup will timeout
          waiting for itself. Previously, this resulted in a `SERVFAIL` from the cluster DNS, which triggered renewed
          lookup attempts that never stopped. This is now changed so that the same type of timeouts instead results
          in an `NXDOMAIN` error that doesn't trigger renewed attempts.

          Also, the recursion check now handles that the cluster's DNS adds suffixes from its search-path.
        docs: reference/config#recursioncheck
  - version: 2.23.3
    date: 2025-07-07
    notes:
      - type: bugfix
        title: Fix tunnel channel reuse in traffic-agent to prevent connection failures
        body: >-
          Previously, when a tunnel became active, the map maintained by the traffic-agent containing channel values for
          agent-to-client tunnels wasn't cleared. This resulted in closed channels remaining in the map. When port
          numbers were eventually reused, these stale entries would be discovered and their closed channels would cause
          immediate stream termination, leading to data loss.
      - type: bugfix
        title: The -p flags would have no effect in combination with --docker-run
        body: |-
          When using `telepresence <engage> --docker-run` with a `-p <port spec>` flag, the Docker driver silently
          ignored the port specification. This occurred because the `--network=<teleroute network>` flag disabled both
          additional network directives and the default bridge network (which is normally used when no network is
          specified). This has been resolved by:

          1. Adding the teleroute network after container creation instead of using a flag
          2. Replacing the single `docker run` command with a sequence of:
             - `docker create`
             - Network addition
             - `docker start`
      - type: bugfix
        title: Requests lost when using wiretap
        body: >-
          Wiretap connection `Close` and `Write` could sometimes be out of sync, so that the `Close` would be executed
          before the `Write`, causing a "read/write on closed pipe" error and loss of data.
  - version: 2.23.2
    date: 2025-06-27
    notes:
      - type: bugfix
        title: Adding an alsoProxy subnet with 32-bit mask no longer works on macOS
        body: >-
          Routing improvements introduced in 2.23.0 surfaced a problem when using special handling of submets with
          32-bit masks. The special handling now causes problems on macOS. The logic is now conditioned to only run
          under linux since it's no longer needed on other operating systems.
      - type: bugfix
        title: The gather-logs command produces no cluster-side logs when connected with --docker
        body: >-
          The `telepresence gather-logs` command did not include cluster-side logs when connected using `--docker`,
          because it tried to store such logs in a temporary directory created by the CLI. The directory was not mounted
          in the daemon container. This is now changed so that the temporary directory is created under the users
          cache directory, which is guaranteed to be mounted on the container.
      - type: bugfix
        title: Docker volume mounts failing when connected using both --docker --proxy-via flags
        body: >-
          The volume mounter would fail when doing a `telepresence connect --docker --proxy-via all=<workload>` followed
          by an intercept using `--docker-run`, because the bridge that the daemon created would try to access the
          intercepted pod using its proxied IP. Now, the bridge will instead use the pod's real IP.
  - version: 2.23.1
    date: 2025-06-24
    notes:
      - type: feature
        title: New telepresence helm version command.
        body: >-
          The new `telepresence helm version` command prints the version of the helm client that is embedded in the
          telepresence binary.
      - type: bugfix
        title: Engagement disconnects after certain amount of time
        body: |-
          The configuration parameter `connectionTTL`, controlling how long a client could be completely idle before
          the traffic-manager or traffic-agent would consider it dead and disconnect (default 24 hours), had no effect.
          Instead, an engagement would disconnect after 2 hours (the default gRPC `keepAlive.Time` duration). The
          default of 24 hours is now reinstated.

          The Helm value `client.connectionTTL` was moved to `grpc.connectionTTL` because it is a server configuration.
          The old value will still work, but it is deprecated and will be removed eventually.
        docs: https://github.com/telepresenceio/telepresence/issues/3861
      - type: bugfix
        title: Telepresence breaks if config.yml exists but is empty
        body: >-
          Telepresence would refuse to connect with a misleading error if the `config.yml` file containing the client's
          configuration parameters existed but was empty.
        docs: https://github.com/telepresenceio/telepresence/issues/3887
  - version: 2.23.0
    date: 2025-06-17
    notes:
      - type: feature
        title: New telepresence wiretap command
        body: >-
          The new `telepresence wiretap` command introduces a read-only form of an `intercept` where the original
          container will run unaffected while a copy of the wiretapped traffic is sent to the client.

          Similar to an `ingest`, a `wiretap` will always enforce read-only status on all volume mounts, and since that
          makes the `wiretap` completely read-only, there's no limit to how many simultaneous wiretaps that can be
          served. In fact, a `wiretap` and an `intercept` on the same port can run simultaneously.
      - type: feature
        title: Add Telepresence Docker Network Plugin "Teleroute"
        body: |-
          The new Teleroute plugin makes it possible for containers to use the Telepresence daemon's VIF without having
          to change their network mode, i.e. a `--network container:<daemon container>` is no longer needed. Instead,
          a container can use a custom network created when the Telepresence daemon connects to the cluster.
          This network uses the new driver "teleroute" which is provided by Telepresence.

          With the Teleroute Docker network plugin in place, there's no longer a need for special handling of network
          related docker flags, and the following changes have been made:

          1. The Teleroute Docker network driver will be installed unless it is already present.
          2. A Teleroute network will be created when starting the Telepresence daemon as a container. This network will
             then communicate with that container and expose the same CIDRs as the daemon's VIF.
          3. A container started with `telepresence curl`, or
             `telepresence {ingest|intercept|replace|wiretap} --docker-{run|build|debug}` will no longer change its
             network mode using `--network container:<daemon container>`, instead it will use
             `--network <name of teleroute network>`.
          4. As a consequence of #3, published ports and other networks that are added no longer need special handling
             using socat containers, so all of that has been removed.
        docs: reference/teleroute
      - type: feature
        title: Control whether the initContainer injection is enabled/disabled
        body: >-
          The initContainer injection can be optionally disabled by setting the `agent.initContainer.enabled` parameter
          to false in the `values.yaml` file of the Helm chart. This feature was added to improve compatibility with
          systems like OpenShift where the initContainer injection cannot be used due to inability to give initContainer
          NET_ADMIN permissions.
      - type: feature
        title: Human friendly progress reporting
        body: >-
          Telepresence now uses a progress reporter that is very similar to the one used by Docker compose. The
          implementation is a variation of that reporter's source code, so big thanks to the Docker compose CLI authors
          for making it available as OSS.

          A new global `--progress <progress>` flag was added. It defaults to "auto" which means that the style is
          chosen depending on whether the command runs from a tty type terminal. Other possible values are "plain",
          "quiet", and "json". `--progress quiet` is implied when formatted output is chosen using `--output json|yaml`.
      - type: feature
        title: Add the ability to use a name for the target host, and defer its resolution
        body: >-
          Knowing the IP of the local service that acts as the handler service for an intercept, replace, or wiretap
          is not possible until that service has been started, and telepresence will therefore now accept a name for the
          `--address` flag. The name is not resolved by the daemon until a request is made to the engaged container on a
          port that is routed to the local service.
      - type: feature
        title: Add intercept.mountsRoot to the client configuration
        body: >-
          The new `intercept.mountsRoot` can be set to a directory that will be used as the root for all automatically
          generated mount directories. The default is to use the platforms temp directory.

          The setting is not used on windows, where the mounts use drive letters.
      - type: feature
        title: Add docker.addHostGateway to the client configuration.
        body: >-
          When `docker.addHostGateway` is set to `true`, the `docker run`
          that starts the containerized Telepresence daemon will include the flag
          `--add-host host.docker.internal:host-gateway`.

          The flag is set to `true` by default on linux platforms and `false` on
          other platforms.
      - type: feature
        title: Client configuration to override the Helm download URL
        body: >-
          The default download URL `oci://ghcr.io/telepresenceio/telepresence-oss` used when installing Helm charts with
          versions that differ from the version of the embedded Helm chart can now be overridden using the client config
          value `helm.chartURL`.
      - type: change
        title: Dropped support for Telepresence legacy flags
        body: |-
          The `telepresence` CLI command will no longer support legacy flags such as:

          - `--swap-deployment`
          - `--new-deployment`
          - `--docker-mount`
          - `--method`

          A "Legacy Telepresence command used" warning has been printed for several years now, and the mapping for the
          `--swap-deployment` was the `intercept` command, which is very confusing today since we now have the `replace`
          command.
      - type: bugfix
        title: Let containerized daemon consistently use the same port for gRPC
        body: >-
          The port used for the containerized gRPC was randomly selected using the hosts network namespace. This is now
          changed so that the port used by the container is preset and configurable and then mapped to a random port
          on the host.

          The port number can be configured using `grpc.daemonPort` and defaults to `4038`.
      - type: bugfix
        title: Telepresence fails to start the root daemon on Windows unless current user is the administrator
        body:
          The telepresence CLI starts a user daemon and a root daemon. The latter is started using administrator
          privileges. On a Windows box, this means that the root daemon runs using a different user account (typically
          "Administrator") unless the current user can run processes with elevated privileges. The socket used for
          communication with the root daemon was assumed to reside in `%USERPROFILE%\AppData\Local\telepresence`
          and was therefore not found by the CLI and the user daemon. The location will henceforth always be based on the
          `%USERDATA` of the CLI user.
        docs: https://github.com/telepresenceio/telepresence/issues/3875
      - type: bugfix
        title: Telepresence DNS Fallback stripping CNAME information from DNS Records.
        body: >-
          The fallback DNS server used on Linux systems without a systemd.resolved configuration, would assume that
          suffixes belonging to the `search` defined in the `/etc/resolved` had been added by the caller. Since this
          search path was assumed to be intended for the local machine only, the suffix was stripped off prior to
          sending the name to the cluster for resolution. This made queries fail that relied on the qualified name to
          resolve CNAME records. The logic stripping the suffix was therefore removed.
        docs: https://github.com/telepresenceio/telepresence/issues/3873
  - version: 2.22.6
    date: 2025-06-03
    notes:
      - type: bugfix
        title: Regression causing "unexpected slice size" with older traffic-managers.
        body: >-
          Older traffic-managers have a different way of reporting the service-subnet. The new way, using a
          list of subnets reused a proto slice in the GRPC message that was expected to be empty, but older
          traffic-managers will pass the IP of the kube-dns here. It cannot be parsed as a list of
          subnets. A check that remedies this mismatch was inserted.
  - version: 2.22.5
    date: 2025-05-29
    notes:
      - type: bugfix
        title: Unable to correctly determine service CIDR with Kubernetes >= 1.33
        body: >-
          Starting with Kubernetes 1.33, the strategy of extracting the cluster's service CIDR from an error message no
          longer works because the error message has changed. The root cause for this is that Kubernetes introduced the
          ability to use [Multiple Service CIDRs](https://gist.github.com/aojea/c20eb117bf1c1214f8bba26c495be9c7). Since
          `ServiceCIDR` is now a resource, it can be easily retrieved (and modified) using standard Kubernetes client
          API calls, and this is what the traffic manager will use going forward.

          The fix required an addition to the traffic-manager's RBAC, granting it sufficient permissions to list
          `networking.k8s.io/servicecidrs`. A future enhancement will allow the traffic manager to watch for service
          CIDR changes.
      - type: bugfix
        title: Helm chart schema type for nodeSelector was incorrect
        body: >-
          The Helm chart schema for the `nodeSelector` value was incorrect. Kubernetes defines different types for
          nodeSelector (inside PodSpec objects) and NodeSelector (inside NodeAffinity, VolumeNodeAffinity and a
          bunch of other places). The schema was changed to use the correct type. The name `nodeSelector` is still
          used in the Helm chart so this change is backwards compatible.
      - type: bugfix
        title: Pods with container ports named the same caused intercept to fail
        body: >-
          Intercept container ports now have numbers appended to them if there are multiple
          ports from multiple containers with the same name. This bugfix works around an issue
          where Kubernetes allows multiple port definitions in a pod spec to have the same name.
      - type: bugfix
        title: Don't include k8s-defs.json to chart package
        body: >-
          The k8s-defs.json was unnecessarily included to the Helm chart package and this increased the Helm release
          secret size so much that it could prevent installation of the Helm chart depending on k8s settings. To fix
          this k8s-defs.json is not included to the Helm chart anymore.
  - version: 2.22.4
    date: 2025-04-26
    notes:
      - type: bugfix
        title: Don't require internet access when installing the traffic-manager using Helm
        body: >-
          A regression occurred with the introduction of Helm validation in version 2.22.0. The schema relied on
          external HTTPS links, which inadvertently created a requirement for internet accessibility. To resolve this,
          we have embedded these resources within the schema, thus removing the need for an internet connection.
      - type: bugfix
        title: Client failed connect with "failed to exit idle mode" in the connector.log after being idle
        body: >-
          The port-forward connections used for connecting the daemon to the traffic-agents were using
          an incorrect context, causing them to fail after being idle for some time.
      - type: bugfix
        title: Fix deadlock in Telepresence daemon
        body: >-
          A deadlock would sometimes occur in the Telepresence daemon that prevented it from doing a clean
          exit during `telepresence quit`.
      - type: bugfix
        title: Don't log error message when a pod watcher ends due to cancellation
        body: >-
          Errors printed in the daemon log during normal cancellation of the WatchAgentPods goroutine are
          now removed.
  - version: 2.22.3
    date: 2025-04-08
    notes:
      - type: change
        title: The Windows install script will now install Telepresence to "%ProgramFiles%\telepresence"
        body: |-
          Telepresence is now installed into "%ProgramFiles%\telepresence" instead of "C:\telepresence".
          The directory and the Path entry for  `C:\telepresence` are not longer used and should be removed.
      - type: bugfix
        title: The Windows install script didn't handle upgrades properly
        body: |-
          The following changes were made:

            - The script now requires administrator privileges
            - The Path environment is only updated when there's a need for it
        docs: https://github.com/telepresenceio/telepresence/issues/3827
      - type: bugfix
        title: The Telepresence Helm chart could not be used as a dependency in another chart.
        body: >-
          The JSON schema validation implemented in Telepresence 2.22.0 had a defect: it rejected the `global` object.
          This object, a Helm-managed construct, facilitates the propagation of arbitrary configurations from a parent
          chart to its dependencies. Consequently, charts intended for dependency use must permit the presence of the
          `global` object.
        docs: https://github.com/telepresenceio/telepresence/issues/3833
      - type: bugfix
        title: Recreating namespaces was not possible when using a dynamically namespaced Traffic Manager
        body: >-
          A shared informer was sometimes reused when namespaces were removed and then later added again, leading
          to errors like "handler ... was not added to shared informer because it has stopped already".
        docs: https://github.com/telepresenceio/telepresence/issues/3831
      - type: bugfix
        title: Single label name DNS lookups didn't work unless at least one traffic-agent was installed
        body: >-
          A problem with incorrect handling of single label names in the traffic-manager's DNS resolver was fixed. The
          problem would cause lookups like `curl echo` to fail, even though telepresence was connected to a namespace
          containing an "echo" service, unless at least one of the workloads in the connected namespace had a
          traffic-agent.
  - version: 2.22.2
    date: 2025-03-28
    notes:
      - type: bugfix
        title: Panic when using telepresence replace in a IPv6-only cluster
        body: |-
          A "slice bounds out of range" would occur when the targeted Pod's Traffic Agent requested a local dialer to
          be created on the client. This was due to a glitch in the VPN-tunnel implementation that got triggered when
          a remote IPv6-address was combined with a local IPv4-address.
        docs: https://github.com/telepresenceio/telepresence/issues/3828
  - version: 2.22.1
    date: 2025-03-27
    notes:
      - type: bugfix
        title: Only restore inactive traffic-agent after a replace.
        body: |-
          A regression in the 2.20.0 release would cause the traffic-agent to be replaced with a dormant version that
          didn't touch any ports when an intercept ended. This terminated other ongoing intercepts on the same pod.
          This is now changed so that the traffic-agent remains unaffected for this use-case.
  - version: 2.22.0
    date: 2025-03-14
    notes:
      - type: feature
        title: New telepresence replace command.
        body: |-
          The new `telepresence replace` command simplifies and clarifies container replacement.

          Previously, the `--replace` flag within the `telepresence intercept` command was used to replace containers.
          However, this approach introduced inconsistencies and limitations:

          * **Confusion:** Using a flag to modify the core function of a command designed for traffic interception led
            to ambiguity.
          * **Inaccurate Behavior:** Replacement was not possible when no incoming traffic was intercepted, as the
            command's design focused on traffic routing.

          To address these issues, the `--replace` flag within `telepresence intercept` has been deprecated. The new
          `telepresence replace` command provides a dedicated and consistent method for replacing containers, enhancing
          clarity and reliability.

          Key differences between `replace` and `intercept`:

          1. **Scope:** The `replace` command targets and affects an entire container, impacting all its traffic, while
             an `intercept` targets specific services and/or service/container ports.
          2. **Port Declarations:** Remote ports specified using the `--port` flag are container ports.
          3. **No Default Port:** A `replace` can occur without intercepting any ports.
          4. **Container State:** During a `replace`, the original container is no longer active within the cluster.

          The deprecated `--replace` flag still works, but is hidden from the `telepresence intercept` command help, and
          will print a deprecation warning when used.
      - type: feature
        title: Add json-schema for the Telepresence Helm Chart
        body: >-
          Helm can validate a chart using a json-schema using the command `helm lint`, and this schema can be part of
          the actual Helm chart. The telepresence-oss Helm chart now includes such a schema, and a new
          `telepresence helm lint` command was added so that linting can be performed using the embedded chart.
      - type: feature
        title: No dormant container present during replace.
        body: |-
          Telepresence will no longer inject a dormant container during a `telepresence replace` operation. Instead, the
          Traffic Agent now directly serves as the replacement container, eliminating the need to forward traffic to the
          original application container. This simplification offers several advantages when using the `--replace` flag:

            - **Removal of the init-container:** The need for a separate init-container is no longer necessary.
            - **Elimination of port renames:** Port renames within the intercepted pod are no longer required.
      - type: feature
        title: One single invocation of the Telepresence intercept command can now intercept multiple ports.
        body: >-
          It is now possible to intercept multiple ports with one single invocation of `telepresence intercept` by just
          repeating the `--port` flag.
      - type: feature
        title: Unify how Traffic Manager selects namespaces
        body: |-
          The definition of what namespaces that a Traffic Manager would manage use was scattered into several Helm
          chart values, such as `manager.Rbac.namespaces`, `client.Rbac.namespaces`, and
          `agentInjector.webhook.namespaceSelector`. The definition is now unified to the mutual exclusive top-level
          Helm chart values `namespaces` and `namespaceSelector`.

          The `namespaces` value is just for convenience and a short form of expressing:
          ```yaml
          namespaceSelector:
            matchExpressions:
             - key: kubernetes.io/metadata.name
               operator: in
               values: <namespaces>.
          ```

        docs: install/manager#static-versus-dynamic-namespace-selection
      - type: feature
        title: Improved control over how remote volumes are mounted using mount policies
        body: >-
          Mount policies, that affects how the telepresence traffic-agent shares the pod's volumes, and also how the
          client will mount them, can now be provided using the Helm chart value `agent.mountPolicies` or as JSON
          object in the workload annotation `telepresence.io/mount-policies`. A mount policy is applied to a volume
          or to all paths matching a path-prefix (distinguished by checking if first character is a '/'), and can
          be one of `Ignore`, `Local`, `Remote`, or `RemoteReadOnly`.
      - type: feature
        title: List output includes workload kind.
        body: >-
          The output of the `telepresence list` command will now include the workload kind (deployment, replicaset,
          statefulset, or rollout) in all entries.
      - type: feature
        title: Add ability to override the default securityContext for the Telepresence init-container
        body: >-
          Users can now use the Helm value `agent.initSecurityContext` to override the default securityContext for the
          Telepresence init-container.
      - type: change
        title: Let download page use direct links to GitHub
        body: >-
          The download links on the release page now points directly to the assets on the download page, instead of
          using being routed from getambassador.io/download/tel2oss/releases.
      - type: change
        title: Use telepresence.io as annotation prefix instead of telepresence.getambassador.io
        body: >-
          The workload and pod annotations used by Telepresence will now use the prefix `telepresence.io` instead of
          `telepresence.getambassador.io`. The new prefix is consistent with the prefix used by labels, and it also
          matches the host name of the documentation site. Annotations using the old name will still work, but warnings
          will be logged when they are encountered.
      - type: change
        title: Make the DNS recursion check configurable and turn it off by default.
        body: >-
          Very few systems experience a DNS recursion lookup problem. It can only occur when the cluster runs locally
          and the cluster's DNS is configured to somehow use DNS server that is started by Telepresence. The check
          is therefore now configurable through the client setting `dns.recursionCheck`, and it is `false` by default.
      - type: change
        title: Trigger the mutating webhook with Kubernetes eviction objects instead of patching workloads.
        body: >-
          Telepresence will now attempt to evict pods in order to trigger the traffic-agent's injection or removal, and
          revert to patching workloads if evictions are prevented by the pod's disruption budget. This causes a slight
          change in the traffic-manager RBAC, as the traffic-manager must be able to create "pod/eviction" objects.
      - type: change
        title: The telepresence-agents configmap is no longer used.
        body: >-
          The traffic-agent configuration was moved into a pod-annotation. This avoids sync problems between the
          telepresence-agents (which is no no longer present) and the pods.
      - type: change
        title: Drop deprecated current-cluster-id command.
        body: >-
          The clusterID was deprecated some time ago, and replaced by the ID of the namespace where the traffic-manager
          is installed.
      - type: bugfix
        title: Make telepresence connect --docker work with Rancher Desktop
        body: >-
          Rancher Desktop will start a K3s control-plane and typically expose the
          Kubernetes API server at `127.0.0.1:6443`. Telepresence can connect to
          this cluster when running on the host, but the address is not available
          when connecting in docker mode.

          The problem is solved by ensuring that the Kubernetes API server address used when
          doing a `telepresence connect --docker` is swapped from 127.0.0.1 to the
          internal address of the control-plane node. This works because that
          address is available to other docker containers, and the Kubernetes API
          server is configured with a certificate that accepts it.
      - type: bugfix
        title: Rename charts/telepresence to charts/telepresence-oss.
        body: >-
          The Helm chart name "telepresence-oss" was inconsistent with its contained folder "telepresence". As a result,
          attempts to install the chart using an argo ApplicationSet failed. The contained folder was renamed to match
          the chart name.
      - type: bugfix
        title: Conflict detection between namespaced and cluster-wide install.
        body: >-
          The namespace conflict detection mechanism would only discover conflicts between two _namespaced_ Traffic
          Managers trying to manage the same namespace. This is now fixed so that all types conflicts are discovered.
        docs: install/manager#namespace-collision-detection
      - type: bugfix
        title: Don't dispatch DNS discovery queries to the cluster.
        body: >-
          macOS based systems will often PTR queries using nameslike `b._dns-sd._udp`, lb._dns-sd._udp`, or
          `db-dns-sd._udp`. Those queries are no longer dispatched to the cluster.
      - type: bugfix
        title: Using the --namespace option with telepresence causes a deadlock.
        body: >-
          Using `telepresence list --namespace <ns>` with a namespace different from the one that telepresence was
          connected to, would cause a deadlock, and then produce an empty list.
      - type: bugfix
        title: Fix problem with exclude-suffix being hidden by DNS search path.
        body: >-
          In some situations, a name ending with an exclude-suffix like "xyz.com" would be expanded by a search path
          into "xyz.com.&lt;connected namespace&gt;" and therefore not be excluded. Instead, the name was sent to the cluster
          to be resolved, causing an unnecessary load on its DNS server.
  - version: 2.21.3
    date: 2025-02-06
    notes:
      - type: bugfix
        title: Using the --proxy-via flag would sometimes cause connection timeouts.
        body: >-
          Typically, a `telepresence connect --proxy-via <subnet>=<workflow>` would fail with a "deadline exceeded"
          message when several workloads were present in the namespace, the one targeted by the proxy-via didn't yet
          have an agent installed, and other workloads had an agent. This was due to a race condition in the logic
          for the agent-based port-forwards in the root daemon. The conditions causing this race are now eliminated.
      - type: bugfix
        title: Fix panic in root daemon when using the "allow conflicting subnets" feature on macOS.
        body: >-
          A regression was introduced in version 2.21.0, causing a panic due to an unimplemented method in the
          TUN-device on macOS based clients.
      - type: bugfix
        title: Ensure that annotation enabled traffic-agents are uninstall when uninstalling the traffic-manager.
        body: >-
          A traffic-agent injected because the workload had the inject annotation enabled would sometimes not get
          uninstalled when the traffic-manager was uninstalled.
  - version: 2.21.2
    date: 2025-01-26
    notes:
      - type: bugfix
        title: Fix panic when agentpf.client creates a Tunnel
        body: >-
          A race could occur where several requests where made to `agentpf.client.Tunnel` on a client that had errored
          when creating its port-forward to the agent. The implementation could handle one such requests but not
          several, resulting in a panic in situations where multiple simultaneous requests were made to the same client
          during a very short time period,
      - type: bugfix
        title: Fix goroutine leak in dialer.
        body: >-
          The context passed to the `Tunnel` call that creates a stream for a dialer, was not cancelled when the dialer
          was finished, so the stream was never properly closed, leading to one dormant goroutine for each stream.
  - version: 2.21.1
    date: 2024-12-17
    notes:
      - type: bugfix
        title: Allow ingest of serverless deployments without specifying an inject-container-ports annotation
        body: >-
          The ability to intercept a workload without a service is built around the
          `telepresence.getambassador.io/inject-container-ports` annotation, and it was also required in order to ingest
          such a workload. This was counterintuitive and the requirement was removed. An ingest doesn't use a port.
        docs: https://github.com/telepresenceio/telepresence/issues/3741
      - type: bugfix
        title: Upgrade module dependencies to get rid of critical vulnerability.
        body: >-
          Upgrade module dependencies to latest available stable. This includes upgrading golang.org/x/crypto, which
          had critical issues, from 0.30.0 to 0.31.0 where those issues are resolved.
  - version: 2.21.0
    date: 2024-12-13
    notes:
      - type: feature
        title: Automatic VPN conflict avoidance
        body: >-
          Telepresence not only detects subnet conflicts between the cluster and workstation VPNs but also resolves them
          by performing network address translation to move conflicting subnets out of the way.
        docs: reference/vpn
      - type: feature
        title: Virtual Address Translation (VNAT).
        body: >-
          It is now possible to use a virtual subnet without routing the affected IPs to a specific workload. A new
          `telepresence connect --vnat CIDR` flag was added that will perform virtual network address translation of
          cluster IPs. This flag is very similar to the `--proxy-via CIDR=WORKLOAD` introduced in 2.19, but without
          the need to specify a workload.
        docs: reference/vpn
      - type: feature
        title: Intercepts targeting a specific container
        body: >-
          In certain scenarios, the container owning the intercepted port differs
          from the container the intercept targets. This port owner's sole purpose
          is to route traffic from the service to the intended container, often
          using a direct localhost connection.

          This update introduces a `--container <name>` option to the intercept
          command. While this option doesn't influence the port selection, it
          guarantees that the environment variables and mounts propagated to the
          client originate from the specified container. Additionally, if the
          `--replace` option is used, it ensures that this container is replaced.
        docs: reference/engagements/container
      - type: feature
        title: New telepresence ingest command
        body: >-
          The new `telepresence ingest` command, similar to `telepresence intercept`, provides local access to the
          volume mounts and environment variables of a targeted container. However, unlike `telepresence intercept`,
          `telepresence ingest` does not redirect traffic to the container and ensures that the mounted volumes are
          read-only.

          An ingest requires a traffic-agent to be installed in the pods of the targeted workload. Beyond that, it's
          a client-side operation. This allows developers to have multiple simultaneous ingests on the same container.
        docs: howtos/intercepts#ingest-your-service
      - type: feature
        title: New telepresence curl command
        body: >-
          The new `telepresence curl` command runs curl from within a container. The command requires that a connection
          has been established using `telepresence connect --docker`, and the container that runs `curl` will share the
          same network as the containerized telepresence daemon.
        docs: reference/docker-run#the-telepresence-curl-command
      - type: feature
        title: New telepresence docker-run command
        body: >-
          The new `telepresence docker-run <flags and arguments>` requires that a connection has been established using
          `telepresence connect --docker` It will perform a `docker run <flags and arguments>` and add the flag necessary
          to ensure that started container shares the same network as the containerized telepresence daemon.
        docs: reference/docker-run#the-telepresence-docker-run-command
      - type: feature
        title: Mount everything read-only during intercept
        body: >-
          It is now possible to append ":ro" to the intercept `--mount` flag value. This ensures that all remote volumes
          that the intercept mounts are read-only.
      - type: feature
        title: Unify client configuration
        body: >-
          Previously, client configuration was divided between the config.yml file and a Kubernetes extension. DNS and
          routing settings were initially found only in the extension. However, the Helm client structure allowed
          entries from both.

          To simplify this, we've now aligned the config.yml and Kubernetes extension with the Helm client structure.
          This means DNS and routing settings are now included in both. The Kubernetes extension takes precedence over
          the config.yml and Helm client object.

          While the old-style Kubernetes extension is still supported for compatibility, it cannot be used with the new
          style.
        docs: reference/config
      - type: feature
        title: Use WebSockets for port-forward instead of the now deprecated SPDY.
        body: >-
          Telepresence will now use WebSockets instead of SPDY when creating port-forwards to the Kubernetes Cluster, and
          will fall back to SPDY when connecting to clusters that don't support SPDY. Use of the deprecated SPDY can be
          forced by setting `cluster.forceSPDY=true` in the `config.yml`.

          See [Streaming Transitions from SPDY to WebSockets](https://kubernetes.io/blog/2024/08/20/websockets-transition/)
          for more information about this transition.
      - type: feature
        title: Make usage data collection configurable using an extension point, and default to no-ops
        body: >-
          The OSS code-base will no longer report usage data to the proprietary collector at Ambassador Labs. The actual calls
          to the collector remain, but will be no-ops unless a proper collector client is installed using an extension point.
      - type: feature
        title: Add deployments, statefulSets, replicaSets to workloads Helm chart value
        body: >-
          The Helm chart value `workloads` now supports the kinds `deployments.enabled`, `statefulSets.enabled`, `replicaSets.enabled`.
          and `rollouts.enabled`. All except `rollouts` are enabled by default. The traffic-manager will ignore workloads, and
          Telepresence will not be able to intercept them, if the `enabled` of the corresponding kind is set to `false`.
        docs: reference/engagements/sidecar#disable-workloads
      - type: feature
        title: Improved command auto-completion
        body: >-
          The auto-completion of namespaces, services, and containers have been added where appropriate, and the default
          file auto completion has been removed from most commands.
      - type: feature
        title: Docker run flags --publish, --expose, and --network now work with docker mode connections
        body: >-
          After establishing a connection to a cluster using `telepresence connect --docker`, you can run new containers that share
          the same network as the containerized daemon that maintains the connection. This enables seamless communication between
          your local development environment and the remote services.

          Normally, Docker has a limitation that prevents combining a shared network configuration with custom networks
          and exposing ports. However, Telepresence now elegantly circumvents this limitation so that a container started with
          `telepresence docker-run`, `telepresence intercept --docker-run`, or `telepresence ingest --docker-run` can use flags
          like `--network`, `--publish`, or `--expose`.

          To achieve this, Telepresence temporarily adds the necessary network to the containerized daemon. This allows the new
          container to join the same network. Additionally, Telepresence starts extra socat containers to handle port mapping,
          ensuring that the desired ports are exposed to the local environment.
        docs: reference/docker-run#the-telepresence-docker-run-command
      - type: feature
        title: Prevent recursion in the Telepresence Virtual Network Interface (VIF)
        body: >-
          Network problems may arise when running Kubernetes locally (e.g., Docker Desktop, Kind, Minikube, k3s),
          because the VIF on the host is also accessible from the cluster's nodes. A request that isn't handled by a
          cluster resource might be routed back into the VIF and cause a recursion.

          These recursions can now be prevented by setting the client configuration property
          `routing.recursionBlockDuration` so that new connection attempts are temporarily blocked for a specific
          IP:PORT pair immediately after
Download .txt
gitextract_r2gzeu42/

├── .dockerignore
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── Bug_report.md
│   │   └── Feature_request.md
│   ├── actions/
│   │   ├── install-dependencies/
│   │   │   └── action.yaml
│   │   └── upload-logs/
│   │       └── action.yaml
│   ├── pull_request_template.md
│   └── workflows/
│       ├── dev.yaml
│       ├── go-dependency-submission.yaml
│       ├── image-scan.yaml
│       ├── licenses.yaml
│       ├── release-teleroute.yaml
│       ├── release.yaml
│       ├── stale.yaml
│       └── unit_tests.yaml
├── .gitignore
├── .golangci.yml
├── .mailmap
├── .protolint.yaml
├── CHANGELOG.OLD.md
├── CHANGELOG.yml
├── CLAUDE.md
├── CODE-OF-CONDUCT.md
├── CODEOWNERS
├── DEPENDENCIES.md
├── DEPENDENCY_LICENSES.md
├── GOVERNANCE-maintainer.md
├── LICENSE
├── MAINTAINERS.md
├── Makefile
├── README.md
├── SECURITY.md
├── build-aux/
│   ├── INSTALLERS.md
│   ├── admission_controller_tls/
│   │   └── main.go
│   ├── docker/
│   │   └── images/
│   │       ├── Dockerfile.client
│   │       ├── Dockerfile.routecontroller
│   │       ├── Dockerfile.traffic
│   │       └── Dockerfile.winbuild
│   ├── genversion/
│   │   └── main.go
│   ├── image-importer.yaml
│   ├── main.mk
│   ├── maintenance.mk
│   ├── pkg-installer/
│   │   ├── Distribution.xml
│   │   ├── build-pkg.sh
│   │   ├── io.telepresence.rootd.plist
│   │   ├── postinstall
│   │   ├── syslog.conf
│   │   ├── telepresence-rootd
│   │   ├── uninstall
│   │   └── welcome.rtf
│   ├── prelude.mk
│   ├── systemd-installer/
│   │   ├── .gitignore
│   │   ├── build-packages.sh
│   │   ├── config.yml
│   │   ├── nfpm.yaml.in
│   │   ├── postinstall.sh
│   │   ├── postremove.sh
│   │   ├── preremove.sh
│   │   ├── telepresence-rootd.service
│   │   └── uninstall.sh
│   ├── tools.mk
│   ├── unparsable-packages.yaml
│   ├── winmake.bat
│   └── wix-installer/
│       ├── Dialogs_en-us.wxl
│       ├── MainPackage.wxs
│       ├── Makefile
│       ├── Telepresence.wxs
│       ├── config.yml
│       ├── tpwrapper.go
│       └── txt2rtf.ps1
├── charts/
│   ├── chart.go
│   └── telepresence-oss/
│       ├── .helmignore
│       ├── Chart.yaml
│       ├── README.md
│       ├── templates/
│       │   ├── NOTES.txt
│       │   ├── _helpers.tpl
│       │   ├── agentInjectorWebhook.yaml
│       │   ├── certificate.yaml
│       │   ├── clientRbac/
│       │   │   ├── cluster-scope.yaml
│       │   │   ├── connect.yaml
│       │   │   └── namespace-scope.yaml
│       │   ├── deployment.yaml
│       │   ├── issuer.yaml
│       │   ├── pre-delete-hook.yaml
│       │   ├── routecontroller-daemonset.yaml
│       │   ├── routecontroller-rbac.yaml
│       │   ├── service.yaml
│       │   ├── tests/
│       │   │   └── test-connection.yaml
│       │   ├── trafficManager-configmap.yaml
│       │   └── trafficManagerRbac/
│       │       ├── cluster-scope.yaml
│       │       ├── namespace-scope.yaml
│       │       ├── service-account.yaml
│       │       └── webhook-secret.yaml
│       ├── values.schema.yaml
│       └── values.yaml
├── cmd/
│   ├── cobraparser/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── generate/
│   │   │   └── generate.go
│   │   ├── go.mod
│   │   ├── go.sum
│   │   ├── main.go
│   │   └── types/
│   │       └── commandinfo.go
│   ├── routecontroller/
│   │   └── main.go
│   └── teleroute/
│       ├── .gitignore
│       ├── DEVELOPING.md
│       ├── Dockerfile
│       ├── Makefile
│       ├── config.json
│       ├── driver/
│       │   ├── driver.go
│       │   ├── network.go
│       │   └── options.go
│       ├── go.mod
│       ├── go.sum
│       └── main.go
├── docs/
│   ├── CONTRIBUTING.md
│   ├── README.md
│   ├── common/
│   │   └── quantity.md
│   ├── community.md
│   ├── compare/
│   │   └── mirrord.md
│   ├── concepts/
│   │   ├── devloop.md
│   │   ├── faster.md
│   │   └── intercepts.md
│   ├── doc-links.yml
│   ├── faqs.md
│   ├── helm/
│   │   └── values.schema.json
│   ├── howtos/
│   │   ├── cluster-in-vm.md
│   │   ├── docker-compose.md
│   │   ├── docker.md
│   │   ├── engage.md
│   │   ├── large-clusters.md
│   │   └── mtls.md
│   ├── install/
│   │   ├── client.md
│   │   ├── cloud.md
│   │   ├── manager.md
│   │   └── upgrade.md
│   ├── licenses.md
│   ├── quick-start.md
│   ├── redirects.yml
│   ├── reference/
│   │   ├── architecture.md
│   │   ├── cli/
│   │   │   ├── telepresence.md
│   │   │   ├── telepresence_completion.md
│   │   │   ├── telepresence_compose.md
│   │   │   ├── telepresence_compose_attach.md
│   │   │   ├── telepresence_compose_bridge.md
│   │   │   ├── telepresence_compose_build.md
│   │   │   ├── telepresence_compose_commit.md
│   │   │   ├── telepresence_compose_config.md
│   │   │   ├── telepresence_compose_cp.md
│   │   │   ├── telepresence_compose_create.md
│   │   │   ├── telepresence_compose_down.md
│   │   │   ├── telepresence_compose_events.md
│   │   │   ├── telepresence_compose_exec.md
│   │   │   ├── telepresence_compose_export.md
│   │   │   ├── telepresence_compose_images.md
│   │   │   ├── telepresence_compose_kill.md
│   │   │   ├── telepresence_compose_logs.md
│   │   │   ├── telepresence_compose_ls.md
│   │   │   ├── telepresence_compose_pause.md
│   │   │   ├── telepresence_compose_port.md
│   │   │   ├── telepresence_compose_ps.md
│   │   │   ├── telepresence_compose_publish.md
│   │   │   ├── telepresence_compose_pull.md
│   │   │   ├── telepresence_compose_push.md
│   │   │   ├── telepresence_compose_restart.md
│   │   │   ├── telepresence_compose_rm.md
│   │   │   ├── telepresence_compose_run.md
│   │   │   ├── telepresence_compose_scale.md
│   │   │   ├── telepresence_compose_start.md
│   │   │   ├── telepresence_compose_stats.md
│   │   │   ├── telepresence_compose_stop.md
│   │   │   ├── telepresence_compose_top.md
│   │   │   ├── telepresence_compose_unpause.md
│   │   │   ├── telepresence_compose_up.md
│   │   │   ├── telepresence_compose_version.md
│   │   │   ├── telepresence_compose_volumes.md
│   │   │   ├── telepresence_compose_wait.md
│   │   │   ├── telepresence_compose_watch.md
│   │   │   ├── telepresence_config.md
│   │   │   ├── telepresence_config_view.md
│   │   │   ├── telepresence_connect.md
│   │   │   ├── telepresence_curl.md
│   │   │   ├── telepresence_docker-run.md
│   │   │   ├── telepresence_gather-logs.md
│   │   │   ├── telepresence_genyaml.md
│   │   │   ├── telepresence_genyaml_annotations.md
│   │   │   ├── telepresence_genyaml_config.md
│   │   │   ├── telepresence_genyaml_container.md
│   │   │   ├── telepresence_genyaml_initcontainer.md
│   │   │   ├── telepresence_genyaml_volume.md
│   │   │   ├── telepresence_helm.md
│   │   │   ├── telepresence_helm_install.md
│   │   │   ├── telepresence_helm_lint.md
│   │   │   ├── telepresence_helm_uninstall.md
│   │   │   ├── telepresence_helm_upgrade.md
│   │   │   ├── telepresence_helm_version.md
│   │   │   ├── telepresence_ingest.md
│   │   │   ├── telepresence_intercept.md
│   │   │   ├── telepresence_leave.md
│   │   │   ├── telepresence_list-contexts.md
│   │   │   ├── telepresence_list-namespaces.md
│   │   │   ├── telepresence_list.md
│   │   │   ├── telepresence_loglevel.md
│   │   │   ├── telepresence_mcp.md
│   │   │   ├── telepresence_mcp_claude.md
│   │   │   ├── telepresence_mcp_claude_disable.md
│   │   │   ├── telepresence_mcp_claude_enable.md
│   │   │   ├── telepresence_mcp_claude_list.md
│   │   │   ├── telepresence_mcp_cursor.md
│   │   │   ├── telepresence_mcp_cursor_disable.md
│   │   │   ├── telepresence_mcp_cursor_enable.md
│   │   │   ├── telepresence_mcp_cursor_list.md
│   │   │   ├── telepresence_mcp_start.md
│   │   │   ├── telepresence_mcp_stream.md
│   │   │   ├── telepresence_mcp_tools.md
│   │   │   ├── telepresence_mcp_vscode.md
│   │   │   ├── telepresence_mcp_vscode_disable.md
│   │   │   ├── telepresence_mcp_vscode_enable.md
│   │   │   ├── telepresence_mcp_vscode_list.md
│   │   │   ├── telepresence_quit.md
│   │   │   ├── telepresence_replace.md
│   │   │   ├── telepresence_revoke.md
│   │   │   ├── telepresence_serve.md
│   │   │   ├── telepresence_status.md
│   │   │   ├── telepresence_uninstall.md
│   │   │   ├── telepresence_version.md
│   │   │   └── telepresence_wiretap.md
│   │   ├── cluster-config.md
│   │   ├── compose.md
│   │   ├── config.md
│   │   ├── dns.md
│   │   ├── docker-run.md
│   │   ├── engagements/
│   │   │   ├── cli.md
│   │   │   ├── conflicts.md
│   │   │   ├── container.md
│   │   │   └── sidecar.md
│   │   ├── environment.md
│   │   ├── inside-container.md
│   │   ├── monitoring.md
│   │   ├── plugins.md
│   │   ├── rbac.md
│   │   ├── restapi.md
│   │   ├── route-controller.md
│   │   ├── routing.md
│   │   ├── tun-device.md
│   │   ├── volume.md
│   │   └── vpn.md
│   ├── release-notes.md
│   ├── release-notes.mdx
│   ├── troubleshooting.md
│   └── variables.yml
├── examples/
│   ├── compose/
│   │   ├── proxy-voting.override.yaml
│   │   ├── proxy-web.override.yaml
│   │   └── replace.override.yaml
│   └── docker/
│       └── iam-authenticator/
│           └── Dockerfile
├── go.mod
├── go.sum
├── integration_test/
│   ├── agent_injector_disabled_test.go
│   ├── also_proxy_test.go
│   ├── argo_rollouts_test.go
│   ├── bind_to_podip_test.go
│   ├── cidr_conflict_test.go
│   ├── cli_test.go
│   ├── cloud_config_test.go
│   ├── compose_test.go
│   ├── config_test.go
│   ├── connected_test.go
│   ├── container_test.go
│   ├── docker_daemon_test.go
│   ├── docker_run_test.go
│   ├── env_interpolate_test.go
│   ├── gather_logs_test.go
│   ├── h2c_intercept_test.go
│   ├── headless_test.go
│   ├── helm_test.go
│   ├── http_intercepts_test.go
│   ├── ignored_mounts_test.go
│   ├── inactive_client_test.go
│   ├── ingest_test.go
│   ├── inject_policy_test.go
│   ├── injector_test.go
│   ├── install_test.go
│   ├── integration_test.go
│   ├── intercept_env_test.go
│   ├── intercept_flags_test.go
│   ├── intercept_localhost_test.go
│   ├── intercept_mount_test.go
│   ├── itest/
│   │   ├── apply_app.go
│   │   ├── assertions.go
│   │   ├── cluster.go
│   │   ├── config.go
│   │   ├── connected.go
│   │   ├── context.go
│   │   ├── env.go
│   │   ├── harness.go
│   │   ├── helm.go
│   │   ├── image.go
│   │   ├── logdir.go
│   │   ├── multiple_services.go
│   │   ├── namespace.go
│   │   ├── runner.go
│   │   ├── single_service.go
│   │   ├── status.go
│   │   ├── suite.go
│   │   ├── tempdir.go
│   │   ├── template.go
│   │   ├── timed.go
│   │   └── traffic_manager.go
│   ├── kubeauth_test.go
│   ├── kubeconfig_extension_test.go
│   ├── large_files_test.go
│   ├── limitrange_test.go
│   ├── list_watch_test.go
│   ├── loglevel_test.go
│   ├── manager_grpc_test.go
│   ├── manual_agent_test.go
│   ├── mounts_test.go
│   ├── multi_connect_test.go
│   ├── multiple_intercepts_test.go
│   ├── multiple_port_intercept_test.go
│   ├── multiple_services_test.go
│   ├── multiport_test.go
│   ├── namespaces_test.go
│   ├── not_connected_test.go
│   ├── otel_test.go
│   ├── pod_cidr_test.go
│   ├── podscaling_test.go
│   ├── proxy_via_test.go
│   ├── reconnect_session_test.go
│   ├── replace_test.go
│   ├── restapi_test.go
│   ├── single_service_test.go
│   ├── subdomain_test.go
│   ├── svcdomain_test.go
│   ├── testdata/
│   │   ├── apiserveraccess/
│   │   │   └── main.go
│   │   ├── cli-container/
│   │   │   └── Dockerfile
│   │   ├── count-server/
│   │   │   └── main.go
│   │   ├── echo-server/
│   │   │   ├── Dockerfile
│   │   │   ├── certs/
│   │   │   │   ├── tls.crt
│   │   │   │   └── tls.key
│   │   │   ├── go.mod
│   │   │   ├── go.sum
│   │   │   └── main.go
│   │   ├── k8s/
│   │   │   ├── client_experiment.yaml
│   │   │   ├── client_rancher.goyaml
│   │   │   ├── client_sa.yaml
│   │   │   ├── disruption-budget.goyaml
│   │   │   ├── echo-argo-rollout.yaml
│   │   │   ├── echo-auto-inject.yaml
│   │   │   ├── echo-both.yaml
│   │   │   ├── echo-double-one-unnamed.yaml
│   │   │   ├── echo-easy.yaml
│   │   │   ├── echo-extra-udp.yaml
│   │   │   ├── echo-headless.yaml
│   │   │   ├── echo-interpolate.yaml
│   │   │   ├── echo-manual-inject-deploy.yaml
│   │   │   ├── echo-manual-inject-svc.yaml
│   │   │   ├── echo-min.yaml
│   │   │   ├── echo-no-containerport.yaml
│   │   │   ├── echo-no-svc-ann.yaml
│   │   │   ├── echo-no-svc.yaml
│   │   │   ├── echo-no-vols.yaml
│   │   │   ├── echo-one.yaml
│   │   │   ├── echo-same-target-port.yaml
│   │   │   ├── echo-secondary.yaml
│   │   │   ├── echo-spring.yaml
│   │   │   ├── echo-tls.goyaml
│   │   │   ├── echo-udp-tcp-unnamed.yaml
│   │   │   ├── echo-w-hostalias.goyaml
│   │   │   ├── echo-w-sidecars.yaml
│   │   │   ├── echo-w-subdomain.yaml
│   │   │   ├── echo_with_env.yaml
│   │   │   ├── generic.goyaml
│   │   │   ├── hello-w-volumes.goyaml
│   │   │   ├── many-volumes.yaml
│   │   │   ├── memory-constraints.yaml
│   │   │   ├── namespaces.yaml
│   │   │   ├── pol-disabled.yaml
│   │   │   ├── pol-enabled.yaml
│   │   │   ├── pol-none.yaml
│   │   │   ├── pv.goyaml
│   │   │   ├── pvc.goyaml
│   │   │   ├── rs-echo.yaml
│   │   │   ├── secret-reader-rbac.goyaml
│   │   │   ├── ss-echo.yaml
│   │   │   ├── svc-deploy.goyaml
│   │   │   ├── tel-cert.yaml
│   │   │   └── with-probes.yaml
│   │   ├── k8screds/
│   │   │   └── main.go
│   │   ├── otel/
│   │   │   ├── helm-yamls/
│   │   │   │   └── otel-operator.yml
│   │   │   └── instrumentation.yml
│   │   ├── routing-values.yaml
│   │   ├── scripts/
│   │   │   ├── veth-down.sh
│   │   │   └── veth-up.sh
│   │   ├── stdiotest/
│   │   │   └── main.go
│   │   ├── telepresence-1.9.9.tgz
│   │   └── udp-echo/
│   │       ├── Dockerfile
│   │       ├── go.mod
│   │       └── main.go
│   ├── tls_test.go
│   ├── to_pod_test.go
│   ├── udp_test.go
│   ├── uhn_dns_test.go
│   ├── uninstall_test.go
│   ├── webhook_test.go
│   ├── wiretap_test.go
│   ├── workload_configuration_test.go
│   ├── workload_watch_test.go
│   ├── workloads_test.go
│   └── wpad_test.go
├── k8s/
│   ├── agent-injector-rbac.yaml
│   ├── agent-injector-secret.yaml
│   ├── agent-injector.yaml
│   ├── apitest.yaml
│   ├── dnsutils-headless.yaml
│   ├── echo-auto-headless.yaml
│   ├── echo-double-one.yaml
│   ├── echo-double.yaml
│   ├── echo-sc.yaml
│   ├── ext-example.yaml
│   ├── hello-w-volume.yaml
│   ├── local-echo-easy.yaml
│   ├── local-echo-next.yaml
│   ├── manager.yaml
│   ├── minikube-registry.yaml
│   ├── private-reg-proxy.yaml
│   └── rs-echo-svc2.yaml
├── packaging/
│   ├── artifacthub-repo.yml
│   ├── bundle.wxs.in
│   ├── helmpackage.go
│   ├── homebrew-oss-formula.rb
│   ├── homebrew-package.sh
│   ├── install-telepresence.ps1
│   ├── telepresence.wxs.in
│   └── windows-package.sh
├── pkg/
│   ├── agentconfig/
│   │   ├── container.go
│   │   ├── container_test.go
│   │   ├── initcontainer.go
│   │   ├── injectpolicy.go
│   │   ├── intercepttarget.go
│   │   ├── sidecar.go
│   │   ├── util.go
│   │   └── volumes.go
│   ├── agentmap/
│   │   ├── capsbase26.go
│   │   ├── capsbase26_test.go
│   │   ├── discorvery.go
│   │   └── generator.go
│   ├── annotation/
│   │   └── annotation.go
│   ├── authenticator/
│   │   ├── authenticator.go
│   │   ├── config.go
│   │   ├── exec.go
│   │   ├── exec_test.go
│   │   ├── grpc/
│   │   │   └── authenticator.go
│   │   └── patcher/
│   │       └── patcher.go
│   ├── cache/
│   │   ├── client.go
│   │   └── map.go
│   ├── client/
│   │   ├── agentpf/
│   │   │   └── clients.go
│   │   ├── bwcompat/
│   │   │   └── clusterinfo.go
│   │   ├── cache/
│   │   │   ├── cache.go
│   │   │   └── watcher.go
│   │   ├── cli/
│   │   │   ├── ann/
│   │   │   │   └── annotations.go
│   │   │   ├── cmd/
│   │   │   │   ├── completion.go
│   │   │   │   ├── compose.go
│   │   │   │   ├── config.go
│   │   │   │   ├── connect.go
│   │   │   │   ├── curl.go
│   │   │   │   ├── docker_run.go
│   │   │   │   ├── gather_logs.go
│   │   │   │   ├── gather_logs_test.go
│   │   │   │   ├── genyaml.go
│   │   │   │   ├── helm.go
│   │   │   │   ├── ingest.go
│   │   │   │   ├── intercept.go
│   │   │   │   ├── kubeauth.go
│   │   │   │   ├── leave.go
│   │   │   │   ├── list.go
│   │   │   │   ├── list_contexts.go
│   │   │   │   ├── list_namespaces.go
│   │   │   │   ├── loglevel.go
│   │   │   │   ├── man-pages.go
│   │   │   │   ├── mcp.go
│   │   │   │   ├── mcp_test.go
│   │   │   │   ├── quit.go
│   │   │   │   ├── replace.go
│   │   │   │   ├── revoke.go
│   │   │   │   ├── serve.go
│   │   │   │   ├── status.go
│   │   │   │   ├── telepresence.go
│   │   │   │   ├── testdata/
│   │   │   │   │   ├── license
│   │   │   │   │   ├── testLogDir/
│   │   │   │   │   │   ├── cli.log
│   │   │   │   │   │   ├── connector-20210916T130347.log
│   │   │   │   │   │   ├── connector-20210916T130356.log
│   │   │   │   │   │   ├── connector-20210916T130624.log
│   │   │   │   │   │   ├── connector-20210916T130643.log
│   │   │   │   │   │   ├── connector.log
│   │   │   │   │   │   ├── daemon-20210916T130318.log
│   │   │   │   │   │   ├── daemon-20210916T130402.log
│   │   │   │   │   │   ├── daemon-20210916T130624.log
│   │   │   │   │   │   ├── daemon-20210916T130643.log
│   │   │   │   │   │   ├── daemon.log
│   │   │   │   │   │   ├── echo-auto-inject-6496f77cbd-n86nc
│   │   │   │   │   │   └── traffic-manager-5c69859f94-g4ntj
│   │   │   │   │   └── zipDir/
│   │   │   │   │       ├── diff_name.log
│   │   │   │   │       ├── file1.log
│   │   │   │   │       └── file2.log
│   │   │   │   ├── uninstall.go
│   │   │   │   ├── usage.go
│   │   │   │   ├── version.go
│   │   │   │   └── wiretap.go
│   │   │   ├── connect/
│   │   │   │   ├── connector.go
│   │   │   │   ├── daemon.go
│   │   │   │   ├── init_command.go
│   │   │   │   └── version_check.go
│   │   │   ├── daemon/
│   │   │   │   ├── dial.go
│   │   │   │   ├── identifier.go
│   │   │   │   ├── identifier_test.go
│   │   │   │   ├── info.go
│   │   │   │   ├── request.go
│   │   │   │   ├── request_test.go
│   │   │   │   └── userd.go
│   │   │   ├── docker/
│   │   │   │   ├── auto_complete.go
│   │   │   │   ├── compose/
│   │   │   │   │   ├── config.go
│   │   │   │   │   ├── connection.go
│   │   │   │   │   ├── dc-cli.json
│   │   │   │   │   ├── engagement.go
│   │   │   │   │   ├── extension.go
│   │   │   │   │   ├── extension_test.go
│   │   │   │   │   ├── toplevelextension.go
│   │   │   │   │   └── transform.go
│   │   │   │   ├── flags.go
│   │   │   │   ├── published_ports.go
│   │   │   │   ├── run_flags.go
│   │   │   │   └── runner.go
│   │   │   ├── env/
│   │   │   │   ├── flags.go
│   │   │   │   ├── syntax.go
│   │   │   │   └── syntax_test.go
│   │   │   ├── flags/
│   │   │   │   ├── addunique.go
│   │   │   │   ├── context.go
│   │   │   │   ├── deprecation.go
│   │   │   │   ├── map.go
│   │   │   │   ├── unparsed.go
│   │   │   │   ├── unparsed_test.go
│   │   │   │   └── zerovalue.go
│   │   │   ├── global/
│   │   │   │   └── flags.go
│   │   │   ├── helm/
│   │   │   │   ├── chart.go
│   │   │   │   ├── install.go
│   │   │   │   ├── lint.go
│   │   │   │   └── release.go
│   │   │   ├── ingest/
│   │   │   │   ├── command.go
│   │   │   │   ├── info.go
│   │   │   │   └── state.go
│   │   │   ├── intercept/
│   │   │   │   ├── command.go
│   │   │   │   ├── command_test.go
│   │   │   │   ├── describe_intercepts.go
│   │   │   │   ├── info.go
│   │   │   │   ├── info_test.go
│   │   │   │   └── state.go
│   │   │   ├── main.go
│   │   │   ├── mount/
│   │   │   │   ├── flags.go
│   │   │   │   ├── info.go
│   │   │   │   ├── prepare_unix.go
│   │   │   │   └── prepare_windows.go
│   │   │   ├── output/
│   │   │   │   ├── output.go
│   │   │   │   └── output_test.go
│   │   │   └── progress/
│   │   │       ├── colors.go
│   │   │       ├── event.go
│   │   │       ├── json.go
│   │   │       ├── noop.go
│   │   │       ├── plain.go
│   │   │       ├── quiet.go
│   │   │       ├── spinner.go
│   │   │       ├── tty.go
│   │   │       ├── tty_test.go
│   │   │       └── writer.go
│   │   ├── cmd_error.go
│   │   ├── config.go
│   │   ├── config_darwin.go
│   │   ├── config_linux.go
│   │   ├── config_test.go
│   │   ├── config_unix.go
│   │   ├── config_util.go
│   │   ├── config_windows.go
│   │   ├── const.go
│   │   ├── docker/
│   │   │   ├── container.go
│   │   │   ├── context.go
│   │   │   ├── daemon.go
│   │   │   ├── daemon_test.go
│   │   │   ├── image.go
│   │   │   ├── kubeauth/
│   │   │   │   └── cmd.go
│   │   │   ├── plugin.go
│   │   │   ├── teleroute/
│   │   │   │   ├── network.go
│   │   │   │   ├── server.go
│   │   │   │   ├── server_linux.go
│   │   │   │   └── server_other.go
│   │   │   ├── volume.go
│   │   │   └── volume_test.go
│   │   ├── ensured_state.go
│   │   ├── envconfig.go
│   │   ├── envconfig_unix.go
│   │   ├── envconfig_windows.go
│   │   ├── install_id.go
│   │   ├── k8s/
│   │   │   ├── cani.go
│   │   │   ├── cluster.go
│   │   │   ├── config.go
│   │   │   └── connect.go
│   │   ├── logging/
│   │   │   ├── cached_timed_level.go
│   │   │   ├── dup_test.go
│   │   │   ├── dup_unix.go
│   │   │   ├── dup_windows.go
│   │   │   ├── initcontext.go
│   │   │   ├── initcontext_test.go
│   │   │   ├── initcontext_unix_test.go
│   │   │   ├── initcontext_windows_test.go
│   │   │   ├── rotatingfile.go
│   │   │   ├── rotatingfile_unix.go
│   │   │   ├── rotatingfile_windows.go
│   │   │   ├── stat.go
│   │   │   ├── stat_darwin.go
│   │   │   ├── stat_linux.go
│   │   │   ├── stat_linux_test.go
│   │   │   ├── stat_test.go
│   │   │   └── stat_windows.go
│   │   ├── portforward/
│   │   │   ├── borrowed_kubectl_cmdutil.go
│   │   │   ├── grpcresolver.go
│   │   │   ├── podaddr.go
│   │   │   ├── resolve.go
│   │   │   └── streamconn.go
│   │   ├── remotefs/
│   │   │   ├── bridge.go
│   │   │   ├── fuseftp.go
│   │   │   ├── fuseftp_docker.go
│   │   │   ├── fuseftp_embedded.go
│   │   │   ├── fuseftp_external.go
│   │   │   ├── fuseftp_grpc.go
│   │   │   ├── fuseftp_linked.go
│   │   │   ├── fuseftp_other.go
│   │   │   ├── mounter.go
│   │   │   └── sftp.go
│   │   ├── rootd/
│   │   │   ├── dbus/
│   │   │   │   └── resolved.go
│   │   │   ├── dns/
│   │   │   │   ├── client.go
│   │   │   │   ├── client_queue.go
│   │   │   │   ├── connpool.go
│   │   │   │   ├── connpool_test.go
│   │   │   │   ├── resolved_linux.go
│   │   │   │   ├── server.go
│   │   │   │   ├── server_darwin.go
│   │   │   │   ├── server_linux.go
│   │   │   │   ├── server_test.go
│   │   │   │   └── server_windows.go
│   │   │   ├── grpc.go
│   │   │   ├── in_process.go
│   │   │   ├── service.go
│   │   │   ├── session.go
│   │   │   ├── stream_creator.go
│   │   │   └── vip/
│   │   │       ├── env_nat.go
│   │   │       ├── env_nat_test.go
│   │   │       └── vip.go
│   │   ├── stream_error.go
│   │   ├── userd/
│   │   │   ├── daemon/
│   │   │   │   ├── grpc.go
│   │   │   │   └── service.go
│   │   │   ├── service.go
│   │   │   ├── session.go
│   │   │   └── trafficmgr/
│   │   │       ├── agents.go
│   │   │       ├── config.go
│   │   │       ├── context.go
│   │   │       ├── gather_logs.go
│   │   │       ├── ingest.go
│   │   │       ├── ingest_test.go
│   │   │       ├── intercept.go
│   │   │       ├── mount.go
│   │   │       ├── podaccess.go
│   │   │       ├── session.go
│   │   │       └── session_info_cache.go
│   │   ├── version.go
│   │   └── version_test.go
│   ├── dnsproxy/
│   │   ├── lookup.go
│   │   ├── lookup_test.go
│   │   ├── resolvefile_unix.go
│   │   ├── resolvefile_unix_test.go
│   │   └── rpc.go
│   ├── dos/
│   │   ├── aferofs/
│   │   │   └── wrapper.go
│   │   ├── env.go
│   │   ├── exe.go
│   │   ├── filesystem.go
│   │   ├── filesystem_test.go
│   │   ├── lockedfile.go
│   │   ├── package.go
│   │   ├── stdio.go
│   │   └── wdwrapper.go
│   ├── dpipe/
│   │   ├── dpipe.go
│   │   ├── dpipe_test.go
│   │   ├── dpipe_unix.go
│   │   ├── dpipe_windows.go
│   │   └── testdata/
│   │       └── echo/
│   │           └── echo.go
│   ├── errcat/
│   │   └── errors.go
│   ├── filelocation/
│   │   ├── app.go
│   │   ├── ctx.go
│   │   ├── osfile.go
│   │   ├── osfile_darwin.go
│   │   ├── osfile_linux.go
│   │   └── osfile_windows.go
│   ├── forwarder/
│   │   ├── basic.go
│   │   ├── tcp.go
│   │   └── udp.go
│   ├── grpc/
│   │   ├── client/
│   │   │   └── connect.go
│   │   ├── error.go
│   │   ├── errors/
│   │   │   └── errors.go
│   │   ├── server/
│   │   │   ├── context.go
│   │   │   ├── logging.go
│   │   │   └── server.go
│   │   └── watcher/
│   │       └── watcher.go
│   ├── icept/
│   │   ├── conflicts.go
│   │   ├── conflicts_test.go
│   │   └── find.go
│   ├── informer/
│   │   ├── context.go
│   │   └── factory.go
│   ├── ioutil/
│   │   ├── free_ports.go
│   │   ├── keyvalueformatter.go
│   │   ├── print.go
│   │   ├── safename.go
│   │   ├── tempname.go
│   │   └── writeallto.go
│   ├── iputil/
│   │   ├── ipnet.go
│   │   ├── ips.go
│   │   ├── join.go
│   │   ├── normalize.go
│   │   └── parse.go
│   ├── json/
│   │   └── marshal.go
│   ├── k8sapi/
│   │   ├── cani.go
│   │   ├── clientconfigprovider.go
│   │   ├── interface.go
│   │   ├── kind.go
│   │   ├── namespaceid.go
│   │   ├── object.go
│   │   ├── util.go
│   │   └── workload.go
│   ├── labels/
│   │   └── selector.go
│   ├── log/
│   │   ├── base_logger.go
│   │   ├── group.go
│   │   └── timed_level.go
│   ├── maps/
│   │   ├── utils.go
│   │   └── xmap.go
│   ├── matcher/
│   │   ├── header_stringer.go
│   │   ├── header_stringer_test.go
│   │   ├── headers.go
│   │   ├── headers_test.go
│   │   ├── paths.go
│   │   ├── request.go
│   │   ├── request_test.go
│   │   └── value.go
│   ├── pprof/
│   │   └── pprof.go
│   ├── proc/
│   │   ├── cmd.go
│   │   ├── docker_linux.go
│   │   ├── docker_other.go
│   │   ├── exec.go
│   │   ├── exec_unix.go
│   │   ├── exec_windows.go
│   │   ├── wsl_linux.go
│   │   └── wsl_other.go
│   ├── restapi/
│   │   ├── api.go
│   │   └── api_test.go
│   ├── routing/
│   │   ├── routing.go
│   │   ├── routing_darwin.go
│   │   ├── routing_linux.go
│   │   ├── routing_test.go
│   │   ├── routing_unix.go
│   │   ├── routing_unix_test.go
│   │   └── routing_windows.go
│   ├── shellquote/
│   │   ├── shellstring.go
│   │   ├── shellstring_unix.go
│   │   ├── shellstring_unix_test.go
│   │   ├── shellstring_windows.go
│   │   └── shellstring_windows_test.go
│   ├── sigctx/
│   │   └── context.go
│   ├── slice/
│   │   ├── contains.go
│   │   ├── csv.go
│   │   └── strings.go
│   ├── subnet/
│   │   ├── bitfield256.go
│   │   ├── bitfield256_test.go
│   │   ├── set.go
│   │   ├── set_test.go
│   │   ├── subnet.go
│   │   ├── subnet_test.go
│   │   └── testdata/
│   │       └── ips.txt
│   ├── tmconfig/
│   │   ├── admin_command.go
│   │   └── configmap.go
│   ├── tunnel/
│   │   ├── client_stream.go
│   │   ├── connid.go
│   │   ├── connid_test.go
│   │   ├── context.go
│   │   ├── dialer.go
│   │   ├── message.go
│   │   ├── metrics.go
│   │   ├── pipe.go
│   │   ├── pool.go
│   │   ├── probe.go
│   │   ├── provider.go
│   │   ├── server_stream.go
│   │   ├── stream.go
│   │   ├── stream_conn.go
│   │   ├── stream_conn_test.go
│   │   ├── stream_test.go
│   │   ├── synthetic.go
│   │   ├── timed_handler.go
│   │   └── udplistener.go
│   ├── types/
│   │   ├── addrportandproto.go
│   │   ├── engagement.go
│   │   ├── mountpolicy.go
│   │   ├── portandproto.go
│   │   ├── portidentifier.go
│   │   ├── portmapping.go
│   │   └── proto.go
│   ├── version/
│   │   └── version.go
│   ├── vif/
│   │   ├── device.go
│   │   ├── device_darwin.go
│   │   ├── device_linux.go
│   │   ├── device_notlinux.go
│   │   ├── device_unix.go
│   │   ├── device_windows.go
│   │   ├── logging.go
│   │   ├── router.go
│   │   ├── router_test.go
│   │   ├── stack.go
│   │   └── tunneling_device.go
│   └── workload/
│       ├── informers.go
│       ├── state.go
│       └── util.go
├── rpc/
│   ├── LICENSE
│   ├── agent/
│   │   ├── agent.pb.go
│   │   ├── agent.proto
│   │   └── agent_grpc.pb.go
│   ├── authenticator/
│   │   ├── authenticator.pb.go
│   │   ├── authenticator.proto
│   │   └── authenticator_grpc.pb.go
│   ├── common/
│   │   ├── version.pb.go
│   │   └── version.proto
│   ├── connector/
│   │   ├── connector.pb.go
│   │   ├── connector.proto
│   │   └── connector_grpc.pb.go
│   ├── daemon/
│   │   ├── daemon.pb.go
│   │   ├── daemon.proto
│   │   └── daemon_grpc.pb.go
│   ├── go.mod
│   ├── go.sum
│   ├── manager/
│   │   ├── manager.pb.go
│   │   ├── manager.proto
│   │   └── manager_grpc.pb.go
│   └── teleroute/
│       ├── service.pb.go
│       ├── service.proto
│       └── service_grpc.pb.go
└── test-infra/
    ├── aws-okd/
    │   ├── README.md
    │   └── dns/
    │       ├── .gitignore
    │       └── dns.tf
    └── aws-vpn/
        ├── .gitignore
        ├── README.md
        ├── dns.tf
        ├── eks.tf
        ├── locals.tf
        ├── network.tf
        ├── pki.sh
        ├── provider.tf
        └── vpn.tf
Download .txt
Showing preview only (518K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5614 symbols across 492 files)

FILE: build-aux/admission_controller_tls/main.go
  function main (line 21) | func main() {
  function generateKeys (line 32) | func generateKeys(mgrNamespace, dir string) error {
  function writeFile (line 53) | func writeFile(dir, file string, data []byte) error {
  function generateKeyTriplet (line 82) | func generateKeyTriplet(mgrNamespace string) (crtPem, keyPem, caPem []by...
  function bigIntHash (line 145) | func bigIntHash(n *big.Int) []byte {
  function ToPEM (line 152) | func ToPEM(file, keyType string, data []byte) ([]byte, error) {

FILE: build-aux/genversion/main.go
  function isReleased (line 39) | func isReleased(v semver.Version) bool {
  function dirMD5 (line 49) | func dirMD5(root string) ([]byte, error) {
  function getLatestChangelogVersion (line 74) | func getLatestChangelogVersion() (v semver.Version, released bool, err e...
  function Main (line 105) | func Main() error {
  function main (line 175) | func main() {

FILE: build-aux/wix-installer/tpwrapper.go
  constant svcName (line 16) | svcName = "TelepresenceDaemon"
  type wrapper (line 18) | type wrapper struct
    method Execute (line 28) | func (w *wrapper) Execute(_ []string, r <-chan svc.ChangeRequest, chan...
  function main (line 87) | func main() {

FILE: charts/chart.go
  type DirType (line 21) | type DirType
  constant DirTypeTelepresence (line 24) | DirTypeTelepresence   DirType = iota
  constant TelepresenceChartName (line 25) | TelepresenceChartName         = "telepresence-oss"
  function filePriority (line 32) | func filePriority(chartName, filename string) int {
  function addFile (line 46) | func addFile(tarWriter *tar.Writer, vfs fs.FS, filename string, content ...
  type ChartOverlayFuncDef (line 78) | type ChartOverlayFuncDef
  function WriteChart (line 85) | func WriteChart(helmChartDir DirType, out io.Writer, chartName string, v...

FILE: cmd/cobraparser/generate/generate.go
  function FlagSet (line 18) | func FlagSet(setName string, ci *types.CommandInfo) *pflag.FlagSet {

FILE: cmd/cobraparser/main.go
  function main (line 16) | func main() {

FILE: cmd/cobraparser/types/commandinfo.go
  type CommandInfo (line 15) | type CommandInfo struct
  type FlagInfo (line 24) | type FlagInfo struct
  type HelpFetcher (line 35) | type HelpFetcher struct
    method fetch (line 40) | func (f *HelpFetcher) fetch(path []string) (string, error) {
    method BuildCommandTree (line 69) | func (f *HelpFetcher) BuildCommandTree(path []string, maxDepth int) (*...
  function looksLikeHelp (line 62) | func looksLikeHelp(s string) bool {
  function parseUsage (line 118) | func parseUsage(text string) string {
  function parseShortDescription (line 139) | func parseShortDescription(text string) string {
  function parseAvailableCommands (line 157) | func parseAvailableCommands(text string) []string {
  function startsWithIndent (line 184) | func startsWithIndent(s string) bool {
  function parseFlagsFromSection (line 198) | func parseFlagsFromSection(text string, global, inherited bool, headerPa...
  function sliceAfter (line 280) | func sliceAfter(text, headerPattern string) string {

FILE: cmd/routecontroller/main.go
  type subnetRule (line 21) | type subnetRule struct
  function main (line 26) | func main() {
  function run (line 37) | func run(ctx context.Context) error {
  function discoverServiceCIDRs (line 61) | func discoverServiceCIDRs(ctx context.Context, cs *kubernetes.Clientset)...
  function installSubnetBlackholes (line 95) | func installSubnetBlackholes(ctx context.Context, cs *kubernetes.Clients...
  function removeSubnetBlackholes (line 136) | func removeSubnetBlackholes(ctx context.Context, rules []subnetRule) {

FILE: cmd/teleroute/driver/driver.go
  type driver (line 13) | type driver struct
    method GetCapabilities (line 33) | func (d *driver) GetCapabilities() (*network.CapabilitiesResponse, err...
    method CreateNetwork (line 40) | func (d *driver) CreateNetwork(r *network.CreateNetworkRequest) error {
    method DeleteNetwork (line 49) | func (d *driver) DeleteNetwork(r *network.DeleteNetworkRequest) error {
    method CreateEndpoint (line 57) | func (d *driver) CreateEndpoint(r *network.CreateEndpointRequest) (*ne...
    method DeleteEndpoint (line 65) | func (d *driver) DeleteEndpoint(r *network.DeleteEndpointRequest) error {
    method Join (line 69) | func (d *driver) Join(r *network.JoinRequest) (*network.JoinResponse, ...
    method Leave (line 77) | func (d *driver) Leave(r *network.LeaveRequest) (err error) {
    method EndpointInfo (line 81) | func (d *driver) EndpointInfo(r *network.InfoRequest) (*network.InfoRe...
    method DiscoverNew (line 85) | func (d *driver) DiscoverNew(*network.DiscoveryNotification) error {
    method DiscoverDelete (line 89) | func (d *driver) DiscoverDelete(*network.DiscoveryNotification) error {
    method ProgramExternalConnectivity (line 93) | func (d *driver) ProgramExternalConnectivity(*network.ProgramExternalC...
    method RevokeExternalConnectivity (line 97) | func (d *driver) RevokeExternalConnectivity(*network.RevokeExternalCon...
    method AllocateNetwork (line 101) | func (d *driver) AllocateNetwork(*network.AllocateNetworkRequest) (*ne...
    method FreeNetwork (line 105) | func (d *driver) FreeNetwork(*network.FreeNetworkRequest) error {
    method withNetwork (line 109) | func (d *driver) withNetwork(id string, f func(*networkState) error) (...
  function New (line 19) | func New(ctx context.Context, pid int) network.Driver {
  type errNetworkNotFound (line 27) | type errNetworkNotFound
    method Error (line 29) | func (e errNetworkNotFound) Error() string {

FILE: cmd/teleroute/driver/network.go
  type networkState (line 25) | type networkState struct
    method initialize (line 55) | func (n *networkState) initialize(r *network.CreateNetworkRequest) (er...
    method connectToDaemon (line 95) | func (n *networkState) connectToDaemon(gateways []netip.Prefix) (err e...
    method createEndpoint (line 168) | func (n *networkState) createEndpoint(r *network.CreateEndpointRequest...
    method join (line 196) | func (n *networkState) join(r *network.JoinRequest) (response *network...
    method leaveEndpoint (line 261) | func (n *networkState) leaveEndpoint(endpointID string) error {
    method deleteEndpoint (line 279) | func (n *networkState) deleteEndpoint(endpointID string) error {
  function newNetwork (line 38) | func newNetwork(ctx context.Context, pid int, r *network.CreateNetworkRe...
  function callDaemon (line 88) | func callDaemon[R proto.Message](ns *networkState, f func(ctx context.Co...
  function rawAddrFromPrefixString (line 153) | func rawAddrFromPrefixString(s string) (rawAddr []byte, err error) {

FILE: cmd/teleroute/driver/options.go
  type options (line 10) | type options struct
    method parse (line 24) | func (o *options) parse(gos map[string]any) error {
  type errRequiredOption (line 18) | type errRequiredOption
    method Error (line 20) | func (e errRequiredOption) Error() string {

FILE: cmd/teleroute/main.go
  constant pluginSocket (line 21) | pluginSocket = "/run/docker/plugins/teleroute.sock"
  constant pluginLog (line 22) | pluginLog    = "/var/log/teleroute.log"
  function main (line 25) | func main() {
  constant pluginEntryPoint (line 59) | pluginEntryPoint = "/bin/docker-network-teleroute"
  function getPluginHostPID (line 61) | func getPluginHostPID(ctx context.Context) (int, error) {

FILE: integration_test/agent_injector_disabled_test.go
  type agentInjectorDisabledSuite (line 10) | type agentInjectorDisabledSuite struct
    method SuiteName (line 16) | func (s *agentInjectorDisabledSuite) SuiteName() string {
    method SetupSuite (line 26) | func (s *agentInjectorDisabledSuite) SetupSuite() {
    method TearDownSuite (line 31) | func (s *agentInjectorDisabledSuite) TearDownSuite() {
    method Test_AgentInjectorDisabled (line 35) | func (s *agentInjectorDisabledSuite) Test_AgentInjectorDisabled() {
    method Test_VersionWithAgentInjectorDisabled (line 56) | func (s *agentInjectorDisabledSuite) Test_VersionWithAgentInjectorDisa...
    method Test_ManualAgent (line 84) | func (s *agentInjectorDisabledSuite) Test_ManualAgent() {
  function init (line 20) | func init() {

FILE: integration_test/also_proxy_test.go
  method Test_AlsoProxy32 (line 15) | func (s *notConnectedSuite) Test_AlsoProxy32() {

FILE: integration_test/argo_rollouts_test.go
  type argoRolloutsSuite (line 18) | type argoRolloutsSuite struct
    method SuiteName (line 23) | func (s *argoRolloutsSuite) SuiteName() string {
    method SetupSuite (line 33) | func (s *argoRolloutsSuite) SetupSuite() {
    method TearDownSuite (line 52) | func (s *argoRolloutsSuite) TearDownSuite() {
    method Test_SuccessfullyInterceptsArgoRollout (line 78) | func (s *argoRolloutsSuite) Test_SuccessfullyInterceptsArgoRollout() {
    method Test_ListsReplicaSetWhenRolloutDisabled (line 130) | func (s *argoRolloutsSuite) Test_ListsReplicaSetWhenRolloutDisabled() {
  function init (line 27) | func init() {
  function downloadKubectlArgoRollouts (line 56) | func downloadKubectlArgoRollouts(ctx context.Context, arExe string) error {

FILE: integration_test/bind_to_podip_test.go
  method Test_BindToPodIP (line 16) | func (s *connectedSuite) Test_BindToPodIP() {

FILE: integration_test/cidr_conflict_test.go
  type cidrConflictSuite (line 20) | type cidrConflictSuite struct
    method SuiteName (line 28) | func (s *cidrConflictSuite) SuiteName() string {
    method SetupSuite (line 38) | func (s *cidrConflictSuite) SetupSuite() {
    method TearDownSuite (line 87) | func (s *cidrConflictSuite) TearDownSuite() {
    method Test_AutoConflictResolution (line 93) | func (s *cidrConflictSuite) Test_AutoConflictResolution() {
    method Test_AutoConflictAvoidance (line 126) | func (s *cidrConflictSuite) Test_AutoConflictAvoidance() {
    method Test_AutoConflictResolution_CloudDisable (line 135) | func (s *cidrConflictSuite) Test_AutoConflictResolution_CloudDisable() {
    method Test_AutoConflictResolution_ClientDisable (line 144) | func (s *cidrConflictSuite) Test_AutoConflictResolution_ClientDisable() {
    method Test_AllowConflictResolution (line 152) | func (s *cidrConflictSuite) Test_AllowConflictResolution() {
  function init (line 32) | func init() {

FILE: integration_test/cli_test.go
  type cliSuite (line 12) | type cliSuite struct
    method SuiteName (line 16) | func (s *cliSuite) SuiteName() string {
    method Test_Version (line 26) | func (s *cliSuite) Test_Version() {
    method Test_VersionWithInvalidKubeContext (line 36) | func (s *cliSuite) Test_VersionWithInvalidKubeContext() {
    method Test_Help (line 47) | func (s *cliSuite) Test_Help() {
    method Test_Status (line 92) | func (s *cliSuite) Test_Status() {
    method Test_StatusWithJSON (line 105) | func (s *cliSuite) Test_StatusWithJSON() {
    method Test_ConfigViewClientOnly (line 116) | func (s *cliSuite) Test_ConfigViewClientOnly() {
  function init (line 20) | func init() {

FILE: integration_test/cloud_config_test.go
  method Test_CloudNeverProxy (line 27) | func (s *notConnectedSuite) Test_CloudNeverProxy() {
  method Test_CloudAllowConflicting (line 132) | func (s *notConnectedSuite) Test_CloudAllowConflicting() {
  method configView (line 167) | func (s *notConnectedSuite) configView() (*client.SessionConfig, error) {
  method Test_CloudAgentArrival (line 177) | func (s *notConnectedSuite) Test_CloudAgentArrival() {
  method Test_RootdCloudLogLevel (line 206) | func (s *notConnectedSuite) Test_RootdCloudLogLevel() {
  method Test_UserdCloudLogLevel (line 294) | func (s *notConnectedSuite) Test_UserdCloudLogLevel() {

FILE: integration_test/compose_test.go
  type composeSuite (line 16) | type composeSuite struct
    method SuiteName (line 22) | func (s *composeSuite) SuiteName() string {
    method SetupSuite (line 32) | func (s *composeSuite) SetupSuite() {
    method TearDownTest (line 43) | func (s *composeSuite) TearDownTest() {
    method Context (line 47) | func (s *composeSuite) Context() context.Context {
    method Test_ComposeDNS (line 51) | func (s *composeSuite) Test_ComposeDNS() {
    method Test_ComposeConnect (line 98) | func (s *composeSuite) Test_ComposeConnect() {
    method Test_ComposeProxy (line 143) | func (s *composeSuite) Test_ComposeProxy() {
    method Test_ComposeIngest (line 188) | func (s *composeSuite) Test_ComposeIngest() {
    method Test_ComposeIntercept (line 239) | func (s *composeSuite) Test_ComposeIntercept() {
    method Test_ComposeReplace (line 288) | func (s *composeSuite) Test_ComposeReplace() {
    method Test_ComposeWiretap (line 337) | func (s *composeSuite) Test_ComposeWiretap() {
  function init (line 26) | func init() {

FILE: integration_test/config_test.go
  method Test_EmptyConfigFile (line 11) | func (s *notConnectedSuite) Test_EmptyConfigFile() {

FILE: integration_test/connected_test.go
  type connectedSuite (line 11) | type connectedSuite struct
    method SuiteName (line 16) | func (s *connectedSuite) SuiteName() string {
    method Test_ListExcludesTM (line 26) | func (s *connectedSuite) Test_ListExcludesTM() {
    method Test_ReportsAllVersions (line 31) | func (s *connectedSuite) Test_ReportsAllVersions() {
    method Test_Status (line 41) | func (s *connectedSuite) Test_Status() {
    method Test_StatusWithJSON (line 49) | func (s *connectedSuite) Test_StatusWithJSON() {
  function init (line 20) | func init() {

FILE: integration_test/container_test.go
  method Test_InterceptsContainer (line 19) | func (s *connectedSuite) Test_InterceptsContainer() {
  method Test_InterceptsContainerAndReplace (line 91) | func (s *connectedSuite) Test_InterceptsContainerAndReplace() {

FILE: integration_test/docker_daemon_test.go
  type dockerDaemonSuite (line 21) | type dockerDaemonSuite struct
    method SuiteName (line 27) | func (s *dockerDaemonSuite) SuiteName() string {
    method SetupSuite (line 37) | func (s *dockerDaemonSuite) SetupSuite() {
    method TearDownTest (line 48) | func (s *dockerDaemonSuite) TearDownTest() {
    method Context (line 52) | func (s *dockerDaemonSuite) Context() context.Context {
    method Test_DockerDaemon_status (line 56) | func (s *dockerDaemonSuite) Test_DockerDaemon_status() {
    method Test_DockerDaemon_hostDaemonNoConflict (line 67) | func (s *dockerDaemonSuite) Test_DockerDaemon_hostDaemonNoConflict() {
    method Test_DockerDaemon_alsoProxy32 (line 74) | func (s *dockerDaemonSuite) Test_DockerDaemon_alsoProxy32() {
    method Test_DockerDaemon_daemonHostNotConflict (line 118) | func (s *dockerDaemonSuite) Test_DockerDaemon_daemonHostNotConflict() {
    method Test_DockerDaemon_singleNameLookup (line 124) | func (s *dockerDaemonSuite) Test_DockerDaemon_singleNameLookup() {
    method Test_DockerDaemon_cacheFiles (line 137) | func (s *dockerDaemonSuite) Test_DockerDaemon_cacheFiles() {
    method Test_GatherLogsTrafficManager (line 163) | func (s *dockerDaemonSuite) Test_GatherLogsTrafficManager() {
  function init (line 31) | func init() {

FILE: integration_test/docker_run_test.go
  function runDockerRun (line 17) | func runDockerRun(ctx context.Context, name, svc, port, appDir, tag stri...
  method Test_DockerRun_HostDaemon (line 51) | func (s *singleServiceSuite) Test_DockerRun_HostDaemon() {
  method Test_DockerRun_DockerDaemon (line 172) | func (s *dockerDaemonSuite) Test_DockerRun_DockerDaemon() {
  method Test_DockerRun_VolumePresent (line 292) | func (s *dockerDaemonSuite) Test_DockerRun_VolumePresent() {
  method Test_DockerRunCommand (line 310) | func (s *dockerDaemonSuite) Test_DockerRunCommand() {
  method Test_DockerRunExternalDNS (line 324) | func (s *dockerDaemonSuite) Test_DockerRunExternalDNS() {

FILE: integration_test/env_interpolate_test.go
  method Test_PrefixInterpolated (line 10) | func (s *connectedSuite) Test_PrefixInterpolated() {

FILE: integration_test/gather_logs_test.go
  method TestGatherLogs_AllLogs (line 18) | func (s *multipleInterceptsSuite) TestGatherLogs_AllLogs() {
  method TestGatherLogs_ManagerOnly (line 32) | func (s *multipleInterceptsSuite) TestGatherLogs_ManagerOnly() {
  method TestGatherLogs_AgentsOnly (line 45) | func (s *multipleInterceptsSuite) TestGatherLogs_AgentsOnly() {
  method TestGatherLogs_OneAgentOnly (line 58) | func (s *multipleInterceptsSuite) TestGatherLogs_OneAgentOnly() {
  method TestGatherLogs_NoPodYamlUnlessLogs (line 71) | func (s *multipleInterceptsSuite) TestGatherLogs_NoPodYamlUnlessLogs() {
  method TestGatherLogs_NoK8sLogs (line 84) | func (s *multipleInterceptsSuite) TestGatherLogs_NoK8sLogs() {
  method TestGatherLogs_OnlyMappedLogs (line 97) | func (s *connectedSuite) TestGatherLogs_OnlyMappedLogs() {
  method cleanLogDir (line 175) | func (s *multipleInterceptsSuite) cleanLogDir(ctx context.Context) {
  method svcRegex (line 179) | func (s *multipleInterceptsSuite) svcRegex() string {
  method getZipData (line 186) | func (s *multipleInterceptsSuite) getZipData(outputFile string) (bool, i...
  function getZipData (line 190) | func getZipData(require *itest.Requirements, outputFile, appNamespace, m...
  function readZip (line 237) | func readZip(require *itest.Requirements, zippedFile *zip.File) []byte {

FILE: integration_test/h2c_intercept_test.go
  type h2cInterceptSuite (line 18) | type h2cInterceptSuite struct
    method SuiteName (line 23) | func (s *h2cInterceptSuite) SuiteName() string {
    method SetupSuite (line 33) | func (s *h2cInterceptSuite) SetupSuite() {
    method Test_H2CInterceptPreservesProtocol (line 71) | func (s *h2cInterceptSuite) Test_H2CInterceptPreservesProtocol() {
  function init (line 27) | func init() {
  function startLocalH2CEchoServer (line 42) | func startLocalH2CEchoServer(ctx context.Context, name string) (int, con...

FILE: integration_test/headless_test.go
  method Test_SuccessfullyInterceptsHeadlessService (line 12) | func (s *connectedSuite) Test_SuccessfullyInterceptsHeadlessService() {

FILE: integration_test/helm_test.go
  type helmSuite (line 13) | type helmSuite struct
    method SuiteName (line 20) | func (s *helmSuite) SuiteName() string {
    method SetupSuite (line 33) | func (s *helmSuite) SetupSuite() {
    method TearDownSuite (line 40) | func (s *helmSuite) TearDownSuite() {
    method Test_HelmCanInterceptInManagedNamespace (line 44) | func (s *helmSuite) Test_HelmCanInterceptInManagedNamespace() {
    method Test_HelmCannotConnectToUnmanagedNamespace (line 54) | func (s *helmSuite) Test_HelmCannotConnectToUnmanagedNamespace() {
    method Test_HelmWebhookInjectsInManagedNamespace (line 67) | func (s *helmSuite) Test_HelmWebhookInjectsInManagedNamespace() {
    method Test_HelmWebhookDoesntInjectInUnmanagedNamespace (line 85) | func (s *helmSuite) Test_HelmWebhookDoesntInjectInUnmanagedNamespace() {
    method Test_HelmMultipleInstalls (line 103) | func (s *helmSuite) Test_HelmMultipleInstalls() {
    method Test_CollidingInstalls (line 144) | func (s *helmSuite) Test_CollidingInstalls() {
  function init (line 24) | func init() {

FILE: integration_test/http_intercepts_test.go
  type httpInterceptsSuite (line 18) | type httpInterceptsSuite struct
    method SuiteName (line 23) | func (s *httpInterceptsSuite) SuiteName() string {
    method SetupSuite (line 27) | func (s *httpInterceptsSuite) SetupSuite() {
    method Test_HTTPHeaderFiltering (line 34) | func (s *httpInterceptsSuite) Test_HTTPHeaderFiltering() {
    method Test_HTTPHeaderFiltering_CurlFormat (line 48) | func (s *httpInterceptsSuite) Test_HTTPHeaderFiltering_CurlFormat() {
    method Test_HTTPPathFiltering (line 62) | func (s *httpInterceptsSuite) Test_HTTPPathFiltering() {
    method Test_HTTPCombinedFiltering (line 76) | func (s *httpInterceptsSuite) Test_HTTPCombinedFiltering() {
    method Test_BackwardCompatibility (line 94) | func (s *httpInterceptsSuite) Test_BackwardCompatibility() {
    method Test_HTTPInterceptCoexistence (line 108) | func (s *httpInterceptsSuite) Test_HTTPInterceptCoexistence() {
    method Test_TCPPortConflictDetection (line 147) | func (s *httpInterceptsSuite) Test_TCPPortConflictDetection() {
    method Test_HTTPManySimultaneous (line 192) | func (s *httpInterceptsSuite) Test_HTTPManySimultaneous() {
  function init (line 186) | func init() {
  method Test_HTTPManyClientsSimultaneous (line 259) | func (s *notConnectedSuite) Test_HTTPManyClientsSimultaneous() {
  method Test_OtelHTTPManyClientsSimultaneous (line 263) | func (s *otelSuite) Test_OtelHTTPManyClientsSimultaneous() {
  type NamespaceSuite (line 267) | type NamespaceSuite interface
  function testHTTPManyClientsSimultaneous (line 277) | func testHTTPManyClientsSimultaneous(s NamespaceSuite, svc, path string) {

FILE: integration_test/ignored_mounts_test.go
  method Test_IgnoredMounts (line 17) | func (s *mountsSuite) Test_IgnoredMounts() {

FILE: integration_test/inactive_client_test.go
  type inactiveClientSuite (line 17) | type inactiveClientSuite struct
    method SuiteName (line 31) | func (s *inactiveClientSuite) SuiteName() string {
    method SetupSuite (line 47) | func (s *inactiveClientSuite) SetupSuite() {
    method TearDownSuite (line 57) | func (s *inactiveClientSuite) TearDownSuite() {
    method AmendSuiteContext (line 63) | func (s *inactiveClientSuite) AmendSuiteContext(ctx context.Context) c...
    method Test_ConflictOverrideInactive (line 72) | func (s *inactiveClientSuite) Test_ConflictOverrideInactive() {
    method Test_ConflictOverrideSleeping (line 135) | func (s *inactiveClientSuite) Test_ConflictOverrideSleeping() {
    method withSleepingClient (line 202) | func (s *inactiveClientSuite) withSleepingClient(ctx context.Context, ...
  function init (line 35) | func init() {

FILE: integration_test/ingest_test.go
  type ingestSuite (line 22) | type ingestSuite struct
    method SuiteName (line 28) | func (s *ingestSuite) SuiteName() string {
    method SetupSuite (line 38) | func (s *ingestSuite) SetupSuite() {
    method TearDownSuite (line 86) | func (s *ingestSuite) TearDownSuite() {
    method mountPoint (line 111) | func (s *ingestSuite) mountPoint() string {
    method Test_IngestCLI (line 129) | func (s *ingestSuite) Test_IngestCLI() {
    method Test_IngestIngestConflict (line 154) | func (s *ingestSuite) Test_IngestIngestConflict() {
    method Test_IngestInterceptConflict (line 170) | func (s *ingestSuite) Test_IngestInterceptConflict() {
    method Test_InterceptIngestConflict (line 186) | func (s *ingestSuite) Test_InterceptIngestConflict() {
    method Test_IngestRepeat (line 202) | func (s *ingestSuite) Test_IngestRepeat() {
    method Test_IngestFTP (line 213) | func (s *ingestSuite) Test_IngestFTP() {
    method Test_IngestProxyVia (line 249) | func (s *ingestSuite) Test_IngestProxyVia() {
    method Test_IngestWithCommand (line 305) | func (s *ingestSuite) Test_IngestWithCommand() {
    method Test_IngestWithContainerAndCommand (line 315) | func (s *ingestSuite) Test_IngestWithContainerAndCommand() {
    method Test_LeaveIngestWithoutContainer (line 325) | func (s *ingestSuite) Test_LeaveIngestWithoutContainer() {
    method Test_IngestListFormat (line 340) | func (s *ingestSuite) Test_IngestListFormat() {
  function init (line 32) | func init() {

FILE: integration_test/inject_policy_test.go
  method applyPolicyApp (line 21) | func (is *installSuite) applyPolicyApp(ctx context.Context, name, namesp...
  method assertInjected (line 29) | func (is *installSuite) assertInjected(ctx context.Context, name, namesp...
  method injectPolicyTest (line 46) | func (is *installSuite) injectPolicyTest(ctx context.Context, policy age...
  method TestInjectPolicy (line 102) | func (is *installSuite) TestInjectPolicy() {
  method applyMultipleServices (line 110) | func (is *installSuite) applyMultipleServices(svcCount int) {
  method deleteMultipleServices (line 122) | func (is *installSuite) deleteMultipleServices(svcCount int) {
  method applyOrDeleteMultipleServices (line 126) | func (is *installSuite) applyOrDeleteMultipleServices(svcCount int, appl...
  method Test_MultiOnDemandInjectOnInstall (line 151) | func (is *installSuite) Test_MultiOnDemandInjectOnInstall() {
  method Test_MultiOnDemandInjectOnApply (line 187) | func (is *installSuite) Test_MultiOnDemandInjectOnApply() {

FILE: integration_test/injector_test.go
  method Test_InterceptOperationRestoredAfterFailingInject (line 20) | func (s *singleServiceSuite) Test_InterceptOperationRestoredAfterFailing...
  method Test_HelmUpgradeWebhookSecret (line 106) | func (s *singleServiceSuite) Test_HelmUpgradeWebhookSecret() {
  method Test_HelmUpgradeMountedWebhookSecret (line 149) | func (s *singleServiceSuite) Test_HelmUpgradeMountedWebhookSecret() {

FILE: integration_test/install_test.go
  constant ManagerAppName (line 35) | ManagerAppName = agentconfig.ManagerAppName
  type installSuite (line 37) | type installSuite struct
    method SuiteName (line 42) | func (is *installSuite) SuiteName() string {
    method AmendSuiteContext (line 64) | func (is *installSuite) AmendSuiteContext(ctx context.Context) context...
    method Test_UpgradeRetainsValues (line 73) | func (is *installSuite) Test_UpgradeRetainsValues() {
    method Test_HelmTemplateInstall (line 137) | func (is *installSuite) Test_HelmTemplateInstall() {
    method Test_FindTrafficManager_notPresent (line 173) | func (is *installSuite) Test_FindTrafficManager_notPresent() {
    method Test_EnsureManager_toleratesFailedInstall (line 184) | func (is *installSuite) Test_EnsureManager_toleratesFailedInstall() {
    method Test_RemoveManager_canUninstall (line 224) | func (is *installSuite) Test_RemoveManager_canUninstall() {
    method Test_No_Upgrade (line 241) | func (is *installSuite) Test_No_Upgrade() {
    method Test_findTrafficManager_differentNamespace_present (line 270) | func (is *installSuite) Test_findTrafficManager_differentNamespace_pre...
    method findTrafficManagerPresent (line 285) | func (is *installSuite) findTrafficManagerPresent(ctx context.Context,...
    method cluster (line 302) | func (is *installSuite) cluster(ctx context.Context, context, managerN...
    method Test_HelmSubChart (line 371) | func (is *installSuite) Test_HelmSubChart() {
  function init (line 46) | func init() {
  function getHelmConfig (line 52) | func getHelmConfig(ctx context.Context, clientGetter genericclioptions.R...
  function ensureTrafficManager (line 308) | func ensureTrafficManager(kc *k8s.Cluster) error {
  function unTgz (line 316) | func unTgz(ctx context.Context, srcTgz, dstPath string) error {

FILE: integration_test/integration_test.go
  function Test_Integration (line 10) | func Test_Integration(t *testing.T) {

FILE: integration_test/intercept_env_test.go
  type interceptEnvSuite (line 11) | type interceptEnvSuite struct
    method SuiteName (line 16) | func (s *interceptEnvSuite) SuiteName() string {
    method Test_ExcludeVariables (line 26) | func (s *interceptEnvSuite) Test_ExcludeVariables() {
  function init (line 20) | func init() {

FILE: integration_test/intercept_flags_test.go
  type interceptFlagSuite (line 20) | type interceptFlagSuite struct
    method SuiteName (line 26) | func (s *interceptFlagSuite) SuiteName() string {
    method SetupSuite (line 36) | func (s *interceptFlagSuite) SetupSuite() {
    method TearDownSuite (line 48) | func (s *interceptFlagSuite) TearDownSuite() {
    method Test_ContainerReplace (line 61) | func (s *interceptFlagSuite) Test_ContainerReplace() {
  function init (line 30) | func init() {

FILE: integration_test/intercept_localhost_test.go
  type interceptLocalhostSuite (line 16) | type interceptLocalhostSuite struct
    method SuiteName (line 24) | func (s *interceptLocalhostSuite) SuiteName() string {
    method SetupSuite (line 34) | func (s *interceptLocalhostSuite) SetupSuite() {
    method TearDownSuite (line 44) | func (s *interceptLocalhostSuite) TearDownSuite() {
    method TestIntercept_WithCustomLocalhost (line 48) | func (s *interceptLocalhostSuite) TestIntercept_WithCustomLocalhost() {
  function init (line 28) | func init() {

FILE: integration_test/intercept_mount_test.go
  type interceptMountSuite (line 22) | type interceptMountSuite struct
    method SuiteName (line 29) | func (s *interceptMountSuite) SuiteName() string {
    method SetupSuite (line 39) | func (s *interceptMountSuite) SetupSuite() {
    method TearDownSuite (line 61) | func (s *interceptMountSuite) TearDownSuite() {
    method Test_InterceptMount (line 79) | func (s *interceptMountSuite) Test_InterceptMount() {
  function init (line 33) | func init() {
  method Test_InterceptMountRelative (line 97) | func (s *singleServiceSuite) Test_InterceptMountRelative() {
  method Test_InterceptDetailedOutput (line 135) | func (s *singleServiceSuite) Test_InterceptDetailedOutput() {
  method Test_NoInterceptorResponse (line 167) | func (s *singleServiceSuite) Test_NoInterceptorResponse() {

FILE: integration_test/itest/apply_app.go
  function ApplyEchoService (line 17) | func ApplyEchoService(ctx context.Context, name, namespace string, port ...
  function ApplyService (line 21) | func ApplyService(ctx context.Context, name, namespace, image string, po...
  function DeleteSvcAndWorkload (line 30) | func DeleteSvcAndWorkload(ctx context.Context, workload, name, namespace...
  function ApplyApp (line 37) | func ApplyApp(ctx context.Context, name, namespace, workload string) {
  function DeleteApp (line 47) | func DeleteApp(ctx context.Context, name, namespace string) {
  type AppPort (line 54) | type AppPort struct
  type AppData (line 62) | type AppData struct
  function ApplyAppTemplate (line 75) | func ApplyAppTemplate(ctx context.Context, namespace string, app *AppDat...
  function RolloutStatusWait (line 88) | func RolloutStatusWait(ctx context.Context, namespace, workload string) ...

FILE: integration_test/itest/assertions.go
  type Requirements (line 11) | type Requirements struct
    method EventuallyContext (line 15) | func (r *Requirements) EventuallyContext(ctx context.Context, conditio...
  type Assertions (line 25) | type Assertions struct
    method EventuallyContext (line 29) | func (r *Assertions) EventuallyContext(ctx context.Context, condition ...

FILE: integration_test/itest/cluster.go
  constant purposeLabel (line 56) | purposeLabel       = "tp-cli-testing"
  constant AssignPurposeLabel (line 57) | AssignPurposeLabel = "purpose=" + purposeLabel
  constant TestUser (line 58) | TestUser           = "telepresence-test-developer"
  type Cluster (line 61) | type Cluster interface
  type cluster (line 113) | type cluster struct
    method SetSelf (line 158) | func (s *cluster) SetSelf(self Cluster) {
    method Initialize (line 162) | func (s *cluster) Initialize(ctx context.Context) context.Context {
    method downloadBinary (line 323) | func (s *cluster) downloadBinary(ctx context.Context, t testing.TB, v ...
    method tearDown (line 374) | func (s *cluster) tearDown(ctx context.Context) {
    method ensureQuit (line 383) | func (s *cluster) ensureQuit(ctx context.Context) {
    method ensureNoManager (line 388) | func (s *cluster) ensureNoManager(ctx context.Context) {
    method withBasicConfig (line 426) | func (s *cluster) withBasicConfig(c context.Context, t *testing.T) con...
    method GlobalEnv (line 475) | func (s *cluster) GlobalEnv(ctx context.Context) dos.MapEnv {
    method Executable (line 517) | func (s *cluster) Executable() (string, error) {
    method GeneralError (line 521) | func (s *cluster) GeneralError() error {
    method IsCI (line 525) | func (s *cluster) IsCI() bool {
    method IsIPv6 (line 529) | func (s *cluster) IsIPv6() bool {
    method LargeFileTestDisabled (line 533) | func (s *cluster) LargeFileTestDisabled() bool {
    method AgentImage (line 537) | func (s *cluster) AgentImage() string {
    method AgentRegistry (line 541) | func (s *cluster) AgentRegistry() string {
    method AgentVersion (line 545) | func (s *cluster) AgentVersion() semver.Version {
    method ClientImage (line 549) | func (s *cluster) ClientImage() string {
    method ClientRegistry (line 553) | func (s *cluster) ClientRegistry() string {
    method ClientVersion (line 557) | func (s *cluster) ClientVersion() semver.Version {
    method ClientIsVersion (line 567) | func (s *cluster) ClientIsVersion(vr string) bool {
    method ManagerImage (line 571) | func (s *cluster) ManagerImage() string {
    method ManagerRegistry (line 575) | func (s *cluster) ManagerRegistry() string {
    method ManagerVersion (line 579) | func (s *cluster) ManagerVersion() semver.Version {
    method ManagerIsVersion (line 585) | func (s *cluster) ManagerIsVersion(vr string) bool {
    method SetGeneralError (line 589) | func (s *cluster) SetGeneralError(err error) {
    method Suffix (line 593) | func (s *cluster) Suffix() string {
    method UserdPProf (line 597) | func (s *cluster) UserdPProf() uint16 {
    method RootdPProf (line 601) | func (s *cluster) RootdPProf() uint16 {
    method UseLocalPathProvisioner (line 605) | func (s *cluster) UseLocalPathProvisioner() bool {
    method CapturePodLogs (line 609) | func (s *cluster) CapturePodLogs(ctx context.Context, app, container, ...
    method GetK8SCluster (line 716) | func (s *cluster) GetK8SCluster(ctx context.Context, context, managerN...
  function WithCluster (line 145) | func WithCluster(ctx context.Context, f func(ctx context.Context)) {
  function unzip (line 358) | func unzip(t testing.TB, zipFile, dir string) {
  function PodCreateTimeout (line 415) | func PodCreateTimeout(c context.Context) time.Duration {
  function isFinalIncluded (line 561) | func isFinalIncluded(vr string, v semver.Version) bool {
  function KubeConfig (line 732) | func KubeConfig(ctx context.Context) string {
  constant sensitivePrefix (line 737) | sensitivePrefix = "--$sensitive$--"
  function WrapSensitive (line 742) | func WrapSensitive(s string) string {
  function Command (line 749) | func Command(ctx context.Context, executable string, args ...string) *ex...
  function EnvironMap (line 775) | func EnvironMap(ctx context.Context) dos.MapEnv {
  function TelepresenceOk (line 782) | func TelepresenceOk(ctx context.Context, args ...string) string {
  function Telepresence (line 800) | func Telepresence(ctx context.Context, args ...string) (string, string, ...
  function TelepresenceCmd (line 817) | func TelepresenceCmd(ctx context.Context, args ...string) *exec.Cmd {
  function TelepresenceDisconnectOk (line 850) | func TelepresenceDisconnectOk(ctx context.Context, args ...string) {
  function TelepresenceDisconnect (line 855) | func TelepresenceDisconnect(ctx context.Context, args ...string) {
  function AssertDisconnectOutput (line 860) | func AssertDisconnectOutput(ctx context.Context, stdout string) {
  function TelepresenceQuitOk (line 869) | func TelepresenceQuitOk(ctx context.Context, args ...string) {
  function TelepresenceQuit (line 875) | func TelepresenceQuit(ctx context.Context, args ...string) {
  function AssertQuitOutput (line 880) | func AssertQuitOutput(ctx context.Context, stdout string) {
  function RunError (line 893) | func RunError(err error, out []byte) error {
  function Run (line 909) | func Run(ctx context.Context, exe string, args ...string) error {
  function Output (line 919) | func Output(ctx context.Context, exe string, args ...string) (string, er...
  function Kubectl (line 933) | func Kubectl(ctx context.Context, namespace string, args ...string) error {
  function KubectlOut (line 938) | func KubectlOut(ctx context.Context, namespace string, args ...string) (...
  function retryKubectl (line 946) | func retryKubectl(ctx context.Context, namespace string, args []string, ...
  function CreateNamespaces (line 980) | func CreateNamespaces(ctx context.Context, namespaces ...string) {
  function DeleteNamespaces (line 995) | func DeleteNamespaces(ctx context.Context, namespaces ...string) {
  function StartLocalHttpEchoServerWithAddr (line 1015) | func StartLocalHttpEchoServerWithAddr(ctx context.Context, name, addr st...
  function StartLocalHttpEchoServer (line 1049) | func StartLocalHttpEchoServer(ctx context.Context, name string) (int, co...
  function PingInterceptedEchoServer (line 1055) | func PingInterceptedEchoServer(ctx context.Context, svc, svcPort string,...
  function PingInterceptedEchoServerAndExpect (line 1068) | func PingInterceptedEchoServerAndExpect(ctx context.Context, svc, svcPor...
  function WithConfig (line 1118) | func WithConfig(c context.Context, modifierFunc func(config client.Confi...
  function WithKubeConfigExtension (line 1138) | func WithKubeConfigExtension(ctx context.Context, extProducer func(*api....
  function WithKubeConfig (line 1172) | func WithKubeConfig(ctx context.Context, cfg *api.Config) context.Context {
  function RunningPods (line 1178) | func RunningPods(ctx context.Context, svc, ns string) []core.Pod {
  function RunningPodsSelector (line 1182) | func RunningPodsSelector(ctx context.Context, ns string, selector labels...
  function RunningPodNames (line 1207) | func RunningPodNames(ctx context.Context, svc, ns string) []string {
  function RunningPodsWithAgents (line 1219) | func RunningPodsWithAgents(ctx context.Context, appPrefix, ns string) []...

FILE: integration_test/itest/config.go
  function SetConfig (line 14) | func SetConfig(ctx context.Context, configDir, configYml string) (contex...

FILE: integration_test/itest/connected.go
  type connected (line 11) | type connected struct
    method setup (line 26) | func (ch *connected) setup(ctx context.Context) bool {
    method tearDown (line 40) | func (ch *connected) tearDown(ctx context.Context) {
  function WithConnected (line 15) | func WithConnected(np TrafficManager, f func(ctx context.Context, ch Tra...

FILE: integration_test/itest/context.go
  type profileKey (line 20) | type profileKey struct
  type Profile (line 22) | type Profile
  constant DefaultProfile (line 25) | DefaultProfile      Profile = "default"
  constant GkeAutopilotProfile (line 26) | GkeAutopilotProfile Profile = "gke-autopilot"
  function withProfile (line 29) | func withProfile(ctx context.Context) context.Context {
  function GetProfile (line 43) | func GetProfile(ctx context.Context) Profile {
  type tContextKey (line 50) | type tContextKey struct
  function TestContext (line 52) | func TestContext(t *testing.T, ossRoot, moduleRoot string) context.Conte...
  function WithT (line 61) | func WithT(ctx context.Context, t *testing.T) context.Context {
  function getT (line 70) | func getT(ctx context.Context) *testing.T {
  type ossRootKey (line 77) | type ossRootKey struct
  function GetOSSRoot (line 79) | func GetOSSRoot(ctx context.Context) string {
  function SetOSSRoot (line 91) | func SetOSSRoot(ctx context.Context, dir string) context.Context {
  function WithOSSRoot (line 97) | func WithOSSRoot(ctx context.Context) context.Context {
  type moduleRootKey (line 101) | type moduleRootKey struct
  function GetModuleRoot (line 103) | func GetModuleRoot(ctx context.Context) string {
  function SetModuleRoot (line 115) | func SetModuleRoot(ctx context.Context, dir string) context.Context {
  function WithModuleRoot (line 121) | func WithModuleRoot(ctx context.Context) context.Context {
  type dirContextKey (line 125) | type dirContextKey struct
  function WithWorkingDir (line 128) | func WithWorkingDir(ctx context.Context, dir string) context.Context {
  function GetWorkingDir (line 132) | func GetWorkingDir(ctx context.Context) string {
  type envContextKey (line 141) | type envContextKey struct
  function WithEnv (line 144) | func WithEnv(ctx context.Context, env dos.MapEnv) context.Context {
  function WithoutEnv (line 160) | func WithoutEnv(ctx context.Context, keysToRemove []string) context.Cont...
  type userContextkey (line 177) | type userContextkey struct
  function WithUser (line 179) | func WithUser(ctx context.Context, clusterUser string) context.Context {
  function GetUser (line 183) | func GetUser(ctx context.Context) string {
  function LookupEnv (line 190) | func LookupEnv(ctx context.Context, key string) (value string, ok bool) {
  function getEnv (line 197) | func getEnv(ctx context.Context) dos.MapEnv {
  type globalHarnessContextKey (line 204) | type globalHarnessContextKey struct
  function withGlobalHarness (line 206) | func withGlobalHarness(ctx context.Context, h Cluster) context.Context {
  function GetGlobalHarness (line 210) | func GetGlobalHarness(ctx context.Context) Cluster {
  type exeContextKey (line 217) | type exeContextKey struct
  function WithExecutable (line 219) | func WithExecutable(ctx context.Context, exe string) context.Context {
  function GetExecutable (line 223) | func GetExecutable(ctx context.Context) string {

FILE: integration_test/itest/env.go
  type itestConfig (line 22) | type itestConfig struct
  function LoadEnvAndConfig (line 27) | func LoadEnvAndConfig(ctx context.Context) context.Context {
  function BuildOutput (line 79) | func BuildOutput(ctx context.Context) string {

FILE: integration_test/itest/harness.go
  type Harness (line 14) | type Harness interface
  type upAndDown (line 26) | type upAndDown struct
  type harness (line 33) | type harness struct
    method PushHarness (line 44) | func (h *harness) PushHarness(ctx context.Context, setup func(ctx cont...
    method HarnessContext (line 49) | func (h *harness) HarnessContext() context.Context {
    method RunSuite (line 56) | func (h *harness) RunSuite(s TestingSuite) {
    method SetupSuite (line 81) | func (h *harness) SetupSuite() {
    method PopHarness (line 102) | func (h *harness) PopHarness() {
    method HarnessT (line 137) | func (h *harness) HarnessT() *testing.T {
  function NewContextHarness (line 40) | func NewContextHarness(ctx context.Context) Harness {
  function suiteEnabled (line 63) | func suiteEnabled(ctx context.Context, s TestingSuite) bool {
  function safeSetUp (line 119) | func safeSetUp(ctx context.Context, f func(context.Context) bool) bool {
  function safeTearDown (line 124) | func safeTearDown(ctx context.Context, f func(context.Context)) {
  function failOnPanic (line 129) | func failOnPanic(ctx context.Context) {

FILE: integration_test/itest/helm.go
  method PackageHelmChart (line 28) | func (s *cluster) PackageHelmChart(ctx context.Context) (string, error) {
  method GetSetArgsForHelm (line 44) | func (s *cluster) GetSetArgsForHelm(ctx context.Context, values map[stri...
  method GetValuesForHelm (line 57) | func (s *cluster) GetValuesForHelm(ctx context.Context, values map[strin...
  method TelepresenceHelmInstallOK (line 103) | func (s *cluster) TelepresenceHelmInstallOK(ctx context.Context, upgrade...
  method TelepresenceHelmInstall (line 109) | func (s *cluster) TelepresenceHelmInstall(ctx context.Context, upgrade b...
  method UninstallTrafficManager (line 319) | func (s *cluster) UninstallTrafficManager(ctx context.Context, managerNa...

FILE: integration_test/itest/image.go
  type Image (line 10) | type Image struct
    method FQName (line 17) | func (img *Image) FQName() string {
  function ImageFromEnv (line 31) | func ImageFromEnv(ctx context.Context, env, defaultTag, defaultRegistry ...
  type imageContextKey (line 53) | type imageContextKey struct
  function WithImage (line 55) | func WithImage(ctx context.Context, image *Image) context.Context {
  function GetImage (line 59) | func GetImage(ctx context.Context) *Image {
  type clientImageContextKey (line 66) | type clientImageContextKey struct
  function WithClientImage (line 68) | func WithClientImage(ctx context.Context, image *Image) context.Context {
  function GetClientImage (line 72) | func GetClientImage(ctx context.Context) *Image {
  type agentImageContextKey (line 79) | type agentImageContextKey struct
  function WithAgentImage (line 81) | func WithAgentImage(ctx context.Context, image *Image) context.Context {
  function GetAgentImage (line 85) | func GetAgentImage(ctx context.Context) *Image {

FILE: integration_test/itest/logdir.go
  function CleanLogDir (line 14) | func CleanLogDir(ctx context.Context, require *Requirements, nsRx, mgrNa...

FILE: integration_test/itest/multiple_services.go
  type MultipleServices (line 10) | type MultipleServices interface
  type multipleServices (line 16) | type multipleServices struct
    method setup (line 32) | func (h *multipleServices) setup(ctx context.Context) bool {
    method tearDown (line 45) | func (h *multipleServices) tearDown(ctx context.Context) {
    method Name (line 57) | func (h *multipleServices) Name() string {
    method ServiceCount (line 61) | func (h *multipleServices) ServiceCount() int {
  function WithMultipleServices (line 22) | func WithMultipleServices(np NamespacePair, name string, serviceCount in...

FILE: integration_test/itest/namespace.go
  type NamespacePair (line 21) | type NamespacePair interface
  type Namespaces (line 40) | type Namespaces struct
  type namespacesContextKey (line 45) | type namespacesContextKey struct
  function WithNamespaces (line 47) | func WithNamespaces(ctx context.Context, namespaces *Namespaces) context...
  function GetNamespaces (line 51) | func GetNamespaces(ctx context.Context) *Namespaces {
  type nsPair (line 61) | type nsPair struct
    method TelepresenceConnect (line 67) | func (s *nsPair) TelepresenceConnect(ctx context.Context, args ...stri...
    method TelepresenceTryConnect (line 75) | func (s *nsPair) TelepresenceTryConnect(ctx context.Context, args ...s...
    method setup (line 99) | func (s *nsPair) setup(ctx context.Context) bool {
    method tearDown (line 123) | func (s *nsPair) tearDown(ctx context.Context) {
    method RollbackTM (line 138) | func (s *nsPair) RollbackTM(ctx context.Context) {
    method AppNamespace (line 151) | func (s *nsPair) AppNamespace() string {
    method ManagerNamespace (line 161) | func (s *nsPair) ManagerNamespace() string {
    method ApplyEchoService (line 165) | func (s *nsPair) ApplyEchoService(ctx context.Context, name string, po...
    method ApplyApp (line 172) | func (s *nsPair) ApplyApp(ctx context.Context, name, workload string) {
    method DeleteApp (line 179) | func (s *nsPair) DeleteApp(ctx context.Context, name string) {
    method RolloutStatusWait (line 184) | func (s *nsPair) RolloutStatusWait(ctx context.Context, workload strin...
    method DeleteSvcAndWorkload (line 188) | func (s *nsPair) DeleteSvcAndWorkload(ctx context.Context, workload, n...
    method ApplyTemplate (line 193) | func (s *nsPair) ApplyTemplate(ctx context.Context, path string, value...
    method DeleteTemplate (line 197) | func (s *nsPair) DeleteTemplate(ctx context.Context, path string, valu...
    method doWithTemplate (line 206) | func (s *nsPair) doWithTemplate(ctx context.Context, action, path stri...
    method Kubectl (line 216) | func (s *nsPair) Kubectl(ctx context.Context, args ...string) error {
    method KubectlOk (line 223) | func (s *nsPair) KubectlOk(ctx context.Context, args ...string) string {
    method KubectlOut (line 230) | func (s *nsPair) KubectlOut(ctx context.Context, args ...string) (stri...
  function WithNamespacePair (line 83) | func WithNamespacePair(ctx context.Context, suffix string, f func(Namesp...
  function AppAndMgrNSName (line 117) | func AppAndMgrNSName(suffix string) (appNS, mgrNS string) {

FILE: integration_test/itest/runner.go
  type Runner (line 14) | type Runner interface
  type namedRunner (line 24) | type namedRunner struct
  type runnerKey (line 29) | type runnerKey struct
  type suffixedRunner (line 34) | type suffixedRunner struct
    method forName (line 93) | func (r *suffixedRunner) forName(key runnerKey) *namedRunner {
  type runner (line 41) | type runner struct
    method AddClusterSuite (line 54) | func (r *runner) AddClusterSuite(f func(context.Context) TestingSuite) {
    method forSuffix (line 58) | func (r *runner) forSuffix(suffix string) *suffixedRunner {
    method AddNamespacePairSuite (line 75) | func (r *runner) AddNamespacePairSuite(suffix string, f func(Namespace...
    method AddTrafficManagerSuite (line 88) | func (r *runner) AddTrafficManagerSuite(suffix string, f func(TrafficM...
    method AddConnectedSuite (line 110) | func (r *runner) AddConnectedSuite(suffix string, f func(TrafficManage...
    method AddMultipleServicesSuite (line 123) | func (r *runner) AddMultipleServicesSuite(suffix, name string, svcCoun...
    method AddSingleServiceSuite (line 136) | func (r *runner) AddSingleServiceSuite(suffix, name string, f func(ser...
    method RunTests (line 146) | func (r *runner) RunTests(c context.Context) { //nolint:gocognit
  function AddClusterSuite (line 49) | func AddClusterSuite(f func(context.Context) TestingSuite) {
  function AddNamespacePairSuite (line 69) | func AddNamespacePairSuite(suffix string, f func(NamespacePair) TestingS...
  function AddTrafficManagerSuite (line 82) | func AddTrafficManagerSuite(suffix string, f func(manager TrafficManager...
  function AddConnectedSuite (line 104) | func AddConnectedSuite(suffix string, f func(TrafficManager) TestingSuit...
  function AddMultipleServicesSuite (line 117) | func AddMultipleServicesSuite(suffix, name string, svcCount int, f func(...
  function AddSingleServiceSuite (line 130) | func AddSingleServiceSuite(suffix, name string, f func(services SingleSe...
  function RunTests (line 141) | func RunTests(c context.Context) {

FILE: integration_test/itest/single_service.go
  type SingleService (line 9) | type SingleService interface
  type singleService (line 14) | type singleService struct
    method setup (line 29) | func (h *singleService) setup(ctx context.Context) bool {
    method tearDown (line 34) | func (h *singleService) tearDown(ctx context.Context) {
    method ServiceName (line 38) | func (h *singleService) ServiceName() string {
  function WithSingleService (line 19) | func WithSingleService(h NamespacePair, serviceName string, f func(Singl...

FILE: integration_test/itest/status.go
  type StatusResponse (line 15) | type StatusResponse struct
  function TelepresenceStatus (line 29) | func TelepresenceStatus(ctx context.Context, args ...string) (*StatusRes...
  function TelepresenceStatusOk (line 63) | func TelepresenceStatusOk(ctx context.Context, args ...string) *StatusRe...

FILE: integration_test/itest/suite.go
  type TestingSuite (line 9) | type TestingSuite interface
  type Suite (line 20) | type Suite struct
    method AmendSuiteContext (line 26) | func (s *Suite) AmendSuiteContext(ctx context.Context) context.Context {
    method setContext (line 31) | func (s *Suite) setContext(ctx context.Context) {
    method Context (line 35) | func (s *Suite) Context() context.Context {
    method Assert (line 39) | func (s *Suite) Assert() *Assertions {
    method Require (line 43) | func (s *Suite) Require() *Requirements {

FILE: integration_test/itest/tempdir.go
  type tempDirBase (line 12) | type tempDirBase struct
  type tempDirBaseKey (line 17) | type tempDirBaseKey struct
  function withTempDirBase (line 19) | func withTempDirBase(ctx context.Context, td *tempDirBase) context.Conte...
  function TempDir (line 28) | func TempDir(ctx context.Context) string {

FILE: integration_test/itest/template.go
  type TplResource (line 18) | type TplResource interface
  type ContainerPort (line 23) | type ContainerPort struct
  type ServicePort (line 29) | type ServicePort struct
  type tplBase (line 36) | type tplBase struct
    method loadAndApply (line 41) | func (b *tplBase) loadAndApply(ctx context.Context, path, ns string, d...
    method Delete (line 51) | func (b *tplBase) Delete(ctx context.Context) error {
  type Generic (line 55) | type Generic struct
    method Apply (line 72) | func (g *Generic) Apply(ctx context.Context, ns string) error {
  type PersistentVolume (line 76) | type PersistentVolume struct
    method Apply (line 83) | func (p *PersistentVolume) Apply(ctx context.Context, ns string) error {
  type PersistentVolumeClaim (line 87) | type PersistentVolumeClaim struct
    method Apply (line 94) | func (r *PersistentVolumeClaim) Apply(ctx context.Context, ns string) ...
  type DisruptionBudget (line 98) | type DisruptionBudget struct
  function OpenTemplate (line 104) | func OpenTemplate(ctx context.Context, path string, data any) (io.Reader...
  function ReadTemplate (line 112) | func ReadTemplate(ctx context.Context, path string, data any) ([]byte, e...
  function EvalTemplate (line 126) | func EvalTemplate(content string, data any) ([]byte, error) {
  function toYAML (line 141) | func toYAML(v interface{}) string {

FILE: integration_test/itest/timed.go
  function TimedRun (line 10) | func TimedRun(ctx context.Context, maxDuration time.Duration, function f...

FILE: integration_test/itest/traffic_manager.go
  type TrafficManager (line 39) | type TrafficManager interface
  type trafficManager (line 46) | type trafficManager struct
    method setup (line 61) | func (th *trafficManager) setup(ctx context.Context) bool {
    method tearDown (line 68) | func (th *trafficManager) tearDown(ctx context.Context) {
    method trafficManagerConnection (line 72) | func (th *trafficManager) trafficManagerConnection(ctx context.Context...
    method DoWithTrafficManager (line 102) | func (th *trafficManager) DoWithTrafficManager(ctx context.Context, f ...
    method NewConnectRequest (line 149) | func (th *trafficManager) NewConnectRequest(ctx context.Context) *rpc....
    method DoWithSession (line 168) | func (th *trafficManager) DoWithSession(ctx context.Context, cr *rpc.C...
  function WithTrafficManager (line 50) | func WithTrafficManager(np NamespacePair, f func(ctx context.Context, ch...
  function dialTrafficManager (line 80) | func dialTrafficManager(ctx context.Context, cfg *rest.Config, managerNa...

FILE: integration_test/kubeauth_test.go
  method Test_ConnectWithKubeconfigExec (line 20) | func (s *notConnectedSuite) Test_ConnectWithKubeconfigExec() {
  method makeKubeConfigWithExec (line 80) | func (s *notConnectedSuite) makeKubeConfigWithExec() (string, *api.Confi...

FILE: integration_test/kubeconfig_extension_test.go
  function getClusterIPs (line 30) | func getClusterIPs(cluster *api.Cluster) ([]netip.Addr, error) {
  method Test_APIServerIsProxied (line 52) | func (s *notConnectedSuite) Test_APIServerIsProxied() {
  method Test_NeverProxy (line 107) | func (s *notConnectedSuite) Test_NeverProxy() {
  method Test_ConflictingProxies (line 171) | func (s *notConnectedSuite) Test_ConflictingProxies() {
  method Test_AlsoNeverProxyDocker (line 233) | func (s *notConnectedSuite) Test_AlsoNeverProxyDocker() {
  method Test_DNSSuffixRules (line 262) | func (s *notConnectedSuite) Test_DNSSuffixRules() {

FILE: integration_test/large_files_test.go
  type largeFilesSuite (line 25) | type largeFilesSuite struct
    method SuiteName (line 35) | func (s *largeFilesSuite) SuiteName() string {
    method Name (line 58) | func (s *largeFilesSuite) Name() string {
    method ServiceCount (line 62) | func (s *largeFilesSuite) ServiceCount() int {
    method SetupSuite (line 66) | func (s *largeFilesSuite) SetupSuite() {
    method TearDownSuite (line 131) | func (s *largeFilesSuite) TearDownSuite() {
    method createIntercepts (line 148) | func (s *largeFilesSuite) createIntercepts(ctx context.Context) {
    method leaveIntercepts (line 177) | func (s *largeFilesSuite) leaveIntercepts(ctx context.Context) {
    method Test_LargeFileIntercepts_fuseftp (line 183) | func (s *largeFilesSuite) Test_LargeFileIntercepts_fuseftp() {
    method Test_LargeFileIntercepts_sshfs (line 192) | func (s *largeFilesSuite) Test_LargeFileIntercepts_sshfs() {
    method largeFileIntercepts (line 199) | func (s *largeFilesSuite) largeFileIntercepts(ctx context.Context) {
    method createLargeFile (line 266) | func (s *largeFilesSuite) createLargeFile(dir string, sz int) (string,...
  constant svcCount (line 40) | svcCount        = 4
  constant fileSize (line 41) | fileSize        = 100 * 1024 * 1024
  constant fileCountPerSvc (line 42) | fileCountPerSvc = 3
  function init (line 45) | func init() {
  function validateLargeFile (line 299) | func validateLargeFile(name string, sz int) error {

FILE: integration_test/limitrange_test.go
  method limitedRangeTest (line 16) | func (is *installSuite) limitedRangeTest() {
  method TestLimitRange (line 64) | func (is *installSuite) TestLimitRange() {

FILE: integration_test/list_watch_test.go
  method Test_ListWatch (line 10) | func (s *connectedSuite) Test_ListWatch() {

FILE: integration_test/loglevel_test.go
  method Test_RootDaemonLogLevel (line 13) | func (s *notConnectedSuite) Test_RootDaemonLogLevel() {

FILE: integration_test/manager_grpc_test.go
  type managerGRPCSuite (line 15) | type managerGRPCSuite struct
    method SuiteName (line 22) | func (m *managerGRPCSuite) SuiteName() string {
    method SetupSuite (line 32) | func (m *managerGRPCSuite) SetupSuite() {
    method TearDownSuite (line 49) | func (m *managerGRPCSuite) TearDownSuite() {
    method Test_ClusterInfo (line 56) | func (m *managerGRPCSuite) Test_ClusterInfo() {
  function init (line 26) | func init() {

FILE: integration_test/manual_agent_test.go
  method Test_ManualAgent (line 20) | func (s *notConnectedSuite) Test_ManualAgent() {
  function testManualAgent (line 24) | func testManualAgent(s *itest.Suite, nsp itest.NamespacePair) {

FILE: integration_test/mounts_test.go
  type mountsSuite (line 15) | type mountsSuite struct
    method SuiteName (line 20) | func (s *mountsSuite) SuiteName() string {
    method SetupSuite (line 33) | func (s *mountsSuite) SetupSuite() {
    method createDeployment (line 41) | func (s *mountsSuite) createDeployment() [3]itest.TplResource {
    method deleteDeployment (line 91) | func (s *mountsSuite) deleteDeployment(ts [3]itest.TplResource) {
    method Test_MountWrite (line 98) | func (s *mountsSuite) Test_MountWrite() {
    method Test_MountReadOnly (line 128) | func (s *mountsSuite) Test_MountReadOnly() {
    method Test_CollidingMounts (line 145) | func (s *mountsSuite) Test_CollidingMounts() {
  function init (line 24) | func init() {

FILE: integration_test/multi_connect_test.go
  type multiConnectSuite (line 27) | type multiConnectSuite struct
    method SuiteName (line 35) | func (s *multiConnectSuite) SuiteName() string {
    method SetupSuite (line 46) | func (s *multiConnectSuite) SetupSuite() {
    method AmendSuiteContext (line 105) | func (s *multiConnectSuite) AmendSuiteContext(ctx context.Context) con...
    method TearDownSuite (line 111) | func (s *multiConnectSuite) TearDownSuite() {
    method Test_MultipleConnect (line 117) | func (s *multiConnectSuite) Test_MultipleConnect() {
    method Test_MultipleConnect_named (line 133) | func (s *multiConnectSuite) Test_MultipleConnect_named() {
    method Test_MultipleConnect_sameNamespace (line 151) | func (s *multiConnectSuite) Test_MultipleConnect_sameNamespace() {
    method doubleConnectCheck (line 166) | func (s *multiConnectSuite) doubleConnectCheck(ctx1, ctx2 context.Cont...
  function init (line 39) | func init() {

FILE: integration_test/multiple_intercepts_test.go
  type multipleInterceptsSuite (line 18) | type multipleInterceptsSuite struct
    method SuiteName (line 25) | func (s *multipleInterceptsSuite) SuiteName() string {
    method SetupSuite (line 40) | func (s *multipleInterceptsSuite) SetupSuite() {
    method TearDownSuite (line 61) | func (s *multipleInterceptsSuite) TearDownSuite() {
    method Test_Intercepts (line 84) | func (s *multipleInterceptsSuite) Test_Intercepts() {
    method Test_ReportsPortConflict (line 145) | func (s *multipleInterceptsSuite) Test_ReportsPortConflict() {
  function init (line 29) | func init() {

FILE: integration_test/multiple_port_intercept_test.go
  type multiportInterceptSuite (line 15) | type multiportInterceptSuite struct
    method SuiteName (line 24) | func (s *multiportInterceptSuite) SuiteName() string {
    method SetupSuite (line 39) | func (s *multiportInterceptSuite) SetupSuite() {
    method TearDownSuite (line 61) | func (s *multiportInterceptSuite) TearDownSuite() {
    method Test_MultiPortIntercept (line 72) | func (s *multiportInterceptSuite) Test_MultiPortIntercept() {
    method Test_MultiPortLocalConflict (line 115) | func (s *multiportInterceptSuite) Test_MultiPortLocalConflict() {
    method Test_MultiPortRemoteConflict (line 131) | func (s *multiportInterceptSuite) Test_MultiPortRemoteConflict() {
  function init (line 28) | func init() {

FILE: integration_test/multiple_services_test.go
  type multipleServicesSuite (line 19) | type multipleServicesSuite struct
    method SuiteName (line 24) | func (s *multipleServicesSuite) SuiteName() string {
    method Test_LargeRequest (line 34) | func (s *multipleServicesSuite) Test_LargeRequest() {
    method Test_List (line 114) | func (s *multipleServicesSuite) Test_List() {
    method Test_ListOnlyMapped (line 121) | func (s *multipleServicesSuite) Test_ListOnlyMapped() {
    method Test_RepeatedConnect (line 141) | func (s *multipleServicesSuite) Test_RepeatedConnect() {
    method Test_ProxiesOutboundTraffic (line 171) | func (s *multipleServicesSuite) Test_ProxiesOutboundTraffic() {
  function init (line 28) | func init() {

FILE: integration_test/multiport_test.go
  method Test_MultipleUnnamedServicePorts (line 17) | func (s *connectedSuite) Test_MultipleUnnamedServicePorts() {
  method Test_NoContainerPort (line 66) | func (s *connectedSuite) Test_NoContainerPort() {
  method Test_UnnamedUdpAndTcpPort (line 95) | func (s *connectedSuite) Test_UnnamedUdpAndTcpPort() {
  method Test_SameContainerPort (line 195) | func (s *connectedSuite) Test_SameContainerPort() {

FILE: integration_test/namespaces_test.go
  type nsSuite (line 16) | type nsSuite struct
    method SuiteName (line 21) | func (s *nsSuite) SuiteName() string {
    method SetupSuite (line 47) | func (s *nsSuite) SetupSuite() {
    method AmendSuiteContext (line 116) | func (s *nsSuite) AmendSuiteContext(ctx context.Context) context.Conte...
    method managerNamespace (line 120) | func (s *nsSuite) managerNamespace() string {
    method TearDownSuite (line 124) | func (s *nsSuite) TearDownSuite() {
    method Test_NamespacesClusterWide (line 137) | func (s *nsSuite) Test_NamespacesClusterWide() {
    method Test_NamespacesDynamic (line 152) | func (s *nsSuite) Test_NamespacesDynamic() {
    method Test_NamespacesStatic (line 269) | func (s *nsSuite) Test_NamespacesStatic() {
  function init (line 25) | func init() {
  constant namespaceTpl (line 31) | namespaceTpl = `
  type namespaceData (line 42) | type namespaceData struct

FILE: integration_test/not_connected_test.go
  type notConnectedSuite (line 15) | type notConnectedSuite struct
    method SuiteName (line 20) | func (s *notConnectedSuite) SuiteName() string {
    method TearDownTest (line 30) | func (s *notConnectedSuite) TearDownTest() {
    method Test_ConnectWithCommand (line 34) | func (s *notConnectedSuite) Test_ConnectWithCommand() {
    method Test_InvalidKubeconfig (line 42) | func (s *notConnectedSuite) Test_InvalidKubeconfig() {
    method Test_NonExistentContext (line 54) | func (s *notConnectedSuite) Test_NonExistentContext() {
    method Test_ConnectingToOtherNamespace (line 61) | func (s *notConnectedSuite) Test_ConnectingToOtherNamespace() {
    method Test_ReportsNotConnected (line 109) | func (s *notConnectedSuite) Test_ReportsNotConnected() {
    method Test_CreateAndRunIndividualPod (line 122) | func (s *notConnectedSuite) Test_CreateAndRunIndividualPod() {
  function init (line 24) | func init() {

FILE: integration_test/otel_test.go
  type otelSuite (line 13) | type otelSuite struct
    method SuiteName (line 18) | func (s *otelSuite) SuiteName() string {
    method SetupSuite (line 28) | func (s *otelSuite) SetupSuite() {
    method TearDownSuite (line 91) | func (s *otelSuite) TearDownSuite() {
  function init (line 22) | func init() {

FILE: integration_test/pod_cidr_test.go
  type podCIDRSuite (line 14) | type podCIDRSuite struct
    method SuiteName (line 19) | func (s *podCIDRSuite) SuiteName() string {
    method Test_PodCIDRStrategy (line 29) | func (s *podCIDRSuite) Test_PodCIDRStrategy() {
  function init (line 23) | func init() {

FILE: integration_test/podscaling_test.go
  method Test_RestartInterceptedPod (line 20) | func (s *interceptMountSuite) Test_RestartInterceptedPod() {
  method Test_StopInterceptedPodOfMany (line 89) | func (s *interceptMountSuite) Test_StopInterceptedPodOfMany() {
  method runningPods (line 180) | func (s *interceptMountSuite) runningPods(ctx context.Context) []string {

FILE: integration_test/proxy_via_test.go
  type proxyViaSuite (line 22) | type proxyViaSuite struct
    method SuiteName (line 27) | func (s *proxyViaSuite) SuiteName() string {
    method SetupSuite (line 43) | func (s *proxyViaSuite) SetupSuite() {
    method TearDownSuite (line 62) | func (s *proxyViaSuite) TearDownSuite() {
    method Test_ProxyViaLoopBack (line 66) | func (s *proxyViaSuite) Test_ProxyViaLoopBack() {
    method Test_ProxyViaEverything (line 134) | func (s *proxyViaSuite) Test_ProxyViaEverything() {
    method Test_ProxyViaAll (line 167) | func (s *proxyViaSuite) Test_ProxyViaAll() {
    method Test_ProxyViaAllAndMounts (line 188) | func (s *proxyViaSuite) Test_ProxyViaAllAndMounts() {
    method Test_NeverProxySubnetIsOmitted (line 229) | func (s *proxyViaSuite) Test_NeverProxySubnetIsOmitted() {
  function init (line 31) | func init() {
  constant domain (line 38) | domain   = "mydomain.local"
  constant alias (line 39) | alias    = "echo-home"
  constant fqnAlias (line 40) | fqnAlias = alias + "." + domain

FILE: integration_test/reconnect_session_test.go
  type reconnectSuite (line 16) | type reconnectSuite struct
    method SuiteName (line 23) | func (s *reconnectSuite) SuiteName() string {
    method SetupSuite (line 38) | func (s *reconnectSuite) SetupSuite() {
    method TearDownSuite (line 55) | func (s *reconnectSuite) TearDownSuite() {
    method Test_ReconnectAfterNetworkFailure (line 61) | func (s *reconnectSuite) Test_ReconnectAfterNetworkFailure() {
  function init (line 27) | func init() {

FILE: integration_test/replace_test.go
  type replaceSuite (line 15) | type replaceSuite struct
    method SuiteName (line 23) | func (s *replaceSuite) SuiteName() string {
    method SetupSuite (line 33) | func (s *replaceSuite) SetupSuite() {
    method TearDownSuite (line 89) | func (s *replaceSuite) TearDownSuite() {
    method Test_ReplaceWithMultiContainerPorts (line 93) | func (s *replaceSuite) Test_ReplaceWithMultiContainerPorts() {
  function init (line 27) | func init() {

FILE: integration_test/restapi_test.go
  type request (line 22) | type request struct
  type restAPISuite (line 29) | type restAPISuite struct
    method SuiteName (line 39) | func (s *restAPISuite) SuiteName() string {
    method SetupSuite (line 57) | func (s *restAPISuite) SetupSuite() {
    method TearDownSuite (line 114) | func (s *restAPISuite) TearDownSuite() {
    method AmendSuiteContext (line 121) | func (s *restAPISuite) AmendSuiteContext(ctx context.Context) context....
    method curlAPIServer (line 127) | func (s *restAPISuite) curlAPIServer(ctx context.Context, port uint16,...
    method startIntercept (line 152) | func (s *restAPISuite) startIntercept(ctx context.Context, meta, heade...
    method waitForInterceptReady (line 176) | func (s *restAPISuite) waitForInterceptReady(ctx context.Context, errC...
    method Test_RestAPI_GlobalConsume (line 201) | func (s *restAPISuite) Test_RestAPI_GlobalConsume() {
    method Test_RestAPI_GlobalInfo (line 241) | func (s *restAPISuite) Test_RestAPI_GlobalInfo() {
    method Test_RestAPI_FilteredConsume (line 286) | func (s *restAPISuite) Test_RestAPI_FilteredConsume() {
    method Test_RestAPI_FilteredInfo (line 357) | func (s *restAPISuite) Test_RestAPI_FilteredInfo() {
  function init (line 43) | func init() {

FILE: integration_test/single_service_test.go
  type singleServiceSuite (line 7) | type singleServiceSuite struct
    method SuiteName (line 12) | func (s *singleServiceSuite) SuiteName() string {
  function init (line 16) | func init() {

FILE: integration_test/subdomain_test.go
  method Test_PodWithSubdomain (line 11) | func (s *connectedSuite) Test_PodWithSubdomain() {

FILE: integration_test/svcdomain_test.go
  method Test_SvcDomain (line 12) | func (s *connectedSuite) Test_SvcDomain() {

FILE: integration_test/testdata/apiserveraccess/main.go
  function main (line 35) | func main() {
  function run (line 60) | func run(c context.Context) error {
  constant interceptIdEnv (line 119) | interceptIdEnv = "TELEPRESENCE_INTERCEPT_ID"
  function apiURL (line 122) | func apiURL() (string, error) {
  function doRequest (line 131) | func doRequest(c context.Context, rqUrl string, path string, hm map[stri...
  function intercepted (line 157) | func intercepted(c context.Context, url string, path string, w http.Resp...

FILE: integration_test/testdata/count-server/main.go
  function main (line 10) | func main() {

FILE: integration_test/testdata/echo-server/main.go
  type request (line 23) | type request struct
  function main (line 30) | func main() {
  function echoHandler (line 143) | func echoHandler(wr http.ResponseWriter, req *http.Request, outLog, errL...
  function forwardHandler (line 184) | func forwardHandler(wr http.ResponseWriter, req *http.Request, outLog, e...
  function writeAndLogf (line 237) | func writeAndLogf(w *bytes.Buffer, outLog *log.Logger, format string, ar...

FILE: integration_test/testdata/k8screds/main.go
  function main (line 20) | func main() {
  function run (line 27) | func run(args []string) error {
  function resolveCreds (line 77) | func resolveCreds(ai *api.AuthInfo, cl *api.Cluster) ([]byte, error) {
  function resolveExec (line 113) | func resolveExec(execConfig *api.ExecConfig) ([]byte, error) {

FILE: integration_test/testdata/stdiotest/main.go
  type runner (line 11) | type runner struct
    method run (line 33) | func (r runner) run(cmd *cobra.Command, args []string) error {
  function main (line 16) | func main() {

FILE: integration_test/testdata/udp-echo/main.go
  function main (line 11) | func main() {
  function serveConnection (line 40) | func serveConnection(pc net.PacketConn) error {

FILE: integration_test/tls_test.go
  method Test_TLSAnnotations (line 20) | func (s *dockerDaemonSuite) Test_TLSAnnotations() {

FILE: integration_test/to_pod_test.go
  method Test_ToPodPortForwarding (line 13) | func (s *connectedSuite) Test_ToPodPortForwarding() {
  method Test_ToPodUDPPortForwarding (line 53) | func (s *connectedSuite) Test_ToPodUDPPortForwarding() {

FILE: integration_test/udp_test.go
  method TestUDPEcho (line 13) | func (s *connectedSuite) TestUDPEcho() {

FILE: integration_test/uhn_dns_test.go
  type unqualifiedHostNameDNSSuite (line 17) | type unqualifiedHostNameDNSSuite struct
    method SuiteName (line 22) | func (s *unqualifiedHostNameDNSSuite) SuiteName() string {
    method TearDownTest (line 32) | func (s *unqualifiedHostNameDNSSuite) TearDownTest() {
    method Test_UHNExcludes (line 36) | func (s *unqualifiedHostNameDNSSuite) Test_UHNExcludes() {
    method Test_UHNMappings (line 76) | func (s *unqualifiedHostNameDNSSuite) Test_UHNMappings() {
  function init (line 26) | func init() {

FILE: integration_test/uninstall_test.go
  method Test_Uninstall (line 14) | func (s *notConnectedSuite) Test_Uninstall() {

FILE: integration_test/webhook_test.go
  type webhookSuite (line 12) | type webhookSuite struct
    method SuiteName (line 17) | func (s *webhookSuite) SuiteName() string {
    method Test_AutoInjectedAgent (line 27) | func (s *webhookSuite) Test_AutoInjectedAgent() {
  function init (line 21) | func init() {
  method Test_AgentImageFromConfig (line 53) | func (s *notConnectedSuite) Test_AgentImageFromConfig() {

FILE: integration_test/wiretap_test.go
  type wiretapSuite (line 22) | type wiretapSuite struct
    method SuiteName (line 31) | func (s *wiretapSuite) SuiteName() string {
    method SetupSuite (line 41) | func (s *wiretapSuite) SetupSuite() {
    method TearDownSuite (line 71) | func (s *wiretapSuite) TearDownSuite() {
    method startWiretapHandler (line 75) | func (s *wiretapSuite) startWiretapHandler(ctx context.Context, name, ...
    method Test_MultipleTapsOnOnePort (line 107) | func (s *wiretapSuite) Test_MultipleTapsOnOnePort() { //nolint:gocognit
  function init (line 35) | func init() {

FILE: integration_test/workload_configuration_test.go
  type workloadConfigurationSuite (line 12) | type workloadConfigurationSuite struct
    method SuiteName (line 17) | func (s *workloadConfigurationSuite) SuiteName() string {
    method disabledWorkloadKind (line 27) | func (s *workloadConfigurationSuite) disabledWorkloadKind(tp, wl strin...
    method Test_DisabledReplicaSet (line 48) | func (s *workloadConfigurationSuite) Test_DisabledReplicaSet() {
    method Test_DisabledStatefulSet (line 54) | func (s *workloadConfigurationSuite) Test_DisabledStatefulSet() {
    method Test_InterceptsDeploymentWithDisabledReplicaSets (line 60) | func (s *workloadConfigurationSuite) Test_InterceptsDeploymentWithDisa...
    method Test_InterceptsReplicaSetWithDisabledDeployments (line 95) | func (s *workloadConfigurationSuite) Test_InterceptsReplicaSetWithDisa...
  function init (line 21) | func init() {

FILE: integration_test/workload_watch_test.go
  method createIntercept (line 13) | func (s *notConnectedSuite) createIntercept(ctx context.Context, client ...
  method Test_WorkloadListener (line 50) | func (s *notConnectedSuite) Test_WorkloadListener() {

FILE: integration_test/workloads_test.go
  method uninstall (line 15) | func (s *connectedSuite) uninstall(wl string) {
  method successfulIntercept (line 29) | func (s *connectedSuite) successfulIntercept(tp, wl, port string) {
  method doIntercept (line 58) | func (s *connectedSuite) doIntercept(tp, wl, port string) {
  method successfulIngest (line 93) | func (s *connectedSuite) successfulIngest(tp, wl string) {
  method Test_SuccessfullyInterceptsDeploymentWithProbes (line 127) | func (s *connectedSuite) Test_SuccessfullyInterceptsDeploymentWithProbes...
  method Test_SuccessfullyInterceptsReplicaSet (line 131) | func (s *connectedSuite) Test_SuccessfullyInterceptsReplicaSet() {
  method Test_SuccessfullyInterceptsStatefulSet (line 135) | func (s *connectedSuite) Test_SuccessfullyInterceptsStatefulSet() {
  method Test_SuccessfullyInterceptsDeploymentWithNoVolumes (line 142) | func (s *connectedSuite) Test_SuccessfullyInterceptsDeploymentWithNoVolu...
  method Test_SuccessfullyInterceptsDeploymentWithoutService (line 146) | func (s *connectedSuite) Test_SuccessfullyInterceptsDeploymentWithoutSer...
  method Test_SuccessfullyIngestsDeploymentWithProbes (line 150) | func (s *connectedSuite) Test_SuccessfullyIngestsDeploymentWithProbes() {
  method Test_SuccessfullyIngestsReplicaSet (line 154) | func (s *connectedSuite) Test_SuccessfullyIngestsReplicaSet() {
  method Test_SuccessfullyIngestsStatefulSet (line 158) | func (s *connectedSuite) Test_SuccessfullyIngestsStatefulSet() {
  method Test_SuccessfullyIngestsDeploymentWithNoVolumes (line 165) | func (s *connectedSuite) Test_SuccessfullyIngestsDeploymentWithNoVolumes...
  method Test_SuccessfullyIngestsDeploymentWithoutService (line 169) | func (s *connectedSuite) Test_SuccessfullyIngestsDeploymentWithoutServic...

FILE: integration_test/wpad_test.go
  method Test_WpadNotForwarded (line 18) | func (s *connectedSuite) Test_WpadNotForwarded() {

FILE: packaging/helmpackage.go
  type sv (line 13) | type sv
    method String (line 15) | func (v *sv) String() string {
    method Set (line 19) | func (v *sv) Set(s string) error {
  function main (line 27) | func main() {
  function packageHelmChart (line 39) | func packageHelmChart(filename string, version semver.Version) error {

FILE: packaging/homebrew-oss-formula.rb
  class Formula (line 3) | class __FORMULA_NAME__ < Formula
    method install (line 23) | def install

FILE: pkg/agentconfig/container.go
  type ContainerBuilder (line 19) | type ContainerBuilder struct
    method AgentContainer (line 26) | func (a *ContainerBuilder) AgentContainer(ctx context.Context) (*core....
    method mountSecrets (line 198) | func (a *ContainerBuilder) mountSecrets(annotation, certPath string, a...
    method firstAppSecurityContext (line 245) | func (a *ContainerBuilder) firstAppSecurityContext() (*core.SecurityCo...
    method configuredContainers (line 275) | func (a *ContainerBuilder) configuredContainers(ctx context.Context) [...
    method eachConfiguredContainer (line 302) | func (a *ContainerBuilder) eachConfiguredContainer(configureContainers...
  function annotationPrefixedPorts (line 218) | func annotationPrefixedPorts(anns map[string]string, prefix string) (m m...
  function prefixInterpolated (line 313) | func prefixInterpolated(str, pfx string) string {
  function appendAppContainerEnv (line 378) | func appendAppContainerEnv(app *core.Container, cc *Container, es []core...
  function appendAppContainerEnvFrom (line 389) | func appendAppContainerEnvFrom(app *core.Container, cc *Container, es []...

FILE: pkg/agentconfig/container_test.go
  function Test_prefixInterpolated (line 7) | func Test_prefixInterpolated(t *testing.T) {

FILE: pkg/agentconfig/initcontainer.go
  function InitContainer (line 11) | func InitContainer(config *Sidecar) *core.Container {

FILE: pkg/agentconfig/injectpolicy.go
  type InjectPolicy (line 9) | type InjectPolicy
    method String (line 34) | func (aps InjectPolicy) String() string {
    method MarshalJSON (line 47) | func (aps InjectPolicy) MarshalJSON() ([]byte, error) {
    method EnvDecode (line 52) | func (aps *InjectPolicy) EnvDecode(val string) (err error) {
    method UnmarshalText (line 64) | func (aps *InjectPolicy) UnmarshalText(value []byte) error {
    method UnmarshalJSON (line 69) | func (aps *InjectPolicy) UnmarshalJSON(value []byte) error {
  constant OnDemand (line 23) | OnDemand InjectPolicy = iota
  constant WhenEnabled (line 28) | WhenEnabled
  constant Never (line 31) | Never
  function NewEnablePolicy (line 38) | func NewEnablePolicy(s string) (InjectPolicy, error) {

FILE: pkg/agentconfig/intercepttarget.go
  type InterceptTarget (line 21) | type InterceptTarget
    method MatchForSpec (line 41) | func (cp InterceptTarget) MatchForSpec(spec *manager.InterceptSpec) bo...
    method AgentPort (line 47) | func (cp InterceptTarget) AgentPort() uint16 {
    method TargetPortNumeric (line 51) | func (cp InterceptTarget) TargetPortNumeric() bool {
    method ContainerPort (line 60) | func (cp InterceptTarget) ContainerPort() uint16 {
    method ContainerPortName (line 64) | func (cp InterceptTarget) ContainerPortName() string {
    method Protocol (line 68) | func (cp InterceptTarget) Protocol() types.Proto {
    method AppProtocol (line 87) | func (cp InterceptTarget) AppProtocol(ctx context.Context) (proto stri...
    method HasServicePortName (line 106) | func (cp InterceptTarget) HasServicePortName(name string) bool {
    method HasServicePort (line 115) | func (cp InterceptTarget) HasServicePort(port uint16) bool {
    method String (line 124) | func (cp InterceptTarget) String() string {
  function NewInterceptTarget (line 23) | func NewInterceptTarget(ics []*Intercept) InterceptTarget {
  function portString (line 72) | func portString(ic *Intercept) (s string) {

FILE: pkg/agentconfig/sidecar.go
  constant ContainerName (line 20) | ContainerName           = "traffic-agent"
  constant ManagerAppName (line 21) | ManagerAppName          = "traffic-manager"
  constant InitContainerName (line 22) | InitContainerName       = "tel-agent-init"
  constant MountPrefixApp (line 23) | MountPrefixApp          = "/tel_app_mounts"
  constant ExportsVolumeName (line 24) | ExportsVolumeName       = "export-volume"
  constant ExportsMountPoint (line 25) | ExportsMountPoint       = "/tel_app_exports"
  constant TempVolumeName (line 26) | TempVolumeName          = "tel-agent-tmp"
  constant TempMountPoint (line 27) | TempMountPoint          = "/tmp"
  constant EnvPrefix (line 28) | EnvPrefix               = "_TEL_"
  constant EnvPrefixAgent (line 29) | EnvPrefixAgent          = EnvPrefix + "AGENT_"
  constant EnvPrefixApp (line 30) | EnvPrefixApp            = EnvPrefix + "APP_"
  constant PodInfoVolumeName (line 31) | PodInfoVolumeName       = "pod-info"
  constant PodInfoMountPath (line 32) | PodInfoMountPath        = "/etc/podinfo"
  constant DownstreamTLSVolumeName (line 33) | DownstreamTLSVolumeName = "downstream-tls"
  constant DownstreamTLSVolumePath (line 34) | DownstreamTLSVolumePath = "/downstream-tls"
  constant UpstreamTLSVolumeName (line 35) | UpstreamTLSVolumeName   = "upstream-tls"
  constant UpstreamTLSVolumePath (line 36) | UpstreamTLSVolumePath   = "/upstream-tls"
  constant EnvAgentConfig (line 39) | EnvAgentConfig = "AGENT_CONFIG"
  constant EnvInterceptContainer (line 42) | EnvInterceptContainer = "TELEPRESENCE_CONTAINER"
  constant EnvInterceptMounts (line 45) | EnvInterceptMounts = "TELEPRESENCE_MOUNTS"
  constant EnvLocalMounts (line 48) | EnvLocalMounts = "TELEPRESENCE_LOCAL_MOUNTS"
  constant EnvAPIHost (line 51) | EnvAPIHost = "TELEPRESENCE_API_HOST"
  constant EnvAPIPort (line 54) | EnvAPIPort = "TELEPRESENCE_API_PORT"
  constant WorkloadNameLabel (line 56) | WorkloadNameLabel    = annotation.DomainPrefix + "workloadName"
  constant WorkloadKindLabel (line 57) | WorkloadKindLabel    = annotation.DomainPrefix + "workloadKind"
  constant WorkloadEnabledLabel (line 58) | WorkloadEnabledLabel = annotation.DomainPrefix + "workloadEnabled"
  type ReplacePolicy (line 61) | type ReplacePolicy
  constant ReplacePolicyIntercept (line 68) | ReplacePolicyIntercept ReplacePolicy = iota
  constant ReplacePolicyContainer (line 72) | ReplacePolicyContainer
  constant ReplacePolicyInactive (line 75) | ReplacePolicyInactive
  type Intercept (line 80) | type Intercept struct
  type Container (line 116) | type Container struct
  type Sidecar (line 144) | type Sidecar struct
    method InterceptTarget (line 217) | func (s *Sidecar) InterceptTarget(containerPort uint16, proto types.Pr...
    method InterceptorInactivePort (line 247) | func (s *Sidecar) InterceptorInactivePort(containerPort uint16, proto ...
    method Clone (line 256) | func (s *Sidecar) Clone() *Sidecar {
    method EachContainer (line 271) | func (s *Sidecar) EachContainer(pod *core.Pod, f func(*core.Container,...
    method FindIntercept (line 285) | func (s *Sidecar) FindIntercept(serviceName, containerName string, por...
    method Marshal (line 353) | func (s *Sidecar) Marshal() ([]byte, error) {
  function UnmarshalYAML (line 358) | func UnmarshalYAML(data []byte) (*Sidecar, error) {
  function MarshalTight (line 372) | func MarshalTight(ac *Sidecar) (string, error) {
  function UnmarshalJSON (line 403) | func UnmarshalJSON(data string) (*Sidecar, error) {

FILE: pkg/agentconfig/util.go
  function IsInterceptForService (line 7) | func IsInterceptForService(pi types.PortIdentifier, ic *Intercept) bool {
  function IsInterceptForContainer (line 20) | func IsInterceptForContainer(pi types.PortIdentifier, ic *Intercept) bool {
  function PortUniqueIntercepts (line 35) | func PortUniqueIntercepts(cn *Container) []*Intercept {
  method ProxyPort (line 51) | func (s *Sidecar) ProxyPort(agentPort uint16) uint16 {
  method numberOfPossibleIntercepts (line 55) | func (s *Sidecar) numberOfPossibleIntercepts() (count int) {

FILE: pkg/agentconfig/volumes.go
  function AgentVolumes (line 15) | func AgentVolumes(agentName string, pod *core.Pod) (volumes []core.Volum...
  function appendSecretVolume (line 63) | func appendSecretVolume(env dos.Env, annotation string, pod *core.Pod, v...
  method appendVolumeMounts (line 81) | func (a *ContainerBuilder) appendVolumeMounts(app *core.Container, cc *C...

FILE: pkg/agentmap/capsbase26.go
  function CapsBase26 (line 4) | func CapsBase26(v uint64) string {
  function Base26 (line 9) | func Base26(v uint64) string {
  function addBase26 (line 14) | func addBase26(c byte, v uint64) string {

FILE: pkg/agentmap/capsbase26_test.go
  function TestCapsBase26 (line 10) | func TestCapsBase26(t *testing.T) {

FILE: pkg/agentmap/discorvery.go
  type WorkloadOwnerNotFoundError (line 27) | type WorkloadOwnerNotFoundError struct
  function FindOwnerWorkload (line 31) | func FindOwnerWorkload(ctx context.Context, obj k8sapi.Object, supported...
  function GetWorkload (line 75) | func GetWorkload(ctx context.Context, name, namespace string, workloadKi...
  function getWorkload (line 86) | func getWorkload(ai apps.Interface, ri argorollouts.RolloutInformer, nam...
  function getDeployment (line 111) | func getDeployment(ai apps.Interface, name, namespace string) (wl k8sapi...
  function getRollout (line 119) | func getRollout(ri argorollouts.RolloutInformer, name, namespace string)...
  function getReplicaSet (line 130) | func getReplicaSet(ai apps.Interface, name, namespace string) (k8sapi.Wo...
  function getStatefulSet (line 138) | func getStatefulSet(ai apps.Interface, name, namespace string) (k8sapi.W...
  function FindServicesForPod (line 146) | func FindServicesForPod(ctx context.Context, pod *core.PodTemplateSpec, ...
  type objectsStringer (line 174) | type objectsStringer
    method String (line 176) | func (os objectsStringer) String() string {
  function findServicesSelecting (line 197) | func findServicesSelecting(ctx context.Context, namespace string, lbs la...
  function findContainerMatchingPort (line 249) | func findContainerMatchingPort(port *core.ServicePort, cns []core.Contai...
  function IsPodRunning (line 299) | func IsPodRunning(pod *core.Pod) bool {
  function AgentContainer (line 310) | func AgentContainer(pod *core.Pod) *core.Container {
  function InitContainer (line 315) | func InitContainer(pod *core.Pod) *core.Container {
  function containerByName (line 319) | func containerByName(name string, cns []core.Container) *core.Container {

FILE: pkg/agentmap/generator.go
  type GeneratorConfig (line 28) | type GeneratorConfig struct
    method Generate (line 87) | func (cfg *GeneratorConfig) Generate(
    method appendAgentContainerConfigs (line 196) | func (cfg *GeneratorConfig) appendAgentContainerConfigs(
    method newContainerConfig (line 249) | func (cfg *GeneratorConfig) newContainerConfig(cn *core.Container, ind...
    method appendServiceLessAgentContainerConfigs (line 302) | func (cfg *GeneratorConfig) appendServiceLessAgentContainerConfigs(
  function portsFromContainerPortsAnnotation (line 48) | func portsFromContainerPortsAnnotation(ctx context.Context, wl k8sapi.Wo...
  function portsFromAnnotationValue (line 74) | func portsFromAnnotationValue(wl k8sapi.Workload, annotation, value stri...
  function findContainerPort (line 285) | func findContainerPort(cns []core.Container, p types.PortIdentifier) (*c...
  function containerReplacePolicy (line 358) | func containerReplacePolicy(existingConfig *agentconfig.Sidecar, cn *cor...
  function filterServicePorts (line 374) | func filterServicePorts(svc *core.Service, portAnnotations []types.PortI...

FILE: pkg/annotation/annotation.go
  constant DomainPrefix (line 10) | DomainPrefix = "telepresence.io/"
  constant Config (line 12) | Config                     = DomainPrefix + "agent-config"
  constant InjectContainerPorts (line 13) | InjectContainerPorts       = DomainPrefix + "inject-container-ports"
  constant InjectIgnoreVolumeMounts (line 14) | InjectIgnoreVolumeMounts   = DomainPrefix + "inject-ignore-volume-mounts"
  constant InjectServiceName (line 15) | InjectServiceName          = DomainPrefix + "inject-service-name"
  constant InjectServicePorts (line 16) | InjectServicePorts         = DomainPrefix + "inject-service-ports"
  constant InjectTrafficAgent (line 17) | InjectTrafficAgent         = DomainPrefix + "inject-traffic-agent"
  constant ManuallyInjected (line 18) | ManuallyInjected           = DomainPrefix + "manually-injected"
  constant ReplacedContainerPrefix (line 19) | ReplacedContainerPrefix    = DomainPrefix + "replaced-container."
  constant RestartedAt (line 20) | RestartedAt                = DomainPrefix + "restartedAt"
  constant VolumeMountPolicies (line 21) | VolumeMountPolicies        = DomainPrefix + "mount-policies"
  constant DownstreamTLSSecret (line 22) | DownstreamTLSSecret        = DomainPrefix + "downstream-tls-secret"
  constant DownstreamCertificatePath (line 23) | DownstreamCertificatePath  = DomainPrefix + "downstream-tls-path"
  constant UpstreamTLSSecret (line 24) | UpstreamTLSSecret          = DomainPrefix + "upstream-tls-secret"
  constant UpstreamCertificatePath (line 25) | UpstreamCertificatePath    = DomainPrefix + "upstream-tls-path"
  constant UpstreamInsecureSkipVerify (line 26) | UpstreamInsecureSkipVerify = DomainPrefix + "upstream-insecure-skip-verify"
  constant UpstreamProbeTimeout (line 27) | UpstreamProbeTimeout       = DomainPrefix + "upstream-probe-timeout"
  constant LegacyDomainPrefix (line 29) | LegacyDomainPrefix             = "telepresence.getambassador.io/"
  constant LegacyInjectContainerPorts (line 30) | LegacyInjectContainerPorts     = LegacyDomainPrefix + "inject-container-...
  constant LegacyInjectIgnoreVolumeMounts (line 31) | LegacyInjectIgnoreVolumeMounts = LegacyDomainPrefix + "inject-ignore-vol...
  constant LegacyInjectServiceName (line 32) | LegacyInjectServiceName        = LegacyDomainPrefix + "inject-service-name"
  constant LegacyInjectServicePort (line 33) | LegacyInjectServicePort        = LegacyDomainPrefix + "inject-service-port"
  constant LegacyInjectTrafficAgent (line 34) | LegacyInjectTrafficAgent       = LegacyDomainPrefix + "inject-traffic-ag...
  constant LegacyManuallyInjected (line 35) | LegacyManuallyInjected         = LegacyDomainPrefix + "manually-injected"
  function GetAnnotation (line 38) | func GetAnnotation(ctx context.Context, annotations map[string]string, k...
  function ReplaceAnnotationKey (line 49) | func ReplaceAnnotationKey(cn string) string {

FILE: pkg/authenticator/authenticator.go
  function NewService (line 12) | func NewService(
  type ExecCredentialsResolver (line 20) | type ExecCredentialsResolver interface
  type Service (line 27) | type Service struct
    method GetExecCredentials (line 31) | func (a Service) GetExecCredentials(ctx context.Context, contextName s...
    method getExecConfigFromContext (line 45) | func (a Service) getExecConfigFromContext(contextName string) (*client...

FILE: pkg/authenticator/config.go
  function LoadKubeConfig (line 5) | func LoadKubeConfig(kubeConfig string) clientcmd.ClientConfig {

FILE: pkg/authenticator/exec.go
  function ResolveExecConfig (line 14) | func ResolveExecConfig(ctx context.Context, execConfig *clientcmdapi.Exe...

FILE: pkg/authenticator/exec_test.go
  function TestExecCredentialsNoLocalEnv (line 11) | func TestExecCredentialsNoLocalEnv(t *testing.T) {
  function TestExecCredentialsYesLocalEnv (line 23) | func TestExecCredentialsYesLocalEnv(t *testing.T) {

FILE: pkg/authenticator/grpc/authenticator.go
  function RegisterAuthenticatorServer (line 15) | func RegisterAuthenticatorServer(srv *grpc.Server, clientConfigProvider ...
  type Authenticator (line 21) | type Authenticator interface
  type AuthenticatorServer (line 25) | type AuthenticatorServer struct
    method GetContextExecCredentials (line 32) | func (h *AuthenticatorServer) GetContextExecCredentials(ctx context.Co...

FILE: pkg/authenticator/patcher/patcher.go
  constant kubeConfigStubSubCommands (line 15) | kubeConfigStubSubCommands = "kubeauth"
  type AddressProvider (line 26) | type AddressProvider
  type Patcher (line 27) | type Patcher
  function CreateExternalKubeConfig (line 34) | func CreateExternalKubeConfig(
  function replaceAuthExecWithStub (line 95) | func replaceAuthExecWithStub(rawConfig *clientcmdapi.Config, executable,...
  function needsStubbedExec (line 120) | func needsStubbedExec(rawConfig *clientcmdapi.Config) bool {

FILE: pkg/cache/client.go
  type Entry (line 7) | type Entry interface
  type ClientMap (line 12) | type ClientMap struct
  method Watch (line 16) | func (c *ClientMap[K, V]) Watch(doneCh <-chan struct{}, deltaCh <-chan D...
  function NewClientMap (line 41) | func NewClientMap[K comparable, V any](options ...func(config *xsync.Map...
  type Server (line 45) | type Server interface

FILE: pkg/cache/map.go
  type Delta (line 13) | type Delta struct
  method Merge (line 18) | func (delta *Delta[K, V]) Merge(other Delta[K, V]) {
  type subscription (line 41) | type subscription struct
  type Map (line 49) | type Map struct
  function NewMap (line 60) | func NewMap[K comparable, V any](equal func(V, V) bool, notifyDelay time...
  method Subscribe (line 83) | func (m *Map[K, V]) Subscribe(done <-chan struct{}, includeFilter func(K...
  method Compute (line 116) | func (m *Map[K, V]) Compute(key K, f func(V, bool) (V, xsync.ComputeOp))...
  method CompareAndSwap (line 145) | func (m *Map[K, V]) CompareAndSwap(key K, oldValue, newValue V) (swapped...
  method Delete (line 157) | func (m *Map[K, V]) Delete(key K) {
  method LoadAll (line 167) | func (m *Map[K, V]) LoadAll() map[K]V {
  method LoadMatching (line 177) | func (m *Map[K, V]) LoadMatching(filter func(K, V) bool) map[K]V {
  method LoadAndDelete (line 190) | func (m *Map[K, V]) LoadAndDelete(key K) (previous V, loaded bool) {
  method LoadAndStore (line 204) | func (m *Map[K, V]) LoadAndStore(key K, value V) (existing V, loaded boo...
  method LoadOrCompute (line 222) | func (m *Map[K, V]) LoadOrCompute(key K, valueFn func() V) (actual V, lo...
  method LoadOrStore (line 235) | func (m *Map[K, V]) LoadOrStore(key K, value V) (actual V, loaded bool) {
  method Store (line 247) | func (m *Map[K, V]) Store(key K, value V) {
  method markSubscribers (line 252) | func (m *Map[K, V]) markSubscribers(key K, value V) {
  method notify (line 263) | func (m *Map[K, V]) notify() {
  type allDelta (line 278) | type allDelta struct
  function filteredMap (line 284) | func filteredMap[K comparable, V any](m map[K]V, include func(K, V) bool...
  method filteredDelta (line 297) | func (ad *allDelta[K, V]) filteredDelta(initialized bool, include func(K...
  method send (line 310) | func (ad *allDelta[K, V]) send(sb *subscription[K, V]) {
  method makeDelta (line 329) | func (m *Map[K, V]) makeDelta() allDelta[K, V] {

FILE: pkg/client/agentpf/clients.go
  type client (line 28) | type client struct
    method String (line 50) | func (ac *client) String() string {
    method Tunnel (line 58) | func (ac *client) Tunnel(ctx context.Context, opts ...grpc.CallOption)...
    method ensureConnect (line 82) | func (ac *client) ensureConnect(ctx context.Context) (agent.AgentClien...
    method ensureConnectLocked (line 88) | func (ac *client) ensureConnectLocked(ctx context.Context) (agent.Agen...
    method idleTime (line 135) | func (ac *client) idleTime() time.Duration {
    method dormant (line 139) | func (ac *client) dormant() bool {
    method connected (line 149) | func (ac *client) connected() bool {
    method intercepted (line 156) | func (ac *client) intercepted() bool {
    method cancel (line 163) | func (ac *client) cancel() bool {
    method refresh (line 180) | func (ac *client) refresh(ai *manager.AgentPodInfo) {
    method startDialWatcherLocked (line 208) | func (ac *client) startDialWatcherLocked() error {
    method notify (line 432) | func (ac *client) notify(waiter chan struct{}) {
  constant dormantLingerTime (line 48) | dormantLingerTime = 5 * time.Second
  type Clients (line 249) | type Clients interface
  type clients (line 259) | type clients struct
    method GetClient (line 288) | func (s *clients) GetClient(ip netip.Addr) (pvd tunnel.Provider) {
    method GetRandomAgent (line 320) | func (s *clients) GetRandomAgent(ctx context.Context) (aa agent.AgentC...
    method GetWorkloadClient (line 357) | func (s *clients) GetWorkloadClient(workload string) (pvd tunnel.Provi...
    method SetProxyVia (line 368) | func (s *clients) SetProxyVia(workload string) {
    method isProxyVIA (line 372) | func (s *clients) isProxyVIA(info *manager.AgentPodInfo) bool {
    method hasWaiterFor (line 377) | func (s *clients) hasWaiterFor(info *manager.AgentPodInfo) bool {
    method WatchAgentPods (line 389) | func (s *clients) WatchAgentPods(rmc manager.ManagerClient) error {
    method notifyWaiters (line 440) | func (s *clients) notifyWaiters() {
    method waitWithTimeout (line 454) | func (s *clients) waitWithTimeout(timeout time.Duration, waitOn <-chan...
    method WaitForIP (line 466) | func (s *clients) WaitForIP(ctx context.Context, timeout time.Duration...
    method WaitForWorkload (line 507) | func (s *clients) WaitForWorkload(timeout time.Duration, name string) ...
    method updateClients (line 534) | func (s *clients) updateClients(ais []*manager.AgentPodInfo) error {
  function NewClients (line 269) | func NewClients(cl *k8s.Cluster, session *manager.SessionInfo) Clients {

FILE: pkg/client/bwcompat/clusterinfo.go
  function FixLegacyClusterInfo (line 8) | func FixLegacyClusterInfo(mgrInfo *manager.ClusterInfo) {

FILE: pkg/client/cache/cache.go
  type Permissions (line 18) | type Permissions
  constant Public (line 21) | Public  Permissions = 0o644
  constant Private (line 22) | Private Permissions = 0o600
  function SaveToUserCache (line 25) | func SaveToUserCache(ctx context.Context, object any, file string, perm ...
  function LoadFromUserCache (line 42) | func LoadFromUserCache(ctx context.Context, dest any, file string) error {
  function DeleteFromUserCache (line 55) | func DeleteFromUserCache(ctx context.Context, file string) error {
  function TouchUserCache (line 63) | func TouchUserCache(ctx context.Context, file string) error {
  function UserCacheModTime (line 68) | func UserCacheModTime(ctx context.Context, file string) (time.Time, erro...
  function ExistsInCache (line 76) | func ExistsInCache(ctx context.Context, fileName string) (bool, error) {

FILE: pkg/client/cache/watcher.go
  function WatchUserCache (line 19) | func WatchUserCache(ctx context.Context, subDir string, onChange func(co...

FILE: pkg/client/cli/ann/annotations.go
  constant UserDaemon (line 6) | UserDaemon        = "userD"
  constant Session (line 7) | Session           = "session"
  constant VersionCheck (line 8) | VersionCheck      = "versionCheck"
  constant UpdateCheckFormat (line 9) | UpdateCheckFormat = "updateCheckFormat"
  constant Progress (line 10) | Progress          = "progress"
  constant Optional (line 16) | Optional = "optional"
  constant Required (line 17) | Required = "required"
  constant Tel2 (line 18) | Tel2     = "https://%s/download/tel2/%s/%s/stable.txt"

FILE: pkg/client/cli/cmd/completion.go
  constant completionLongPlain (line 12) | completionLongPlain = `To load completions:
  constant completionLongMarkdown (line 52) | completionLongMarkdown = `To load completions:
  function addCompletion (line 98) | func addCompletion(rootCmd *cobra.Command, markdown bool) {

FILE: pkg/client/cli/cmd/compose.go
  function composeCmd (line 9) | func composeCmd() *cobra.Command {

FILE: pkg/client/cli/cmd/config.go
  function configCmd (line 18) | func configCmd() *cobra.Command {
  constant clientOnlyFlag (line 27) | clientOnlyFlag = "client-only"
  function configView (line 29) | func configView() *cobra.Command {
  function runConfigView (line 45) | func runConfigView(cmd *cobra.Command, _ []string) error {

FILE: pkg/client/cli/cmd/connect.go
  function connectCmd (line 14) | func connectCmd() *cobra.Command {

FILE: pkg/client/cli/cmd/curl.go
  function curlCmd (line 12) | func curlCmd() *cobra.Command {
  function runCurl (line 31) | func runCurl(cmd *cobra.Command, args []string) error {

FILE: pkg/client/cli/cmd/docker_run.go
  function dockerRunCmd (line 24) | func dockerRunCmd() *cobra.Command {
  function findAndParseFlag (line 42) | func findAndParseFlag(flags *pflag.FlagSet, flagName string, args []stri...
  function parseFlags (line 57) | func parseFlags(cmd *cobra.Command, args []string) ([]string, error) {
  function runDockerRunCLI (line 71) | func runDockerRunCLI(cmd *cobra.Command, args []string) error {
  function runDockerRun (line 75) | func runDockerRun(cmd *cobra.Command, args []string) error {

FILE: pkg/client/cli/cmd/gather_logs.go
  type gatherLogsCommand (line 33) | type gatherLogsCommand struct
    method gatherLogs (line 97) | func (gl *gatherLogsCommand) gatherLogs(cmd *cobra.Command, _ []string...
    method gatherClusterLogs (line 253) | func (gl *gatherLogsCommand) gatherClusterLogs(ctx context.Context, ex...
  function gatherLogs (line 42) | func gatherLogs() *cobra.Command {
  type anonymizer (line 91) | type anonymizer struct
    method anonymizeFileNames (line 380) | func (a *anonymizer) anonymizeFileNames(lr *connector.LogsResponse, ex...
    method getPodName (line 397) | func (a *anonymizer) getPodName(podName string) string {
    method anonymizeLog (line 442) | func (a *anonymizer) anonymizeLog(logFile string) error {
  function retrieveLocalLogs (line 193) | func retrieveLocalLogs(ctx context.Context, daemonLogs []string, exportD...
  function getLogFiles (line 230) | func getLogFiles(exportDir string) ([]string, error) {
  function anonymizeLogs (line 244) | func anonymizeLogs(ctx context.Context, files []string, az *anonymizer) {
  function isEmpty (line 282) | func isEmpty(file string) (bool, error) {
  function copyFiles (line 291) | func copyFiles(dstFile, srcFile string) error {
  function zipFiles (line 313) | func zipFiles(files []string, zipFileName string) error {
  function getSignificantPodNames (line 498) | func getSignificantPodNames(podName string) []string {

FILE: pkg/client/cli/cmd/gather_logs_test.go
  function Test_gatherLogsZipFiles (line 23) | func Test_gatherLogsZipFiles(t *testing.T) {
  function Test_gatherLogsCopyFiles (line 108) | func Test_gatherLogsCopyFiles(t *testing.T) {
  function Test_gatherLogsNoK8s (line 167) | func Test_gatherLogsNoK8s(t *testing.T) {
  function Test_gatherLogsGetPodName (line 310) | func Test_gatherLogsGetPodName(t *testing.T) {
  function Test_gatherLogsAnonymizeLogs (line 346) | func Test_gatherLogsAnonymizeLogs(t *testing.T) {
  function Test_gatherLogsSignificantPodNames (line 386) | func Test_gatherLogsSignificantPodNames(t *testing.T) {
  function ReadZip (line 440) | func ReadZip(zippedFile *zip.File) ([]byte, error) {
  function checkZipEqual (line 455) | func checkZipEqual(zippedFile *zip.File, srcLogDir string) (bool, error) {

FILE: pkg/client/cli/cmd/genyaml.go
  type genYAMLCommand (line 32) | type genYAMLCommand struct
    method getOutputWriter (line 88) | func (i *genYAMLCommand) getOutputWriter() (io.WriteCloser, error) {
    method loadConfigMapEntry (line 99) | func (i *genYAMLCommand) loadConfigMapEntry() (*agentconfig.Sidecar, e...
    method loadWorkload (line 118) | func (i *genYAMLCommand) loadWorkload(ctx context.Context) (k8sapi.Wor...
    method writeObjToOutput (line 155) | func (i *genYAMLCommand) writeObjToOutput(obj any) error {
    method WithJoinedClientSetInterface (line 175) | func (i *genYAMLCommand) WithJoinedClientSetInterface(ctx context.Cont...
  function genYAML (line 40) | func genYAML() *cobra.Command {
  function getInput (line 70) | func getInput(inputFile string) ([]byte, error) {
  type genConfigMap (line 224) | type genConfigMap struct
    method generateConfigMap (line 268) | func (g *genConfigMap) generateConfigMap(ctx context.Context, wl k8sap...
    method run (line 277) | func (g *genConfigMap) run(cmd *cobra.Command, kubeFlags map[string]st...
  function allKubeFlags (line 229) | func allKubeFlags() *pflag.FlagSet {
  function genConfigMapSubCommand (line 236) | func genConfigMapSubCommand(yamlInfo *genYAMLCommand) *cobra.Command {
  type genContainerInfo (line 298) | type genContainerInfo struct
    method run (line 322) | func (g *genContainerInfo) run(cmd *cobra.Command, kubeFlags map[strin...
  function genContainerSubCommand (line 302) | func genContainerSubCommand(yamlInfo *genYAMLCommand) *cobra.Command {
  type genInitContainerInfo (line 360) | type genInitContainerInfo struct
    method run (line 382) | func (g *genInitContainerInfo) run(*cobra.Command, map[string]string) ...
  function genInitContainerSubCommand (line 364) | func genInitContainerSubCommand(yamlInfo *genYAMLCommand) *cobra.Command {
  type genAnnotationsInfo (line 398) | type genAnnotationsInfo struct
    method run (line 418) | func (g *genAnnotationsInfo) run() error {
  function genVAnnotationsSubCommand (line 402) | func genVAnnotationsSubCommand(yamlInfo *genYAMLCommand) *cobra.Command {
  type genVolumeInfo (line 435) | type genVolumeInfo struct
    method run (line 459) | func (g *genVolumeInfo) run() error {
  function genVolumeSubCommand (line 439) | func genVolumeSubCommand(yamlInfo *genYAMLCommand) *cobra.Command {

FILE: pkg/client/cli/cmd/helm.go
  function helmCmd (line 15) | func helmCmd() *cobra.Command {
  type HelmCommand (line 24) | type HelmCommand struct
    method addValueSettingFlags (line 94) | func (ha *HelmCommand) addValueSettingFlags(flags *pflag.FlagSet) {
    method Type (line 164) | func (ha *HelmCommand) Type() helm.RequestType {
    method run (line 168) | func (ha *HelmCommand) run(cmd *cobra.Command, _ []string) (err error) {
  function helmInstall (line 35) | func helmInstall() *cobra.Command {
  function helmUpgrade (line 69) | func helmUpgrade() *cobra.Command {
  function helmUninstall (line 110) | func helmUninstall() *cobra.Command {
  function helmLint (line 128) | func helmLint() *cobra.Command {
  function helmVersion (line 151) | func helmVersion() *cobra.Command {

FILE: pkg/client/cli/cmd/ingest.go
  function ingestCmd (line 11) | func ingestCmd() *cobra.Command {

FILE: pkg/client/cli/cmd/intercept.go
  function interceptCmd (line 10) | func interceptCmd() *cobra.Command {

FILE: pkg/client/cli/cmd/kubeauth.go
  function kubeauthCmd (line 15) | func kubeauthCmd() *cobra.Command {
  function authenticateContext (line 27) | func authenticateContext(cmd *cobra.Command, args []string) (err error) {

FILE: pkg/client/cli/cmd/leave.go
  function leaveCmd (line 24) | func leaveCmd() *cobra.Command {
  function disengage (line 83) | func disengage(ctx context.Context, name, container string) error {

FILE: pkg/client/cli/cmd/list.go
  constant includeIntercepts (line 26) | includeIntercepts = iota
  constant includeIngests (line 27) | includeIngests
  constant includeReplacements (line 28) | includeReplacements
  constant includeWiretaps (line 29) | includeWiretaps
  type listCommand (line 32) | type listCommand struct
    method list (line 100) | func (s *listCommand) list(cmd *cobra.Command, _ []string) error {
    method printList (line 181) | func (s *listCommand) printList(ctx context.Context, workloads []*conn...
  function list (line 40) | func list() *cobra.Command {
  type watchWorkloadStreamResponse (line 94) | type watchWorkloadStreamResponse struct

FILE: pkg/client/cli/cmd/list_contexts.go
  type listContextsCommand (line 12) | type listContextsCommand struct
    method run (line 35) | func (lcc *listContextsCommand) run(cmd *cobra.Command, _ []string) er...
  function listContexts (line 16) | func listContexts() *cobra.Command {
  type kubeCtx (line 30) | type kubeCtx struct

FILE: pkg/client/cli/cmd/list_namespaces.go
  type listNamespacesCommand (line 12) | type listNamespacesCommand struct
    method run (line 30) | func (lnc *listNamespacesCommand) run(cmd *cobra.Command, _ []string) ...
  function listNamespaces (line 16) | func listNamespaces() *cobra.Command {

FILE: pkg/client/cli/cmd/loglevel.go
  constant defaultDuration (line 22) | defaultDuration = 30 * time.Minute
  type logLevelCommand (line 24) | type logLevelCommand struct
    method setTempLogLevel (line 60) | func (lls *logLevelCommand) setTempLogLevel(cmd *cobra.Command, args [...
  function logLevelArg (line 30) | func logLevelArg(cmd *cobra.Command, args []string) error {
  function loglevel (line 41) | func loglevel() *cobra.Command {

FILE: pkg/client/cli/cmd/man-pages.go
  function manPages (line 12) | func manPages() *cobra.Command {
  function genMarkdown (line 29) | func genMarkdown(cmd *cobra.Command, dir string) error {
  function entityEscape (line 38) | func entityEscape(s string, w *bytes.Buffer) {
  function genCommandMarkdown (line 56) | func genCommandMarkdown(cmd *cobra.Command, dir string, buf *bytes.Buffe...

FILE: pkg/client/cli/cmd/mcp.go
  function mcp (line 8) | func mcp() *cobra.Command {

FILE: pkg/client/cli/cmd/mcp_test.go
  function TestMCP (line 9) | func TestMCP(t *testing.T) {

FILE: pkg/client/cli/cmd/quit.go
  function quit (line 10) | func quit() *cobra.Command {

FILE: pkg/client/cli/cmd/replace.go
  function replaceCmd (line 10) | func replaceCmd() *cobra.Command {

FILE: pkg/client/cli/cmd/revoke.go
  function revokeCmd (line 18) | func revokeCmd() *cobra.Command {
  function revokeIntercept (line 40) | func revokeIntercept(ctx context.Context, interceptID string) error {

FILE: pkg/client/cli/cmd/serve.go
  type serveCommand (line 27) | type serveCommand struct
    method addFlags (line 48) | func (sc *serveCommand) addFlags(cmd *cobra.Command) {
    method run (line 53) | func (sc *serveCommand) run(cmd *cobra.Command, args []string) error {
    method serveFromContainer (line 82) | func (sc *serveCommand) serveFromContainer(ctx context.Context, addr n...
    method serveFromHost (line 125) | func (sc *serveCommand) serveFromHost(ctx context.Context, addr netip....
    method openBrowser (line 143) | func (sc *serveCommand) openBrowser(ctx context.Context, on *url.URL, ...
  function serveCmd (line 31) | func serveCmd() *cobra.Command {
  constant browserProgressID (line 78) | browserProgressID = "Web-browser"
  constant socatProgressID (line 79) | socatProgressID   = "Port-forward"

FILE: pkg/client/cli/cmd/status.go
  type StatusInfo (line 27) | type StatusInfo struct
    method WriterTos (line 203) | func (s *StatusInfo) WriterTos() []io.WriterTo {
    method MarshalJSON (line 218) | func (s *StatusInfo) MarshalJSON() ([]byte, error) {
    method toMap (line 222) | func (s *StatusInfo) toMap() map[string]any {
  type MultiConnectStatusInfo (line 33) | type MultiConnectStatusInfo struct
    method MarshalJSON (line 406) | func (s *MultiConnectStatusInfo) MarshalJSON() ([]byte, error) {
    method toMap (line 414) | func (s *MultiConnectStatusInfo) toMap() (map[string]any, error) {
    method WriterTos (line 429) | func (s *MultiConnectStatusInfo) WriterTos() []io.WriterTo {
  type SingleConnectStatusInfo (line 38) | type SingleConnectStatusInfo struct
    method WriterTos (line 368) | func (s *SingleConnectStatusInfo) WriterTos() []io.WriterTo {
    method MarshalJSON (line 377) | func (s *SingleConnectStatusInfo) MarshalJSON() ([]byte, error) {
    method toMap (line 385) | func (s *SingleConnectStatusInfo) toMap() (map[string]any, error) {
  type RootDaemonStatus (line 43) | type RootDaemonStatus struct
    method WriteTo (line 464) | func (ds *RootDaemonStatus) WriteTo(out io.Writer) (int64, error) {
  type UserDaemonStatus (line 54) | type UserDaemonStatus struct
    method WriteTo (line 549) | func (cs *UserDaemonStatus) WriteTo(out io.Writer) (int64, error) {
    method print (line 564) | func (cs *UserDaemonStatus) print(kvf *ioutil.KeyValueFormatter) {
  type ContainerizedDaemonStatus (line 79) | type ContainerizedDaemonStatus struct
    method WriteTo (line 440) | func (cs *ContainerizedDaemonStatus) WriteTo(out io.Writer) (int64, er...
  type TrafficManagerStatus (line 86) | type TrafficManagerStatus struct
    method MarshalJSON (line 614) | func (ts *TrafficManagerStatus) MarshalJSON() ([]byte, error) {
    method toMap (line 622) | func (ts *TrafficManagerStatus) toMap() (map[string]any, error) {
    method WriteTo (line 639) | func (ts *TrafficManagerStatus) WriteTo(out io.Writer) (int64, error) {
  type ConnectStatusIngest (line 93) | type ConnectStatusIngest struct
  type ConnectStatusIntercept (line 99) | type ConnectStatusIntercept struct
  constant multiDaemonFlag (line 105) | multiDaemonFlag = "multi-daemon"
  constant jsonFlag (line 106) | jsonFlag        = "json"
  function statusCmd (line 109) | func statusCmd() *cobra.Command {
  function run (line 126) | func run(cmd *cobra.Command, _ []string) error {
  function setUserDaemonStatus (line 240) | func setUserDaemonStatus(ctx context.Context, userD daemon.UserClient, d...
  function getStatusInfo (line 305) | func getStatusInfo(ctx context.Context, di *daemon.Info) (*StatusInfo, e...
  function printPortMappings (line 492) | func printPortMappings(kvf *ioutil.KeyValueFormatter, pms []string) {
  function printDNS (line 504) | func printDNS(kvf *ioutil.KeyValueFormatter, d *client.DNSSnake) {
  function printRouting (line 531) | func printRouting(kvf *ioutil.KeyValueFormatter, r *client.RoutingSnake) {

FILE: pkg/client/cli/cmd/telepresence.go
  function Telepresence (line 32) | func Telepresence(ctx context.Context, args []string) *cobra.Command {
  function TelepresenceDaemon (line 66) | func TelepresenceDaemon(ctx context.Context, args []string) *cobra.Comma...
  function setContext (line 83) | func setContext(cmd *cobra.Command, ctx context.Context) {
  function AddSubCommands (line 93) | func AddSubCommands(cmd *cobra.Command, markdown bool) {
  function RunSubcommands (line 116) | func RunSubcommands(cmd *cobra.Command, args []string) error {
  function OnlySubcommands (line 135) | func OnlySubcommands(cmd *cobra.Command, args []string) error {
  function WithSubCommands (line 152) | func WithSubCommands(ctx context.Context) context.Context {
  function WithDaemonSubCommands (line 183) | func WithDaemonSubCommands(ctx context.Context) context.Context {
  type subCommandsKey (line 187) | type subCommandsKey struct
  function MergeSubCommands (line 189) | func MergeSubCommands(ctx context.Context, commands ...*cobra.Command) c...
  function getSubCommands (line 198) | func getSubCommands(cmd *cobra.Command) []*cobra.Command {
  function mergeCommands (line 207) | func mergeCommands(a, b []*cobra.Command) []*cobra.Command {
  function argsCheck (line 220) | func argsCheck(f cobra.PositionalArgs) cobra.PositionalArgs {
  function autocompleteContext (line 229) | func autocompleteContext(cmd *cobra.Command, _ []string, toComplete stri...
  type versionFile (line 247) | type versionFile struct
  function ensureCacheVersion (line 251) | func ensureCacheVersion(cmd *cobra.Command, _ []string) error {

FILE: pkg/client/cli/cmd/uninstall.go
  constant allAgentsFlag (line 20) | allAgentsFlag = "all-agents"
  type uninstallCommand (line 22) | type uninstallCommand struct
    method args (line 48) | func (u *uninstallCommand) args(_ *cobra.Command, args []string) error {
    method run (line 60) | func (u *uninstallCommand) run(cmd *cobra.Command, args []string) error {
  function uninstall (line 27) | func uninstall() *cobra.Command {
  function validWorkloads (line 82) | func validWorkloads(cmd *cobra.Command, args []string, toComplete string...

FILE: pkg/client/cli/cmd/usage.go
  constant helpPlain (line 21) | helpPlain = `Telepresence can connect to a cluster and route all outboun...
  constant helpMarkdown (line 41) | helpMarkdown = `Telepresence can connect to a cluster and route all outb...
  constant usagePlain (line 64) | usagePlain = `Usage:
  constant usageMarkdown (line 122) | usageMarkdown = `### Usage:
  function flagEqual (line 195) | func flagEqual(a, b *pflag.Flag) bool {
  function localFlags (line 205) | func localFlags(cmd *cobra.Command, exclude ...*pflag.FlagSet) []*pflag....
  function kubeFlags (line 222) | func kubeFlags() *pflag.FlagSet {
  function hasKubeFlags (line 231) | func hasKubeFlags(cmd *cobra.Command) bool {
  function commandLink (line 242) | func commandLink(cmd *cobra.Command) string {
  function addUsageTemplate (line 246) | func addUsageTemplate(cmd *cobra.Command, markdown bool) {

FILE: pkg/client/cli/cmd/version.go
  function versionCmd (line 26) | func versionCmd() *cobra.Command {
  function addDaemonVersions (line 41) | func addDaemonVersions(ctx context.Context, kvf *ioutil.KeyValueFormatte...
  function printVersion (line 87) | func printVersion(cmd *cobra.Command, _ []string) error {
  function daemonVersion (line 124) | func daemonVersion(ctx context.Context) (*common.VersionInfo, error) {
  function managerVersion (line 132) | func managerVersion(ctx context.Context) (*common.VersionInfo, error) {
  function trafficAgentFQN (line 147) | func trafficAgentFQN(ctx context.Context) (*manager.AgentImageFQN, error) {

FILE: pkg/client/cli/cmd/wiretap.go
  function wiretapCmd (line 10) | func wiretapCmd() *cobra.Command {

FILE: pkg/client/cli/connect/connector.go
  function maybeComposeDown (line 55) | func maybeComposeDown(ctx context.Context, info *daemon.Info) {
  function findHostConnectorInfo (line 73) | func findHostConnectorInfo(ctx context.Context) (*daemon.Info, error) {
  function quitHostConnector (line 87) | func quitHostConnector(ctx context.Context) {
  function quitDockerDaemons (line 125) | func quitDockerDaemons(ctx context.Context) {
  function EnsureUserDaemon (line 151) | func EnsureUserDaemon(ctx context.Context, required bool) (rc context.Co...
  function EnsureSession (line 179) | func EnsureSession(ctx context.Context, useLine string, required bool) (...
  function ResolveLocalReroute (line 222) | func ResolveLocalReroute(ctx context.Context, ds *daemon.Session, pm str...
  function ResolveRemoteReroute (line 246) | func ResolveRemoteReroute(ctx context.Context, ds *daemon.Session, pm st...
  function resolveHostPort (line 270) | func resolveHostPort(ctx context.Context, ds *daemon.Session, proto type...
  function ExistingDaemon (line 296) | func ExistingDaemon(ctx context.Context, info *daemon.Info) (context.Con...
  function Quit (line 312) | func Quit(ctx context.Context) {
  function Disconnect (line 321) | func Disconnect(ctx context.Context) {
  function RunConnect (line 348) | func RunConnect(cmd *cobra.Command, args []string) error {
  function DiscoverDaemon (line 364) | func DiscoverDaemon(ctx context.Context, match *regexp.Regexp, daemonID ...
  function launchDockerDaemon (line 380) | func launchDockerDaemon(ctx context.Context, daemonID *daemon.Identifier...
  function launchHostDaemon (line 419) | func launchHostDaemon(ctx context.Context, daemonID *daemon.Identifier, ...
  function findOrLaunchConnectorDaemon (line 467) | func findOrLaunchConnectorDaemon(ctx context.Context, daemonID *daemon.I...
  function getConnectorVersion (line 515) | func getConnectorVersion(ctx context.Context, cc connector.ConnectorClie...
  function newUserDaemon (line 530) | func newUserDaemon(ctx context.Context, conn *grpc.ClientConn, info *dae...
  function ensureDaemonVersion (line 544) | func ensureDaemonVersion(ctx context.Context) error {
  function warnMngrVersion (line 550) | func warnMngrVersion(ctx context.Context, ci *connector.ConnectInfo) err...
  function connectResult (line 588) | func connectResult(ctx context.Context, ci *connector.ConnectInfo, withP...
  function connectSession (line 599) | func connectSession(ctx context.Context, useLine string, request *daemon...
  function createTelerouteNetwork (line 659) | func createTelerouteNetwork(ctx context.Context, info *daemon.Info) error {
  function maybeDeleteNetwork (line 691) | func maybeDeleteNetwork(ctx context.Context, info *daemon.Info) {

FILE: pkg/client/cli/connect/daemon.go
  function launchDaemon (line 23) | func launchDaemon(ctx context.Context, cr *daemon.Request) (info *daemon...
  function EnsureRootDaemonRunning (line 64) | func EnsureRootDaemonRunning(ctx context.Context) error {
  function mkdir (line 99) | func mkdir(dirType, path string) error {
  function ensureAppUserCacheDirs (line 106) | func ensureAppUserCacheDirs(ctx context.Context) error {
  function ensureAppUserConfigDir (line 117) | func ensureAppUserConfigDir(ctx context.Context) error {

FILE: pkg/client/cli/connect/init_command.go
  function InitProgressWriter (line 19) | func InitProgressWriter(cmd *cobra.Command) {
  function InitCommand (line 37) | func InitCommand(cmd *cobra.Command) (err error) {
  function GetOptionalSession (line 93) | func GetOptionalSession(cmd *cobra.Command) (context.Context, *daemon.Se...

FILE: pkg/client/cli/connect/version_check.go
  function versionCheck (line 19) | func versionCheck(ctx context.Context, daemonBinary string) error {

FILE: pkg/client/cli/daemon/dial.go
  constant InfoFileName (line 10) | InfoFileName = "daemon.json"
  function DialRootDaemon (line 16) | func DialRootDaemon(ctx context.Context, waitForConnect bool) (conn *grp...
  function DialUserDaemon (line 23) | func DialUserDaemon(ctx context.Context, waitForConnect bool) (conn *grp...

FILE: pkg/client/cli/daemon/identifier.go
  type Identifier (line 10) | type Identifier struct
    method String (line 40) | func (id *Identifier) String() string {
    method InfoFileName (line 44) | func (id *Identifier) InfoFileName() string {
    method ContainerName (line 51) | func (id *Identifier) ContainerName() string {
  function NewIdentifier (line 17) | func NewIdentifier(name, contextName, namespace string, containerized bo...
  function IdentifierFromFlags (line 57) | func IdentifierFromFlags(ctx context.Context, name string, flagMap map[s...

FILE: pkg/client/cli/daemon/identifier_test.go
  function TestDaemonInfoFileName (line 10) | func TestDaemonInfoFileName(t *testing.T) {
  function TestSafeContainerName (line 31) | func TestSafeContainerName(t *testing.T) {

FILE: pkg/client/cli/daemon/info.go
  type RootInfo (line 29) | type RootInfo struct
  type Info (line 33) | type Info struct
    method DaemonID (line 50) | func (info *Info) DaemonID() *Identifier {
    method InDocker (line 54) | func (info *Info) InDocker() bool {
    method SetConnectionInfo (line 58) | func (info *Info) SetConnectionInfo(name string, clusterContext string...
  type TCPInfo (line 46) | type TCPInfo interface
  constant daemonsDirName (line 65) | daemonsDirName     = "userd"
  constant rootDaemonsDirName (line 66) | rootDaemonsDirName = "rootd"
  constant keepAliveInterval (line 67) | keepAliveInterval  = 2 * time.Second
  constant maxNoSignOfLife (line 68) | maxNoSignOfLife    = 3 * keepAliveInterval
  type InfoLoader (line 71) | type InfoLoader struct
  function NewUserInfoLoader (line 76) | func NewUserInfoLoader(ctx context.Context) *InfoLoader[Info] {
  function NewRootInfoLoader (line 80) | func NewRootInfoLoader(ctx context.Context, managed bool) *InfoLoader[Ro...
  function LoadRootServiceInfo (line 88) | func LoadRootServiceInfo(ctx context.Context) (*RootInfo, error) {
  method LoadInfo (line 92) | func (il *InfoLoader[T]) LoadInfo(file string) (*T, error) {
  method SaveInfo (line 117) | func (il *InfoLoader[T]) SaveInfo(object *T, file string) error {
  method DeleteInfo (line 121) | func (il *InfoLoader[T]) DeleteInfo(file string) error {
  method InfoExists (line 125) | func (il *InfoLoader[T]) InfoExists(file string) (bool, error) {
  method WatchInfos (line 139) | func (il *InfoLoader[T]) WatchInfos(onChange func(context.Context) error...
  method WaitUntilAllVanishes (line 143) | func (il *InfoLoader[T]) WaitUntilAllVanishes(ttw time.Duration) error {
  method DeleteAllInfos (line 155) | func (il *InfoLoader[T]) DeleteAllInfos() error {
  method LoadInfos (line 166) | func (il *InfoLoader[T]) LoadInfos() ([]*T, error) {
  method DialDaemon (line 181) | func (il *InfoLoader[T]) DialDaemon(ctx context.Context, waitForConnect ...
  function dialDaemon (line 221) | func dialDaemon(ctx context.Context, name string, port uint16) (conn *gr...
  method infoFiles (line 231) | func (il *InfoLoader[T]) infoFiles() ([]fs.DirEntry, error) {
  method deleteIfStale (line 257) | func (il *InfoLoader[T]) deleteIfStale(name string, fi fs.FileInfo) error {
  function infoName (line 270) | func infoName[T TCPInfo](info *T) string {
  type InfoMatchError (line 277) | type InfoMatchError
    method Error (line 279) | func (i InfoMatchError) Error() string {
  type MultipleDaemonsError (line 283) | type MultipleDaemonsError
    method Error (line 285) | func (m MultipleDaemonsError) Error() string {
  method LoadMatchingInfo (line 307) | func (il *InfoLoader[T]) LoadMatchingInfo(match *regexp.Regexp) (*T, err...
  method CancelWhenRmFromCache (line 336) | func (il *InfoLoader[T]) CancelWhenRmFromCache(cancel context.CancelFunc...
  method KeepInfoAlive (line 357) | func (il *InfoLoader[T]) KeepInfoAlive(file string) error {

FILE: pkg/client/cli/daemon/request.go
  type Request (line 34) | type Request struct
    method Commit (line 196) | func (cr *Request) Commit(ctx context.Context) (context.Context, error) {
    method addKubeconfigEnv (line 314) | func (cr *Request) addKubeconfigEnv() {
    method setGlobalConnectFlags (line 334) | func (cr *Request) setGlobalConnectFlags(cmd *cobra.Command) error {
    method Clone (line 352) | func (cr *Request) Clone() *Request {
  type CobraRequest (line 72) | type CobraRequest struct
    method CommitFlags (line 157) | func (cr *CobraRequest) CommitFlags(cmd *cobra.Command) error {
    method GetAllNamespaces (line 425) | func (cr *CobraRequest) GetAllNamespaces(cmd *cobra.Command) ([]string...
    method autocompleteNamespace (line 449) | func (cr *CobraRequest) autocompleteNamespace(cmd *cobra.Command, _ []...
    method autocompleteNamespaces (line 458) | func (cr *CobraRequest) autocompleteNamespaces(cmd *cobra.Command, _ [...
    method autocompleteNamespaceFunc (line 485) | func (cr *CobraRequest) autocompleteNamespaceFunc(cmd *cobra.Command, ...
    method autocompleteCluster (line 498) | func (cr *CobraRequest) autocompleteCluster(cmd *cobra.Command, _ []st...
    method GetConfig (line 516) | func (cr *CobraRequest) GetConfig(cmd *cobra.Command) (*api.Config, er...
  function InitRequest (line 81) | func InitRequest(cmd *cobra.Command) *CobraRequest {
  type requestKey (line 155) | type requestKey struct
  type prefixViaWL (line 225) | type prefixViaWL struct
  function parseProxyVias (line 231) | func parseProxyVias(proxyVia []string) ([]*daemon.SubnetViaWorkload, err...
  function parseSubnetViaWorkload (line 291) | func parseSubnetViaWorkload(dps string) (prefixViaWL, error) {
  function GetRequest (line 367) | func GetRequest(ctx context.Context) *Request {
  function MustGetRequest (line 374) | func MustGetRequest(ctx context.Context) *Request {
  function WithDefaultRequest (line 382) | func WithDefaultRequest(cmd *cobra.Command) (context.Context, error) {
  function WithRequest (line 402) | func WithRequest(ctx context.Context, cr *Request) context.Context {
  function NewDefaultRequest (line 406) | func NewDefaultRequest() *Request {
  function GetKubeStartingConfig (line 417) | func GetKubeStartingConfig(cmd *cobra.Command) (*api.Config, error) {

FILE: pkg/client/cli/daemon/request_test.go
  function Test_parseSubnetViaWorkload (line 11) | func Test_parseSubnetViaWorkload(t *testing.T) {
  function Test_parseProxyVias (line 102) | func Test_parseProxyVias(t *testing.T) {

FILE: pkg/client/cli/daemon/userd.go
  type UserClient (line 30) | type UserClient interface
  type userClient (line 46) | type userClient struct
    method Close (line 109) | func (u *userClient) Close() error {
    method Conn (line 113) | func (u *userClient) Conn() *grpc.ClientConn {
    method DaemonInfo (line 117) | func (u *userClient) DaemonInfo() *Info {
    method Containerized (line 121) | func (u *userClient) Containerized() bool {
    method DaemonID (line 125) | func (u *userClient) DaemonID() *Identifier {
    method Executable (line 129) | func (u *userClient) Executable() string {
    method Lookup (line 133) | func (u *userClient) Lookup(ctx context.Context, name string) (addr ne...
    method Name (line 145) | func (u *userClient) Name() string {
    method Semver (line 149) | func (u *userClient) Semver() semver.Version {
    method DaemonPort (line 153) | func (u *userClient) DaemonPort() int {
    method SetConnectionInfo (line 165) | func (u *userClient) SetConnectionInfo(name string, clusterContext str...
    method AddHandler (line 169) | func (u *userClient) AddHandler(ctx context.Context, id string, cmd *e...
  function NewUserClient (line 57) | func NewUserClient(conn *grpc.ClientConn, info *Info, version semver.Ver...
  type Session (line 61) | type Session struct
    method GetAgentConfig (line 195) | func (s *Session) GetAgentConfig(ctx context.Context, workload string)...
    method GetRootClientConfig (line 203) | func (s *Session) GetRootClientConfig() (client.Config, error) {
  type userDaemonKey (line 67) | type userDaemonKey struct
  function GetUserClient (line 69) | func GetUserClient(ctx context.Context) UserClient {
  function MustGetUserClient (line 76) | func MustGetUserClient(ctx context.Context) UserClient {
  function WithUserClient (line 84) | func WithUserClient(ctx context.Context, ud UserClient) context.Context {
  type sessionKey (line 88) | type sessionKey struct
  function GetSession (line 90) | func GetSession(ctx context.Context) *Session {
  function MustGetSession (line 97) | func MustGetSession(ctx context.Context) *Session {
  function WithSession (line 105) | func WithSession(ctx context.Context, s *Session) context.Context {
  function GetRootClientConfig (line 207) | func GetRootClientConfig(ds *daemon.DaemonStatus) (client.Config, error) {
  function GetCommandKubeConfig (line 216) | func GetCommandKubeConfig(cmd *cobra.Command) (*k8s.Kubeconfig, error) {

FILE: pkg/client/cli/docker/auto_complete.go
  function AutocompleteRun (line 19) | func AutocompleteRun(cmd *cobra.Command, args []string, toComplete strin...

FILE: pkg/client/cli/docker/compose/config.go
  constant extensionKey (line 35) | extensionKey = "x-tele"
  type parentConfig (line 38) | type parentConfig struct
    method toProjectOptions (line 83) | func (pc *parentConfig) toProjectOptions(po ...cli.ProjectOptionsFn) (...
    method addComposeFlags (line 117) | func (pc *parentConfig) addComposeFlags(cmd *cobra.Command) {
  type config (line 55) | type config struct
    method subCommand (line 134) | func (c *config) subCommand(subCmd *types.CommandInfo) *cobra.Command {
    method detached (line 170) | func (c *config) detached() bool {
    method appendFlags (line 177) | func (c *config) appendFlags(flags *pflag.FlagSet, opts []string) []st...
    method run (line 205) | func (c *config) run(cmd *cobra.Command) (err error) {
    method connect (line 307) | func (c *config) connect(ctx context.Context, es map[string]serviceExt...
    method loadProject (line 331) | func (c *config) loadProject(ctx context.Context) (*transformer, error) {
    method dispatchToCompose (line 365) | func (c *config) dispatchToCompose(ctx context.Context, name string) e...
    method getConnectionConfig (line 374) | func (c *config) getConnectionConfig(name string) (*connectionConfig, ...
    method getMountPort (line 393) | func (c *config) getMountPort(e mountsExtension) (uint16, error) {
  function GenerateSubCommands (line 61) | func GenerateSubCommands(cmd *cobra.Command) []*cobra.Command {
  function init (line 110) | func init() {
  function loadExistingProject (line 415) | func loadExistingProject(ctx context.Context, pwd, path string) (*compos...

FILE: pkg/client/cli/docker/compose/connection.go
  type connectionConfig (line 20) | type connectionConfig struct
    method Connect (line 60) | func (cc *connectionConfig) Connect(ctx context.Context, es map[string...
    method resolveProxies (line 132) | func (cc *connectionConfig) resolveProxies(ctx context.Context, ds *da...
  type connection (line 30) | type connection struct
    method disconnect (line 151) | func (c *connection) disconnect() {
  function composePortString (line 38) | func composePortString(p *compose.ServicePortConfig) string {
  function composePortTarget (line 54) | func composePortTarget(p *compose.ServicePortConfig) types.PortAndProto {
  function addProxyReroutes (line 157) | func addProxyReroutes(e servicePortExtension, cr *daemon.Request) error {
  function addProxyLocalReroutes (line 166) | func addProxyLocalReroutes(e servicePortExtension, cr *daemon.Request) {
  function addProxyRemoteReroutes (line 181) | func addProxyRemoteReroutes(e servicePortExtension, cr *daemon.Request) ...

FILE: pkg/client/cli/docker/compose/engagement.go
  type engagement (line 25) | type engagement struct
    method assignEnvAndCreateMounts (line 43) | func (a *engagement) assignEnvAndCreateMounts(remoteEnv map[string]str...
    method maybeAddConnection (line 66) | func (a *engagement) maybeAddConnection(s *compose.ServiceConfig) bool {
    method engageService (line 104) | func (a *engagement) engageService(s *compose.ServiceConfig) {
    method engageProxyDependents (line 133) | func (a *engagement) engageProxyDependents(p *compose.Project, n strin...
    method engageProject (line 168) | func (a *engagement) engageProject(p *compose.Project) {
  function createEngagement (line 33) | func createEngagement(ud daemon.UserClient, e serviceExtension, sftpPort...
  constant connectionAnnotationPrefix (line 62) | connectionAnnotationPrefix = "telepresence.io/connection-"
  constant mountPortAnnotation (line 63) | mountPortAnnotation        = "telepresence.io/mount-port"
  function createVolumes (line 186) | func createVolumes(
  function createVolume (line 229) | func createVolume(ctx context.Context, pluginName string, hostPort netip...

FILE: pkg/client/cli/docker/compose/extension.go
  type serviceExtension (line 22) | type serviceExtension interface
  type mountsExtension (line 54) | type mountsExtension interface
  type workloadExtension (line 60) | type workloadExtension interface
  type servicePortExtension (line 69) | type servicePortExtension interface
  method parseServiceExtension (line 74) | func (c *config) parseServiceExtension(composeService *compose.ServiceCo...
  type extension (line 117) | type extension struct
    method init (line 124) | func (e *extension) init(_ *config, et types.EngagementType, composeSe...
    method name (line 130) | func (e *extension) name() string {
    method engagementType (line 134) | func (e *extension) engagementType() types.EngagementType {
    method connectionName (line 138) | func (e *extension) connectionName() string {
    method composeService (line 143) | func (e *extension) composeService() *compose.ServiceConfig {
    method connection (line 147) | func (e *extension) connection() *connection {
    method engaged (line 151) | func (e *extension) engaged() (*engagement, error) {
    method needsVolumes (line 155) | func (e *extension) needsVolumes() bool {
    method setConnection (line 159) | func (e *extension) setConnection(c *connection) {
    method activate (line 163) | func (e *extension) activate(*transformer) (*engagement, error) {
    method deactivate (line 167) | func (e *extension) deactivate() error {
  type proxyExtension (line 171) | type proxyExtension struct
    method init (line 177) | func (e *proxyExtension) init(c *config, et types.EngagementType, comp...
    method activate (line 184) | func (e *proxyExtension) activate(*transformer) (*engagement, error) {
    method name (line 189) | func (e *proxyExtension) name() string {
    method servicePorts (line 194) | func (e *proxyExtension) servicePorts() []types.PortMapping {
  type engageExtension (line 198) | type engageExtension struct
    method init (line 204) | func (e *engageExtension) init(c *config, et types.EngagementType, com...
    method name (line 213) | func (e *engageExtension) name() string {
    method workload (line 218) | func (e *engageExtension) workload() string {
    method needsVolumes (line 222) | func (e *engageExtension) needsVolumes() bool {
    method desiredRemoteMounts (line 226) | func (e *engageExtension) desiredRemoteMounts(remoteMounts types.Mount...
  type httpFilterExtension (line 255) | type httpFilterExtension struct
    method amendInterceptSpec (line 265) | func (e *httpFilterExtension) amendInterceptSpec(spec *manager.Interce...
    method servicePorts (line 283) | func (e *httpFilterExtension) servicePorts() []types.PortMapping {
  type interceptExtension (line 287) | type interceptExtension struct
    method deactivate (line 294) | func (e *interceptExtension) deactivate() error {
    method init (line 298) | func (e *interceptExtension) init(c *config, et types.EngagementType, ...
    method workload (line 306) | func (e *interceptExtension) workload() string {
    method activate (line 310) | func (e *interceptExtension) activate(t *transformer) (*engagement, er...
    method engaged (line 314) | func (e *interceptExtension) engaged() (*engagement, error) {
    method service (line 318) | func (e *interceptExtension) service() string {
    method toPod (line 322) | func (e *interceptExtension) toPod() []types.PortAndProto {
    method createInterceptRequest (line 326) | func (e *interceptExtension) createInterceptRequest(localMountPort uin...
  type ingestExtension (line 340) | type ingestExtension struct
    method activate (line 346) | func (e *ingestExtension) activate(t *transformer) (*engagement, error) {
    method container (line 385) | func (e *ingestExtension) container() string {
    method deactivate (line 389) | func (e *ingestExtension) deactivate() error {
    method engaged (line 409) | func (e *ingestExtension) engaged() (*engagement, error) {
    method toPod (line 414) | func (e *ingestExtension) toPod() []types.PortAndProto {
  type replaceExtension (line 418) | type replaceExtension struct
    method activate (line 431) | func (e *replaceExtension) activate(t *transformer) (*engagement, erro...
    method deactivate (line 435) | func (e *replaceExtension) deactivate() error {
    method engaged (line 439) | func (e *replaceExtension) engaged() (*engagement, error) {
    method container (line 443) | func (e *replaceExtension) container() string {
    method containerPorts (line 447) | func (e *replaceExtension) containerPorts() []types.PortMapping {
    method toPod (line 451) | func (e *replaceExtension) toPod() []types.PortAndProto {
    method createInterceptRequest (line 491) | func (e *replaceExtension) createInterceptRequest(localMountPort uint1...
  type wiretapExtension (line 455) | type wiretapExtension struct
    method activate (line 462) | func (e *wiretapExtension) activate(t *transformer) (*engagement, erro...
    method deactivate (line 466) | func (e *wiretapExtension) deactivate() error {
    method engaged (line 470) | func (e *wiretapExtension) engaged() (*engagement, error) {
    method service (line 474) | func (e *wiretapExtension) service() string {
    method createInterceptRequest (line 478) | func (e *wiretapExtension) createInterceptRequest(localMountPort uint1...
  function addPortsSpec (line 512) | func addPortsSpec(spec *manager.InterceptSpec, ports []types.PortMapping...
  function createInterceptRequest (line 536) | func createInterceptRequest(e workloadExtension, localMountPort uint16) ...
  function activateIntercept (line 550) | func activateIntercept(e workloadExtension, t *transformer) (*engagement...
  function deactivateIntercept (line 583) | func deactivateIntercept(e workloadExtension) error {

FILE: pkg/client/cli/docker/compose/extension_test.go
  function TestAmendInterceptSpec_MechanismSetToHTTP (line 13) | func TestAmendInterceptSpec_MechanismSetToHTTP(t *testing.T) {
  function TestAmendInterceptSpec_HeaderFiltersPopulated (line 77) | func TestAmendInterceptSpec_HeaderFiltersPopulated(t *testing.T) {
  function TestAmendInterceptSpec_NoPorts_ReturnsError (line 90) | func TestAmendInterceptSpec_NoPorts_ReturnsError(t *testing.T) {

FILE: pkg/client/cli/docker/compose/toplevelextension.go
  type volumeMountPolicy (line 11) | type volumeMountPolicy struct
    method Matches (line 17) | func (v *volumeMountPolicy) Matches(volumeName string) bool {
  type topLevelExtension (line 21) | type topLevelExtension struct
    method parse (line 26) | func (tl *topLevelExtension) parse(v any) error {

FILE: pkg/client/cli/docker/compose/transform.go
  type transformer (line 28) | type transformer struct
    method addEngagement (line 59) | func (t *transformer) addEngagement(engagement *engagement) {
    method createProject (line 63) | func (t *transformer) createProject(cmdName, composeFile string) ([]st...
    method marshalYAML (line 91) | func (t *transformer) marshalYAML() ([]byte, error) {
    method engage (line 95) | func (t *transformer) engage(ctx context.Context, e serviceExtension, ...
    method disengage (line 113) | func (t *transformer) disengage(ctx context.Context) {
    method runCommand (line 128) | func (t *transformer) runCommand(ctx context.Context, name string) err...
    method runCompose (line 193) | func (t *transformer) runCompose(ctx context.Context, name, composeFil...
    method runAttachedUp (line 203) | func (t *transformer) runAttachedUp(parentCtx context.Context, compose...
    method serviceExtensions (line 238) | func (t *transformer) serviceExtensions() (ses map[string]serviceExten...
    method volumes (line 242) | func (t *transformer) volumes() *xsync.Map[string, *compose.VolumeConf...
    method withProfiles (line 246) | func (t *transformer) withProfiles(profiles []string) error {
    method applyEngagements (line 255) | func (t *transformer) applyEngagements() error {
    method ensureTopLevelExtension (line 304) | func (t *transformer) ensureTopLevelExtension(p *compose.Project) error {
    method connections (line 326) | func (t *transformer) connections() []*connection {
    method createConfigFile (line 341) | func (t *transformer) createConfigFile(ctx context.Context, canCreate,...
  function newTransformer (line 37) | func newTransformer(config *config, p *compose.Project) (tr *transformer...

FILE: pkg/client/cli/docker/flags.go
  type Flags (line 16) | type Flags struct
    method AddFlags (line 29) | func (f *Flags) AddFlags(flagSet *pflag.FlagSet, what string) {
    method Validate (line 48) | func (f *Flags) Validate(args []string) error {
    method PullOrBuildImage (line 100) | func (f *Flags) PullOrBuildImage(ctx context.Context) error {
    method GetContainerNameAndArgs (line 123) | func (f *Flags) GetContainerNameAndArgs(defaultContainerName string) (...
    method AdjustImageIndex (line 136) | func (f *Flags) AdjustImageIndex(adjust int) {
  function firstArg (line 160) | func firstArg(args []string) (string, int) {

FILE: pkg/client/cli/docker/published_ports.go
  type PublishedPort (line 10) | type PublishedPort struct
    method writeTo (line 66) | func (c PublishedPort) writeTo(sb *strings.Builder) {
    method String (line 81) | func (c PublishedPort) String() string {
  function parsePort (line 16) | func parsePort(s string) (uint16, error) {
  function parsePublishedPort (line 24) | func parsePublishedPort(pp string) (PublishedPort, error) {
  function writePort (line 62) | func writePort(sb *strings.Builder, port uint16) {
  type PublishedPorts (line 87) | type PublishedPorts
    method String (line 89) | func (p *PublishedPorts) String() string {
    method Set (line 103) | func (p *PublishedPorts) Set(s string) error {
    method Type (line 107) | func (p *PublishedPorts) Type() string {
    method Append (line 111) | func (p *PublishedPorts) Append(s string) error {
    method Replace (line 119) | func (p *PublishedPorts) Replace(vals []string) error {
    method GetSlice (line 132) | func (p *PublishedPorts) GetSlice() []string {

FILE: pkg/client/cli/docker/run_flags.go
  type Volume (line 10) | type Volume struct
    method String (line 16) | func (v *Volume) String() string {
  type Mount (line 29) | type Mount struct
    method String (line 41) | func (m *Mount) String() string {
  type Network (line 36) | type Network struct
  type RunFlags (line 60) | type RunFlags struct
  function ParseRunFlags (line 66) | func ParseRunFlags(args []string) (*RunFlags, []string, error) {

FILE: pkg/client/cli/docker/runner.go
  type Runner (line 33) | type Runner struct
    method Run (line 41) | func (s *Runner) Run(ctx context.Context, waitMessage string, args ......
    method adjustMounts (line 113) | func (s *Runner) adjustMounts(ctx context.Context, runFlags *RunFlags,...
    method start (line 153) | func (s *Runner) start(ctx context.Context, envFile string, runFlags *...
  type waiter (line 230) | type waiter struct
    method wait (line 245) | func (w *waiter) wait(ctx context.Context) error {
  function EnsureStopContainer (line 278) | func EnsureStopContainer(ctx context.Context, name, containerID string, ...

FILE: pkg/client/cli/env/flags.go
  type Flags (line 7) | type Flags struct
    method AddFlags (line 13) | func (f *Flags) AddFlags(flagSet *pflag.FlagSet) {
    method MaybeWrite (line 22) | func (f *Flags) MaybeWrite(env map[string]string) error {

FILE: pkg/client/cli/env/syntax.go
  type Syntax (line 19) | type Syntax
    method Set (line 55) | func (e *Syntax) Set(n string) error {
    method String (line 65) | func (e Syntax) String() string {
    method Type (line 73) | func (e Syntax) Type() string {
    method writeFile (line 78) | func (e Syntax) writeFile(fileName string, env map[string]string) error {
    method WriteToFileAndClose (line 93) | func (e Syntax) WriteToFileAndClose(file *os.File, env map[string]stri...
    method WriteEntry (line 130) | func (e Syntax) WriteEntry(k, v string) (r string, err error) {
  constant SyntaxDocker (line 22) | SyntaxDocker Syntax = iota
  constant SyntaxCompose (line 23) | SyntaxCompose
  constant SyntaxSh (line 24) | SyntaxSh
  constant SyntaxShExport (line 25) | SyntaxShExport
  constant SyntaxCsh (line 26) | SyntaxCsh
  constant SyntaxCshExport (line 27) | SyntaxCshExport
  constant SyntaxPS (line 28) | SyntaxPS
  constant SyntaxPSExport (line 29) | SyntaxPSExport
  constant SyntaxCmd (line 30) | SyntaxCmd
  constant SyntaxJSON (line 31) | SyntaxJSON
  function SyntaxUsage (line 47) | func SyntaxUsage() string {
  function quotePS (line 166) | func quotePS(s string) string {
  function quoteCompose (line 183) | func quoteCompose(s string) string {

FILE: pkg/client/cli/env/syntax_test.go
  function TestSyntax_WriteEntry (line 9) | func TestSyntax_WriteEntry(t *testing.T) {

FILE: pkg/client/cli/flags/addunique.go
  function AddUnique (line 9) | func AddUnique(dst *pflag.FlagSet, src *pflag.FlagSet) (err error) {

FILE: pkg/client/cli/flags/context.go
  type flagSetsKey (line 9) | type flagSetsKey struct
  function WithFlagSets (line 11) | func WithFlagSets(ctx context.Context, flagSets ...*pflag.FlagSet) conte...
  function GetFlagSets (line 18) | func GetFlagSets(ctx context.Context) []*pflag.FlagSet {

FILE: pkg/client/cli/flags/deprecation.go
  function DeprecationIfChanged (line 14) | func DeprecationIfChanged(cmd *cobra.Command, flagName, alternative stri...

FILE: pkg/client/cli/flags/map.go
  function Map (line 10) | func Map(flags *pflag.FlagSet) map[string]string {

FILE: pkg/client/cli/flags/unparsed.go
  function GetUnparsedValue (line 13) | func GetUnparsedValue(longForm string, shortForm byte, isBool bool, args...
  function GetUnparsedValues (line 20) | func GetUnparsedValues(longForm string, shortForm byte, args []string) (...
  function ConsumeUnparsedValue (line 40) | func ConsumeUnparsedValue(longForm string, shortForm byte, isBool bool, ...
  function GetUnparsedBoolean (line 133) | func GetUnparsedBoolean(args []string, flag string) (bool, bool, error) {
  function HasOption (line 145) | func HasOption(longForm string, shortForm byte, args []string) bool {

FILE: pkg/client/cli/flags/unparsed_test.go
  function TestConsumeUnparsedFlagValue (line 9) | func TestConsumeUnparsedFlagValue(t *testing.T) {
  function TestGetUnparsedFlagBoolean (line 196) | func TestGetUnparsedFlagBoolean(t *testing.T) {

FILE: pkg/client/cli/flags/zerovalue.go
  function IsZeroValue (line 4) | func IsZeroValue(str string) bool {

FILE: pkg/client/cli/global/flags.go
  constant FlagConfig (line 18) | FlagConfig   = "config"
  constant FlagContext (line 19) | FlagContext  = "context"
  constant FlagDocker (line 20) | FlagDocker   = "docker"
  constant FlagNoReport (line 21) | FlagNoReport = "no-report"
  constant FlagOutput (line 22) | FlagOutput   = "output"
  constant FlagProgress (line 23) | FlagProgress = "progress"
  constant FlagUse (line 24) | FlagUse      = "use"
  function replaceHomeDir (line 29) | func replaceHomeDir(ctx context.Context, dir string) string {
  function Flags (line 37) | func Flags(ctx context.Context, hasKubeFlags, markdown bool) *pflag.Flag...
  function SetProgressQuiet (line 61) | func SetProgressQuiet(cmd *cobra.Command) {
  function InitConfig (line 67) | func InitConfig(cmd *cobra.Command) error {

FILE: pkg/client/cli/helm/chart.go
  function loadCoreChart (line 25) | func loadCoreChart(version semver.Version) (*chart.Chart, error) {
  function newDefaultRegistryClient (line 33) | func newDefaultRegistryClient(ctx context.Context) (*registry.Client, er...
  function withDownloadedChart (line 40) | func withDownloadedChart(ctx context.Context, helmConfig *action.Configu...
  function pullCoreChart (line 68) | func pullCoreChart(ctx context.Context, helmConfig *action.Configuration...
  function coalesceValues (line 82) | func coalesceValues(ctx context.Context, req *Request) (map[string]any, ...
  function loadOrPullChart (line 105) | func loadOrPullChart(ctx context.Context, helmConfig *action.Configurati...

FILE: pkg/client/cli/helm/install.go
  constant helmDriver (line 33) | helmDriver                = "secrets"
  constant trafficManagerReleaseName (line 34) | trafficManagerReleaseName = agentconfig.ManagerAppName
  type RequestType (line 39) | type RequestType
  constant Install (line 42) | Install RequestType = iota
  constant Upgrade (line 43) | Upgrade
  constant Uninstall (line 44) | Uninstall
  constant Lint (line 45) | Lint
  type Request (line 48) | type Request struct
    method Run (line 60) | func (hr *Request) Run(ctx context.Context, cr *connector.ConnectReque...
  function getHelmConfig (line 132) | func getHelmConfig(ctx context.Context, clientGetter genericclioptions.R...
  function GetValues (line 144) | func GetValues(ctx context.Context, req *Request) map[string]any {
  function timedRun (line 191) | func timedRun(ctx context.Context, run func(time.Duration) error) error {
  function installNew (line 212) | func installNew(
  function upgradeExisting (line 237) | func upgradeExisting(
  function uninstallExisting (line 262) | func uninstallExisting(ctx context.Context, helmConfig *action.Configura...
  function isInstalled (line 276) | func isInstalled(
  function EnsureTrafficManager (line 322) | func EnsureTrafficManager(ctx context.Context, clientGetter genericcliop...
  function ensureIsInstalled (line 327) | func ensureIsInstalled(
  function DeleteTrafficManager (line 394) | func DeleteTrafficManager(
  function ensureIsDeleted (line 404) | func ensureIsDeleted(
  function getTrafficManagerVersion (line 436) | func getTrafficManagerVersion(values map[string]any) (semver.Version, er...

FILE: pkg/client/cli/helm/lint.go
  function lint (line 19) | func lint(ctx context.Context, clientGetter genericclioptions.RESTClient...
  function runLint (line 59) | func runLint(path, namespace string, vals map[string]any, req *Request) ...

FILE: pkg/client/cli/helm/release.go
  function getHelmRelease (line 13) | func getHelmRelease(ctx context.Context, releaseName string, helmConfig ...
  function releaseVer (line 59) | func releaseVer(rel *release.Release) string {

FILE: pkg/client/cli/ingest/command.go
  type Command (line 20) | type Command struct
    method AddFlags (line 32) | func (c *Command) AddFlags(cmd *cobra.Command) {
    method Validate (line 49) | func (c *Command) Validate(cmd *cobra.Command, positional []string) er...
    method Run (line 65) | func (c *Command) Run(cmd *cobra.Command, positional []string) error {
  function AutocompleteContainer (line 77) | func AutocompleteContainer(cmd *cobra.Command, args []string, _ string) ...

FILE: pkg/client/cli/ingest/info.go
  type Info (line 14) | type Info struct
    method String (line 41) | func (ii *Info) String() string {
    method WriteTo (line 47) | func (ii *Info) WriteTo(w io.Writer) (int64, error) {
  function NewInfo (line 23) | func NewInfo(ctx context.Context, ii *rpc.IngestInfo, mountError error) ...

FILE: pkg/client/cli/ingest/state.go
  type State (line 26) | type State interface
  type state (line 32) | type state struct
    method SetSelf (line 54) | func (s *state) SetSelf(self State) {
    method CreateRequest (line 58) | func (s *state) CreateRequest() (*rpc.IngestRequest, error) {
    method RunAndLeave (line 78) | func (s *state) RunAndLeave() bool {
    method Run (line 82) | func (s *state) Run(ctx context.Context) error {
    method create (line 109) | func (s *state) create(ctx context.Context) (acquired bool, err error) {
    method leave (line 170) | func (s *state) leave(ctx context.Context) error {
    method runCommand (line 191) | func (s *state) runCommand(ctx context.Context) error {
  function NewState (line 42) | func NewState(

FILE: pkg/client/cli/intercept/command.go
  type Command (line 34) | type Command struct
    method UsesHTTPMechanism (line 73) | func (c *Command) UsesHTTPMechanism() bool {
    method AddInterceptFlags (line 119) | func (c *Command) AddInterceptFlags(cmd *cobra.Command) {
    method AddReplaceFlags (line 193) | func (c *Command) AddReplaceFlags(cmd *cobra.Command) {
    method Validate (line 224) | func (c *Command) Validate(cmd *cobra.Command, positional []string) er...
    method ValidateReplace (line 302) | func (c *Command) ValidateReplace(cmd *cobra.Command, positional []str...
    method Run (line 333) | func (c *Command) Run(cmd *cobra.Command, positional []string) error {
    method RunReplace (line 341) | func (c *Command) RunReplace(cmd *cobra.Command, positional []string) ...
    method validatedRun (line 349) | func (c *Command) validatedRun(cmd *cobra.Command) error {
  function parseKeyValue (line 87) | func parseKeyValue(kv string) (string, string, error) {
  function tryParseHeaderWithSeparator (line 104) | func tryParseHeaderWithSeparator(header, separator string) (string, stri...
  function autocompleteService (line 359) | func autocompleteService(cmd *cobra.Command, args []string, toComplete s...
  function ValidArgs (line 405) | func ValidArgs(cmd *cobra.Command, args []string, toComplete string) ([]...
  function BuildPathFilters (line 451) | func BuildPathFilters(equals, prefixes, regexps []string) []string {

FILE: pkg/client/cli/intercept/command_test.go
  function TestCommand_Validate_HTTPIntercepts (line 15) | func TestCommand_Validate_HTTPIntercepts(t *testing.T) {
  function TestCommand_UsesHTTPMechanism (line 127) | func TestCommand_UsesHTTPMechanism(t *testing.T) {
  function TestParseHTTPHeader (line 184) | func TestParseHTTPHeader(t *testing.T) {
  function TestCommand_HeaderParsing (line 278) | func TestCommand_HeaderParsing(t *testing.T) {
  function TestCommand_UDPHTTPValidation (line 329) | func TestCommand_UDPHTTPValidation(t *testing.T) {

FILE: pkg/client/cli/intercept/describe_intercepts.go
  function DescribeIntercepts (line 12) | func DescribeIntercepts(ctx context.Context, iis []*manager.InterceptInf...
  function describeIntercept (line 58) | func describeIntercept(ctx context.Context, ii *manager.InterceptInfo, v...
  function describeIngest (line 64) | func describeIngest(ctx context.Context, ig *rpc.IngestInfo, volumeMount...

FILE: pkg/client/cli/intercept/info.go
  type Ingress (line 22) | type Ingress struct
  type Info (line 29) | type Info struct
    method String (line 112) | func (ii *Info) String() string {
    method WriteTo (line 118) | func (ii *Info) WriteTo(w io.Writer) (int64, error) {
  function NewInfo (line 57) | func NewInfo(ctx context.Context, ii *manager.InterceptInfo, ro bool, mo...

FILE: pkg/client/cli/intercept/info_test.go
  function TestInfo_HTTPFilterDisplay (line 13) | func TestInfo_HTTPFilterDisplay(t *testing.T) {
  function TestNewInfo_HTTPFilterPopulation (line 161) | func TestNewInfo_HTTPFilterPopulation(t *testing.T) {
  function TestInfo_WriteTo_HTTPFilterFormatting (line 246) | func TestInfo_WriteTo_HTTPFilterFormatting(t *testing.T) {

FILE: pkg/client/cli/intercept/state.go
  type State (line 30) | type State interface
  type state (line 37) | type state struct
    method SetSelf (line 63) | func (s *state) SetSelf(self State) {
    method CreateRequest (line 79) | func (s *state) CreateRequest(ctx context.Context) (*connector.CreateI...
    method Name (line 154) | func (s *state) Name() string {
    method RunAndLeave (line 158) | func (s *state) RunAndLeave() bool {
    method Run (line 162) | func (s *state) Run(ctx context.Context) (*Info, error) {
    method what (line 204) | func (s *state) what() string {
    method create (line 214) | func (s *state) create(ctx context.Context) (acquired bool, err error) {
    method leave (line 271) | func (s *state) leave(ctx context.Context) error {
    method runCommand (line 299) | func (s *state) runCommand(ctx context.Context) error {
  function NewState (line 51) | func NewState(
  function keyValueMap (line 67) | func keyValueMap(keyValueStrings []string) (m map[string]string) {
  function parsePort (line 333) | func parsePort(portSpec string, dockerRun, containerized bool) (local ui...

FILE: pkg/client/cli/main.go
  function InitContext (line 23) | func InitContext(ctx context.Context) context.Context {
  function Main (line 56) | func Main(ctx context.Context, args []string) {
  function summarizeLogs (line 106) | func summarizeLogs(ctx context.Context, cmd *cobra.Command) bool {

FILE: pkg/client/cli/mount/flags.go
  type Flags (line 23) | type Flags struct
    method AddFlags (line 30) | func (f *Flags) AddFlags(flagSet *pflag.FlagSet, forceReadOnly bool) {
    method Validate (line 43) | func (f *Flags) Validate(cmd *cobra.Command) error {
    method ValidateConnected (line 70) | func (f *Flags) ValidateConnected(ctx context.Context) (err error) {
  function checkCapability (line 115) | func checkCapability(ctx context.Context) error {

FILE: pkg/client/cli/mount/info.go
  type Info (line 11) | type Info struct
  function NewInfo (line 21) | func NewInfo(ctx context.Context, env map[string]string, ftpPort, sftpPo...

FILE: pkg/client/cli/mount/prepare_unix.go
  function prepare (line 13) | func prepare(ctx context.Context, cwd string, mountPoint string) (string...

FILE: pkg/client/cli/mount/prepare_windows.go
  function prepare (line 13) | func prepare(_ context.Context, _ string, mountPoint string) (string, er...

FILE: pkg/client/cli/output/output.go
  function Out (line 24) | func Out(ctx context.Context) io.Writer {
  function Err (line 34) | func Err(ctx context.Context) io.Writer {
  function Info (line 45) | func Info(ctx context.Context) io.Writer {
  function Object (line 63) | func Object(ctx context.Context, obj any, override bool) {
  function DefaultYAML (line 92) | func DefaultYAML(cmd *cobra.Command, _ []string) error {
  function Execute (line 116) | func Execute(cmd *cobra.Command) (*cobra.Command, bool, error) {
  function SetFormat (line 177) | func SetFormat(cmd *cobra.Command, _ []string) error {
  function WantsFormatted (line 202) | func WantsFormatted(cmd *cobra.Command) bool {
  function WantsStream (line 208) | func WantsStream(cmd *cobra.Command) bool {
  function validateFlag (line 213) | func validateFlag(cmd *cobra.Command) (format, error) {
  type format (line 233) | type format
  type key (line 234) | type key struct
  type output (line 235) | type output struct
    method Write (line 257) | func (o *output) Write(data []byte) (int, error) {
  type object (line 242) | type object struct
    method hasCmdOnly (line 264) | func (o *object) hasCmdOnly() bool {
  constant formatDefault (line 251) | formatDefault = format(iota)
  constant formatJSON (line 252) | formatJSON
  constant formatYAML (line 253) | formatYAML
  constant formatJSONStream (line 254) | formatJSONStream

FILE: pkg/client/cli/output/output_test.go
  function TestWithOutput (line 19) | func TestWithOutput(t *testing.T) {

FILE: pkg/client/cli/progress/colors.go
  type noColor (line 23) | type noColor struct
    method With (line 25) | func (a noColor) With(_ ...aec.ANSI) aec.ANSI {
    method Apply (line 29) | func (noColor) Apply(s string) string {
    method String (line 33) | func (noColor) String() string {

FILE: pkg/client/cli/progress/event.go
  type EventStatus (line 32) | type EventStatus
    method color (line 42) | func (s EventStatus) color() aec.ANSI {
    method MarshalJSONTo (line 57) | func (s EventStatus) MarshalJSONTo(out *jsontext.Encoder) error {
    method String (line 61) | func (s EventStatus) String() string {
  constant EventStatusWorking (line 35) | EventStatusWorking EventStatus = iota
  constant EventStatusDone (line 36) | EventStatusDone
  constant EventStatusInfo (line 37) | EventStatusInfo
  constant EventStatusWarning (line 38) | EventStatusWarning
  constant EventStatusError (line 39) | EventStatusError
  type Event (line 77) | type Event struct
    method WithText (line 159) | func (e *Event) WithText(msg string) *Event {
    method AddChild (line 164) | func (e *Event) AddChild(status EventStatus, text, statusText string) ...
    method PlainAlways (line 172) | func (e *Event) PlainAlways() *Event {
    method Pump (line 177) | func (e *Event) Pump(ctx context.Context, status EventStatus) io.Writer {
    method stop (line 199) | func (e *Event) stop() {
    method child (line 206) | func (e *Event) child(id string) *Event {
    method merge (line 215) | func (e *Event) merge(o *Event) {
    method Spinner (line 296) | func (e *Event) Spinner() string {
  function ErrorMessageEvent (line 93) | func ErrorMessageEvent(id string, msg string) *Event {
  function WarningMessageEvent (line 98) | func WarningMessageEvent(id string, msg string) *Event {
  function InfoMessageEvent (line 103) | func InfoMessageEvent(id string, msg string) *Event {
  function StartingEvent (line 108) | func StartingEvent(id string) *Event {
  function StartedEvent (line 113) | func StartedEvent(id string) *Event {
  function StoppedEvent (line 118) | func StoppedEvent(id string) *Event {
  function BuildingEvent (line 123) | func BuildingEvent(id string) *Event {
  function BuiltEvent (line 128) | func BuiltEvent(id string) *Event {
  function WorkingEvent (line 133) | func WorkingEvent(id, verb string) *Event {
  function DoneEvent (line 138) | func DoneEvent(id, verb string) *Event {
  function NewEvent (line 142) | func NewEvent(id string, status EventStatus, statusText string) *Event {
  constant spinnerDone (line 291) | spinnerDone    = "✔"
  constant spinnerWarning (line 292) | spinnerWarning = "!"
  constant spinnerError (line 293) | spinnerError   = "✘"

FILE: pkg/client/cli/progress/json.go
  type jsonWriter (line 27) | type jsonWriter struct
    method Start (line 31) | func (p *jsonWriter) Start(context.Context, string) {
    method IsNoOp (line 34) | func (p *jsonWriter) IsNoOp() bool {
    method write (line 38) | func (p *jsonWriter) write(e *Event) {
    method Write (line 45) | func (p *jsonWriter) Write(events ...*Event) {
    method TailMsgf (line 55) | func (p *jsonWriter) TailMsgf(msg string, args ...any) {
    method Stop (line 62) | func (p *jsonWriter) Stop() {
    method TriggerRefresh (line 65) | func (p *jsonWriter) TriggerRefresh() {
  type tailMsg (line 51) | type tailMsg struct

FILE: pkg/client/cli/progress/noop.go
  type noopWriter (line 23) | type noopWriter struct
    method Start (line 25) | func (p noopWriter) Start(context.Context, string) {
    method IsNoOp (line 28) | func (p noopWriter) IsNoOp() bool {
    method Write (line 32) | func (p noopWriter) Write(...*Event) {
    method TailMsgf (line 35) | func (p noopWriter) TailMsgf(_ string, _ ...any) {
    method Stop (line 38) | func (p noopWriter) Stop() {
    method TriggerRefresh (line 41) | func (p noopWriter) TriggerRefresh() {

FILE: pkg/client/cli/progress/plain.go
  type plainWriter (line 27) | type plainWriter struct
    method IsNoOp (line 32) | func (p plainWriter) IsNoOp() bool {
    method Start (line 36) | func (p plainWriter) Start(context.Context, string) {
    method Stop (line 39) | func (p plainWriter) Stop() {
    method Write (line 42) | func (p plainWriter) Write(events ...*Event) {
    method TailMsgf (line 59) | func (p plainWriter) TailMsgf(msg string, args ...any) {
    method TriggerRefresh (line 63) | func (p plainWriter) TriggerRefresh() {

FILE: pkg/client/cli/progress/quiet.go
  type quiet (line 21) | type quiet struct
    method Start (line 23) | func (q quiet) Start(context.Context, string) {
    method IsNoOp (line 26) | func (q quiet) IsNoOp() bool {
    method Stop (line 30) | func (q quiet) Stop() {
    method Write (line 33) | func (q quiet) Write(...*Event) {
    method TailMsgf (line 36) | func (q quiet) TailMsgf(_ string, _ ...any) {
    method TriggerRefresh (line 39) | func (q quiet) TriggerRefresh() {

FILE: pkg/client/cli/progress/spinner.go
  type spinner (line 24) | type spinner struct
    method String (line 51) | func (s *spinner) String() string {
    method Stop (line 64) | func (s *spinner) Stop() {
    method Restart (line 68) | func (s *spinner) Restart() {
  function newSpinner (line 32) | func newSpinner() *spinner {

FILE: pkg/client/cli/progress/tty.go
  type ttyWriter (line 36) | type ttyWriter struct
    method Start (line 60) | func (w *ttyWriter) Start(ctx context.Context, progressTitle string) {
    method IsNoOp (line 86) | func (w *ttyWriter) IsNoOp() bool {
    method Stop (line 90) | func (w *ttyWriter) Stop() {
    method event (line 97) | func (w *ttyWriter) event(e *Event) {
    method Write (line 107) | func (w *ttyWriter) Write(events ...*Event) {
    method TriggerRefresh (line 116) | func (w *ttyWriter) TriggerRefresh() {
    method print (line 120) | func (w *ttyWriter) print() {
    method lineText (line 206) | func (w *ttyWriter) lineText(event *Event, withID bool, terminalWidth,...
  function newTTYWriter (line 50) | func newTTYWriter(out io.Writer) Writer {
  function writePad (line 317) | func writePad(bld *strings.Builder, padLen int) {
  function numDone (line 323) | func numDone(events map[string]*Event) int {

FILE: pkg/client/cli/progress/tty_test.go
  function TestLineText (line 28) | func TestLineText(t *testing.T) {
  function TestEventTruncate (line 92) | func TestEventTruncate(t *testing.T) {
  function TestErrorEventWrap (line 117) | func TestErrorEventWrap(t *testing.T) {
  function TestLineTextSingleEvent (line 137) | func TestLineTextSingleEvent(t *testing.T) {
  function TestErrorEvent (line 158) | func TestErrorEvent(t *testing.T) {
  function TestWarningEvent (line 193) | func TestWarningEvent(t *testing.T) {
  function tty (line 228) | func tty() *ttyWriter {

FILE: pkg/client/cli/progress/writer.go
  type Writer (line 30) | type Writer interface
  type writerKey (line 48) | type writerKey struct
  function WithContextWriter (line 51) | func WithContextWriter(ctx context.Context, writer Writer) context.Conte...
  function ContextWriter (line 56) | func ContextWriter(ctx context.Context) Writer {
  type eventIdKey (line 64) | type eventIdKey struct
  function WithEventId (line 66) | func WithEventId(ctx context.Context, id string) context.Context {
  function EventId (line 74) | func EventId(ctx context.Context) string {
  function IsNoOp (line 82) | func IsNoOp(ctx context.Context) bool {
  function Start (line 86) | func Start(ctx context.Context, title string) {
  function Stop (line 92) | func Stop(ctx context.Context) {
  function Working (line 96) | func Working(ctx context.Context, args ...any) *Event {
  function Workingf (line 100) | func Workingf(ctx context.Context, format string, args ...any) *Event {
  function Done (line 104) | func Done(ctx context.Context, args ...any) *Event {
  function Donef (line 108) | func Donef(ctx context.Context, format string, args ...any) *Event {
  function PrintDone (line 114) | func PrintDone(ctx context.Context, args ...any) *Event {
  function PrintDonef (line 120) | func PrintDonef(ctx context.Context, format string, args ...any) *Event {
  function Info (line 124) | func Info(ctx context.Context, args ...any) *Event {
  function Infof (line 128) | func Infof(ctx context.Context, format string, args ...any) *Event {
  function Error (line 132) | func Error(ctx context.Context, args ...any) *Event {
  function Errorf (line 136) | func Errorf(ctx context.Context, format string, args ...any) *Event {
  function Warning (line 140) | func Warning(ctx context.Context, args ...any) *Event {
  function Warningf (line 144) | func Warningf(ctx context.Context, format string, args ...any) *Event {
  function write (line 148) | func write(ctx context.Context, status EventStatus, plain bool, args []a...
  function writef (line 155) | func writef(ctx context.Context, status EventStatus, plain bool, format ...
  function Write (line 162) | func Write(ctx context.Context, events ...*Event) {
  function MaybeWriteError (line 166) | func MaybeWriteError(ctx context.Context, err error) error {
  type Mode (line 174) | type Mode
  constant ModeAuto (line 178) | ModeAuto = Mode("auto")
  constant ModeTTY (line 180) | ModeTTY = Mode("tty")
  constant ModePlain (line 182) | ModePlain = Mode("plain")
  constant ModeQuiet (line 184) | ModeQuiet = Mode("quiet")
  constant ModeJSON (line 186) | ModeJSON = Mode("json")
  function NewWriter (line 190) | func NewWriter(out, err io.Writer, mode Mode) Writer {

FILE: pkg/client/cmd_error.go
  function RunError (line 11) | func RunError(err error) error {

FILE: pkg/client/config.go
  type DefaultsAware (line 34) | type DefaultsAware interface
  function jsonName (line 41) | func jsonName(f reflect.StructField) string {
  function mapWithoutDefaults (line 58) | func mapWithoutDefaults[T DefaultsAware](sourceStruct T) map[string]any {
  function mergeNonDefaults (line 75) | func mergeNonDefaults[T DefaultsAware](targetStruct T, sourceStruct T) {
  function isDefault (line 91) | func isDefault[T DefaultsAware](sourceStruct T) bool {
  constant ConfigFile (line 95) | ConfigFile = "config.yml"
  type Config (line 97) | type Config interface
  type config (line 118) | type config struct
    method OSSpecific (line 132) | func (c *config) OSSpecific() *OSSpecificConfig {
    method Base (line 136) | func (c *config) Base() *config {
    method Timeouts (line 140) | func (c *config) Timeouts() *Timeouts {
    method LogLevels (line 144) | func (c *config) LogLevels() *LogLevels {
    method Images (line 148) | func (c *config) Images() *Images {
    method Grpc (line 152) | func (c *config) Grpc() *Grpc {
    method Intercept (line 156) | func (c *config) Intercept() *Intercept {
    method Cluster (line 160) | func (c *config) Cluster() *Cluster {
    method Docker (line 164) | func (c *config) Docker() *Docker {
    method DNS (line 168) | func (c *config) DNS() *DNS {
    method Routing (line 172) | func (c *config) Routing() *Routing {
    method Helm (line 176) | func (c *config) Helm() *Helm {
    method MarshalYAML (line 180) | func (c *config) MarshalYAML() ([]byte, error) {
    method DestructiveMerge (line 240) | func (c *config) DestructiveMerge(lc Config) {
    method Merge (line 254) | func (c *config) Merge(lc Config) Config {
    method String (line 261) | func (c *config) String() string {
  function UnmarshalJSONConfig (line 188) | func UnmarshalJSONConfig(data []byte, rejectUnknown bool) (Config, error) {
  function ParseConfigYAML (line 196) | func ParseConfigYAML(ctx context.Context, path string, data []byte) (Con...
  function WatchConfig (line 268) | func WatchConfig(c context.Context, onReload func(context.Context) error...
  type Timeouts (line 317) | type Timeouts struct
    method Get (line 395) | func (t *Timeouts) Get(timeoutID TimeoutID) time.Duration {
    method TimeoutContext (line 434) | func (t *Timeouts) TimeoutContext(ctx context.Context, timeoutID Timeo...
    method defaults (line 539) | func (t *Timeouts) defaults() DefaultsAware {
    method merge (line 544) | func (t *Timeouts) merge(o *Timeouts) {
    method IsZero (line 552) | func (t *Timeouts) IsZero() bool {
    method MarshalJSONTo (line 556) | func (t *Timeouts) MarshalJSONTo(out *jsontext.Encoder) error {
    method UnmarshalJSONFrom (line 560) | func (t *Timeouts) UnmarshalJSONFrom(in *jsontext.Decoder) error {
  type TimeoutID (line 336) | type TimeoutID
  constant TimeoutClusterConnect (line 340) | TimeoutClusterConnect TimeoutID = iota
  constant TimeoutConnectivityCheck (line 343) | TimeoutConnectivityCheck
  constant TimeoutEndpointDial (line 346) | TimeoutEndpointDial
  constant TimeoutHelm (line 349) | TimeoutHelm
  constant TimeoutIntercept (line 352) | TimeoutIntercept
  constant TimeoutProxyDial (line 355) | TimeoutProxyDial
  constant TimeoutRoundtripLatency (line 358) | TimeoutRoundtripLatency
  constant TimeoutTrafficManagerAPI (line 361) | TimeoutTrafficManagerAPI
  constant TimeoutTrafficManagerConnect (line 364) | TimeoutTrafficManagerConnect
  constant TimeoutFtpReadWrite (line 367) | TimeoutFtpReadWrite
  constant TimeoutFtpShutdown (line 370) | TimeoutFtpShutdown
  constant TimeoutContainerShutdown (line 373) | TimeoutContainerShutdown
  type timeoutContext (line 376) | type timeoutContext struct
    method Err (line 382) | func (ctx *timeoutContext) Err() error {
  type timeoutError (line 444) | type timeoutError struct
    method Error (line 451) | func (e timeoutError) Error() string {
    method Unwrap (line 497) | func (e timeoutError) Unwrap() error {
  function CheckTimeout (line 501) | func CheckTimeout(ctx context.Context, err error) error {
  constant defaultTimeoutsClusterConnect (line 509) | defaultTimeoutsClusterConnect        = 20 * time.Second
  constant defaultTimeoutsConnectivityCheck (line 510) | defaultTimeoutsConnectivityCheck     = 500 * time.Millisecond
  constant defaultTimeoutsEndpointDial (line 511) | defaultTimeoutsEndpointDial          = 3 * time.Second
  constant defaultTimeoutsHelm (line 512) | defaultTimeoutsHelm                  = 30 * time.Second
  constant defaultTimeoutsIntercept (line 513) | defaultTimeoutsIntercept             = 30 * time.Second
  constant defaultTimeoutsProxyDial (line 514) | defaultTimeoutsProxyDial             = 5 * time.Second
  constant defaultTimeoutsRoundtripLatency (line 515) | defaultTimeoutsRoundtripLatency      = 2 * time.Second
  constant defaultTimeoutsTrafficManagerAPI (line 516) | defaultTimeoutsTrafficManagerAPI     = 15 * time.Second
  constant defaultTimeoutsTrafficManagerConnect (line 517) | defaultTimeoutsTrafficManagerConnect = 60 * time.Second
  constant defaultTimeoutsFtpReadWrite (line 518) | defaultTimeoutsFtpReadWrite          = 1 * time.Minute
  constant defaultTimeoutsFtpShutdown (line 519) | defaultTimeoutsFtpShutdown           = 2 * time.Minute
  constant defaultTimeoutsContainerShutdown (line 520) | defaultTimeoutsContainerShutdown     = 0
  constant maxTimeoutsConnectivityCheck (line 521) | maxTimeoutsConnectivityCheck         = 5 * time.Second
  constant defaultLogLevelsCLI (line 570) | defaultLogLevelsCLI            = slog.LevelInfo
  constant defaultLogLevelsKubeAuthDaemon (line 571) | defaultLogLevelsKubeAuthDaemon = slog.LevelInfo
  constant defaultLogLevelsUserDaemon (line 572) | defaultLogLevelsUserDaemon     = slog.LevelInfo
  constant defaultLogLevelsRootDaemon (line 573) | defaultLogLevelsRootDaemon     = slog.LevelInfo
  type LogLevels (line 583) | type LogLevels struct
    method defaults (line 590) | func (ll *LogLevels) defaults() DefaultsAware {
    method merge (line 595) | func (ll *LogLevels) merge(o *LogLevels) {
    method IsZero (line 600) | func (ll *LogLevels) IsZero() bool {
    method MarshalJSONTo (line 604) | func (ll *LogLevels) MarshalJSONTo(out *jsontext.Encoder) error {
    method UnmarshalJSONFrom (line 608) | func (ll *LogLevels) UnmarshalJSONFrom(in *jsontext.Decoder) error {
  type Images (line 617) | type Images struct
    method defaults (line 632) | func (img *Images) defaults() DefaultsAware {
    method merge (line 637) | func (img *Images) merge(o *Images) {
    method IsZero (line 642) | func (img *Images) IsZero() bool {
    method MarshalJSONTo (line 646) | func (img *Images) MarshalJSONTo(out *jsontext.Encoder) error {
    method UnmarshalJSONFrom (line 650) | func (img *Images) UnmarshalJSONFrom(in *jsontext.Decoder) error {
    method Registry (line 659) | func (img *Images) Registry(c context.Context) string {
    method WebhookRegistry (line 669) | func (img *Images) WebhookRegistry(_ context.Context) string {
    method AgentImage (line 673) | func (img *Images) AgentImage(c context.Context) string {
    method ClientImage (line 680) | func (img *Images) ClientImage(c context.Context) string {
  constant defaultImagesRegistry (line 625) | defaultImagesRegistry = "ghcr.io/telepresenceio"
  type Grpc (line 687) | type Grpc struct
    method defaults (line 718) | func (g *Grpc) defaults() DefaultsAware {
    method merge (line 723) | func (g *Grpc) merge(o *Grpc) {
    method IsZero (line 728) | func (g *Grpc) IsZero() bool {
    method MarshalJSONTo (line 732) | func (g *Grpc) MarshalJSONTo(out *jsontext.Encoder) error {
    method UnmarshalJSONFrom (line 736) | func (g *Grpc) UnmarshalJSONFrom(in *jsontext.Decoder) error {
    method MaxReceiveSize (line 745) | func (g *Grpc) MaxReceiveSize() int64 {
  type DockerImage (line 758) | type DockerImage struct
  type Intercept (line 766) | type Intercept struct
    method defaults (line 773) | func (ic *Intercept) defaults() DefaultsAware {
    method merge (line 778) | func (ic *Intercept) merge(o *Intercept) {
    method IsZero (line 783) | func (ic *Intercept) IsZero() bool {
    method MarshalJSONTo (line 787) | func (ic *Intercept) MarshalJSONTo(out *jsontext.Encoder) error {
    method UnmarshalJSONFrom (line 791) | func (ic *Intercept) UnmarshalJSONFrom(in *jsontext.Decoder) error {
  type Cluster (line 800) | type Cluster struct
    method defaults (line 819) | func (cc *Cluster) defaults() DefaultsAware {
    method merge (line 824) | func (cc *Cluster) merge(o *Cluster) {
    method IsZero (line 829) | func (cc *Cluster) IsZero() bool {
    method MarshalJSONTo (line 833) | func (cc *Cluster) MarshalJSONTo(out *jsontext.Encoder) error {
    method UnmarshalJSONFrom (line 837) | func (cc *Cluster) UnmarshalJSONFrom(in *jsontext.Decoder) error {
  constant defaultDefaultManagerNamespace (line 812) | defaultDefaultManagerNamespace = ""
  type Telemount (line 846) | type Telemount
    method defaults (line 856) | func (tm *Telemount) defaults() DefaultsAware {
    method IsZero (line 860) | func (tm *Telemount) IsZero() bool {
    method MarshalJSONTo (line 864) | func (tm *Telemount) MarshalJSONTo(out *jsontext.Encoder) error {
    method UnmarshalJSONFrom (line 868) | func (tm *Telemount) UnmarshalJSONFrom(in *jsontext.Decoder) error {
  type Teleroute (line 877) | type Teleroute
    method defaults (line 887) | func (tr *Teleroute) defaults() DefaultsAware {
    method IsZero (line 891) | func (tr *Teleroute) IsZero() bool {
    method MarshalJSONTo (line 895) | func (tr *Teleroute) MarshalJSONTo(out *jsontext.Encoder) error {
    method UnmarshalJSONFrom (line 899) | func (tr *Teleroute) UnmarshalJSONFrom(in *jsontext.Decoder) error {
  type Docker (line 908) | type Docker struct
    method defaults (line 933) | func (d *Docker) defaults() DefaultsAware {
    method merge (line 938) | func (d *Docker) merge(o *Docker) {
    method IsZero (line 943) | func (d *Docker) IsZero() bool {
    method MarshalJSONTo (line 947) | func (d *Docker) MarshalJSONTo(out *jsontext.Encoder) error {
    method UnmarshalJSONFrom (line 951) | func (d *Docker) UnmarshalJSONFrom(in *jsontext.Decoder) error {
  constant DefaultHostGateway (line 919) | DefaultHostGateway = "host.docker.internal"
  constant defaultEnableIPv4 (line 920) | defaultEnableIPv4  = true
  constant defaultEnableIPv6 (line 921) | defaultEnableIPv6  = true
  type Helm (line 960) | type Helm struct
    method defaults (line 970) | func (d *Helm) defaults() DefaultsAware {
    method merge (line 975) | func (d *Helm) merge(o *Helm) {
    method IsZero (line 980) | func (d *Helm) IsZero() bool {
    method MarshalJSONTo (line 984) | func (d *Helm) MarshalJSONTo(out *jsontext.Encoder) error {
    method UnmarshalJSONFrom (line 988) | func (d *Helm) UnmarshalJSONFrom(in *jsontext.Decoder) error {
  constant defaultChartURL (line 964) | defaultChartURL = "oci://ghcr.io/telepresenceio/telepresence-oss"
  type Routing (line 997) | type Routing struct
    method defaults (line 1024) | func (r *Routing) defaults() DefaultsAware {
    method merge (line 1028) | func (r *Routing) merge(o *Routing) {
    method IsZero (line 1059) | func (r *Routing) IsZero() bool {
    method MarshalJSONTo (line 1063) | func (r *Routing) MarshalJSONTo(out *jsontext.Encoder) error {
    method UnmarshalJSONFrom (line 1067) | func (r *Routing) UnmarshalJSONFrom(in *jsontext.Decoder) error {
    method ToSnake (line 1367) | func (r *Routing) ToSnake() *RoutingSnake {
  constant defaultAutoResolveConflicts (line 1017) | defaultAutoResolveConflicts = true
  type configKey (line 1141) | type configKey struct
  function WithConfig (line 1144) | func WithConfig(ctx context.Context, cfg Config) context.Context {
  function GetConfig (line 1149) | func GetConfig(ctx context.Context) Config {
  function ReplaceConfig (line 1159) | func ReplaceConfig(ctx context.Context, cfg Config) bool {
  type configFileKey (line 1167) | type configFileKey struct
  function WithConfigFile (line 1170) | func WithConfigFile(ctx context.Context, configFile string) context.Cont...
  function GetConfigFile (line 1175) | func GetConfigFile(c context.Context) string {
  function GetDefaultConfig (line 1183) | func GetDefaultConfig() Config {
  function getDefaultConfig (line 1202) | func getDefaultConfig() *config {
  function LoadConfig (line 1210) | func LoadConfig(c context.Context) (cfg Config, err error) {
  type RoutingSnake (line 1229) | type RoutingSnake struct
  type DNSMapping (line 1241) | type DNSMapping struct
  type DNSMappings (line 1246) | type DNSMappings
    method FromRPC (line 1248) | func (d *DNSMappings) FromRPC(rpcMappings []*daemon.DNSMapping) {
    method ToRPC (line 1258) | func (d DNSMappings) ToRPC() []*daemon.DNSMapping {
  type DNS (line 1269) | type DNS struct
    method Equal (line 1076) | func (d *DNS) Equal(o *DNS) bool {
    method defaults (line 1102) | func (d *DNS) defaults() DefaultsAware {
    method merge (line 1107) | func (d *DNS) merge(o *DNS) {
    method IsZero (line 1112) | func (d *DNS) IsZero() bool {
    method MarshalJSONTo (line 1116) | func (d *DNS) MarshalJSONTo(out *jsontext.Encoder) error {
    method UnmarshalJSONFrom (line 1120) | func (d *DNS) UnmarshalJSONFrom(in *jsontext.Decoder) error {
    method ToRPC (line 1310) | func (d *DNS) ToRPC() *daemon.DNSConfig {
    method ToSnake (line 1338) | func (d *DNS) ToSnake() *DNSSnake {
  type DNSSnake (line 1297) | type DNSSnake struct
  function MappingsFromRPC (line 1353) | func MappingsFromRPC(mappings []*daemon.DNSMapping) DNSMappings {
  type SessionConfig (line 1379) | type SessionConfig struct
    method UnmarshalJSON (line 1385) | func (sc *SessionConfig) UnmarshalJSON(data []byte) error {

FILE: pkg/client/config_darwin.go
  constant defaultAddHostGateway (line 3) | defaultAddHostGateway = false

FILE: pkg/client/config_linux.go
  constant defaultAddHostGateway (line 3) | defaultAddHostGateway = true

FILE: pkg/client/config_test.go
  function TestGetConfig (line 21) | func TestGetConfig(t *testing.T) {
  function Test_ConfigMarshalYAML (line 71) | func Test_ConfigMarshalYAML(t *testing.T) {
  function Test_ConfigMarshalYAMLDefaults (line 97) | func Test_ConfigMarshalYAMLDefaults(t *testing.T) {
  function Test_ConfigUnmarshalYAMLEmpty (line 103) | func Test_ConfigUnmarshalYAMLEmpty(t *testing.T) {
  function Test_ConfigUnmarshalYAMLBooleanTrueDefault (line 109) | func Test_ConfigUnmarshalYAMLBooleanTrueDefault(t *testing.T) {
  function Test_ConfigUnmarshalYAMLBooleanTrueDefaultFalse (line 118) | func Test_ConfigUnmarshalYAMLBooleanTrueDefaultFalse(t *testing.T) {
  function Test_ConfigUnmarshalYAMLEmptyParent (line 127) | func Test_ConfigUnmarshalYAMLEmptyParent(t *testing.T) {
  function Test_ConfigMarshalYAMLDefaultsNotEmitted (line 135) | func Test_ConfigMarshalYAMLDefaultsNotEmitted(t *testing.T) {
  function Test_ConfigUnmarshalUnsupported (line 145) | func Test_ConfigUnmarshalUnsupported(t *testing.T) {

FILE: pkg/client/config_unix.go
  type OSSpecificConfig (line 10) | type OSSpecificConfig struct
    method Merge (line 16) | func (c *OSSpecificConfig) Merge(o *OSSpecificConfig) {
  function GetDefaultOSSpecificConfig (line 12) | func GetDefaultOSSpecificConfig() OSSpecificConfig {

FILE: pkg/client/config_util.go
  function ReloadLogLevel (line 12) | func ReloadLogLevel(c context.Context) {

FILE: pkg/client/config_windows.go
  constant defaultAddHostGateway (line 5) | defaultAddHostGateway = false
  type OSSpecificConfig (line 7) | type OSSpecificConfig struct
    method Merge (line 20) | func (c *OSSpecificConfig) Merge(o *OSSpecificConfig) {
  function GetDefaultOSSpecificConfig (line 11) | func GetDefaultOSSpecificConfig() OSSpecificConfig {
  type GSCStrategy (line 24) | type GSCStrategy
  constant defaultDNSWithFallback (line 27) | defaultDNSWithFallback = true
  type Network (line 34) | type Network struct
    method merge (line 38) | func (n *Network) merge(o *Network) {
    method IsZero (line 44) | func (n *Network) IsZero() bool {

FILE: pkg/client/const.go
  constant APIVersion (line 16) | APIVersion         = 3
  constant UserDaemonName (line 17) | UserDaemonName     = "userd"
  constant RootDaemonName (line 18) | RootDaemonName     = "rootd"
  constant KubeAuthDaemonName (line 19) | KubeAuthDaemonName = "kubeauthd"
  function DisplayVersion (line 23) | func DisplayVersion() string {
  function GetExe (line 28) | func GetExe(ctx context.Context) string {
  function isDaemonName (line 37) | func isDaemonName(name string) bool {
  function IsDaemon (line 46) | func IsDaemon() bool {
  constant Tel2SubDomain (line 67) | Tel2SubDomain = "tel2-search"

FILE: pkg/client/docker/container.go
  constant Exe (line 24) | Exe = "docker"
  function Start (line 26) | func Start(ctx context.Context, daemonInContainer bool, args ...string) ...
  function StopContainer (line 85) | func StopContainer(ctx context.Context, nameOrID string) error {

FILE: pkg/client/docker/context.go
  type clientKey (line 14) | type clientKey struct
  type clientHandle (line 16) | type clientHandle struct
    method getClient (line 21) | func (h *clientHandle) getClient(ctx context.Context) (*client.Client,...
  function EnableClient (line 43) | func EnableClient(ctx context.Context) context.Context {
  function GetClient (line 50) | func GetClient(ctx context.Context) (*client.Client, error) {

FILE: pkg/client/docker/daemon.go
  constant telepresenceImage (line 51) | telepresenceImage = "telepresence"
  constant TpCache (line 52) | TpCache           = "/root/.cache/telepresence"
  constant DockerTpConfig (line 53) | DockerTpConfig    = "/root/.config/telepresence"
  constant DockerTpLog (line 54) | DockerTpLog       = "/root/.cache/telepresence/logs"
  function ClientImage (line 61) | func ClientImage(ctx context.Context) string {
  function DaemonOptions (line 72) | func DaemonOptions(ctx context.Context, daemonID *daemon.Identifier, dae...
  function DaemonArgs (line 115) | func DaemonArgs(ctx context.Context, daemonID *daemon.Identifier) []stri...
  function ConnectDaemon (line 128) | func ConnectDaemon(ctx context.Context, info *daemon.Info) (conn *grpc.C...
  function daemonAddr (line 138) | func daemonAddr(ipv6 bool) netip.Addr {
  constant kubeAuthPortFile (line 146) | kubeAuthPortFile = client.KubeAuthDaemonName + ".port"
  type ContainerInfo (line 149) | type ContainerInfo struct
  function GetDaemonContainerNetworkInfo (line 160) | func GetDaemonContainerNetworkInfo(ctx context.Context) (dns netip.Addr,...
  function GetContainerInfo (line 198) | func GetContainerInfo(ctx context.Context, cid string, network string) (...
  function UseIPv6 (line 249) | func UseIPv6(ctx context.Context) (bool, error) {
  function readPortFile (line 265) | func readPortFile(ctx context.Context, portFile string, configFiles []st...
  function startAuthenticatorService (line 284) | func startAuthenticatorService(ctx context.Context, portFile string, kub...
  function ensureAuthenticatorService (line 317) | func ensureAuthenticatorService(ctx context.Context, kubeFlags map[strin...
  function enableK8SAuthenticator (line 337) | func enableK8SAuthenticator(ctx context.Context, daemonID *daemon.Identi...
  function handleLocalK8s (line 385) | func handleLocalK8s(ctx context.Context, daemonID *daemon.Identifier, co...
  function LaunchDaemon (line 449) | func LaunchDaemon(ctx context.Context, daemonID *daemon.Identifier) (inf...
  function containerPort (line 513) | func containerPort(addrPort netip.AddrPort, ns *container.NetworkSetting...
  function runningContainers (line 556) | func runningContainers(ctx context.Context, cli dockerClient.APIClient) ...
  function endpointAddr (line 576) | func endpointAddr(cn *network.EndpointResource, isIPv6 bool) (addr netip...
  function localAddr (line 591) | func localAddr(ctx context.Context, cli dockerClient.APIClient, cnID, nw...
  function findNetworkSettingsForHostPort (line 603) | func findNetworkSettingsForHostPort(cns []*container.InspectResponse, ho...
  type containerFilter (line 614) | type containerFilter
  function detectControlPlane (line 629) | func detectControlPlane(ctx context.Context, cli dockerClient.APIClient,...
  function tryLaunch (line 680) | func tryLaunch(ctx context.Context, daemonID *daemon.Identifier, port ui...
  function WaitForExit (line 724) | func WaitForExit(ctx context.Context, cli *dockerClient.Client, id strin...
  function appendOSSpecificContainerOpts (line 744) | func appendOSSpecificContainerOpts(ctx context.Context, opts []string) (...

FILE: pkg/client/docker/daemon_test.go
  function TestSafeContainerName (line 9) | func TestSafeContainerName(t *testing.T) {

FILE: pkg/client/docker/image.go
  function BuildImage (line 17) | func BuildImage(ctx context.Context, context string, buildArgs []string)...
  function PullImage (line 48) | func PullImage(ctx context.Context, image string) error {

FILE: pkg/client/docker/kubeauth/cmd.go
  constant PortFileStaleTime (line 33) | PortFileStaleTime = 3 * time.Second
  constant logfileFlag (line 34) | logfileFlag       = "logfile"
  type authService (line 37) | type authService struct
    method run (line 66) | func (as *authService) run(cmd *cobra.Command, _ []string) error {
    method internalRun (line 70) | func (as *authService) internalRun(ctx context.Context, flags *pflag.F...
    method ClientConfig (line 123) | func (as *authService) ClientConfig() (clientcmd.ClientConfig, error) {
    method keepPortFileAlive (line 127) | func (as *authService) keepPortFileAlive(ctx context.Context) error {
    method watchFiles (line 151) | func (as *authService) watchFiles(ctx context.Context) error {
  type PortFile (line 44) | type PortFile struct
  function Command (line 49) | func Command(ctx context.Context) *cobra.Command {

FILE: pkg/client/docker/plugin.go
  constant pluginTypeVolume (line 26) | pluginTypeVolume  = "volume"
  constant pluginTypeNetwork (line 27) | pluginTypeNetwork = "network"
  function EnsureVolumePlugin (line 32) | func EnsureVolumePlugin(ctx context.Context) (string, error) {
  function EnsureNetworkPlugin (line 39) | func EnsureNetworkPlugin(ctx context.Context) (string, error) {
  function NetworkPluginName (line 44) | func NetworkPluginName(ctx context.Context) string {
  function ensurePlugin (line 49) | func ensurePlugin(ctx context.Context, pluginType string, cfg *client.Do...
  function pluginName (line 69) | func pluginName(tm *client.DockerImage) string {
  function latestPluginName (line 73) | func latestPluginName(ctx context.Context, cfg *client.DockerImage, plug...
  function installPlugin (line 85) | func installPlugin(ctx context.Context, pluginName string) error {
  type pluginInfo (line 95) | type pluginInfo struct
  constant pluginInfoMaxAge (line 100) | pluginInfoMaxAge = 24 * time.Hour
  function latestPluginVersion (line 104) | func latestPluginVersion(ctx context.Context, pluginName, pluginType str...
  type imgResult (line 129) | type imgResult struct
  type repsResponse (line 132) | type repsResponse struct
  function getLatestPluginVersion (line 136) | func getLatestPluginVersion(ctx context.Context, pluginName string, cfg ...

FILE: pkg/client/docker/teleroute/network.go
  constant daemonLabel (line 21) | daemonLabel = "telepresence.io/teleroute/daemon"
  function CreateNetwork (line 23) | func CreateNetwork(ctx context.Context, info *daemon.Info, cli *dockerCl...
  function IsTelerouteNetwork (line 74) | func IsTelerouteNetwork(ctx context.Context, cli *dockerClient.Client, n...
  function NetworkGC (line 87) | func NetworkGC(ctx context.Context, cli *dockerClient.Client) error {
  function RemoveNetwork (line 113) | func RemoveNetwork(ctx context.Context, cli *dockerClient.Client, name s...
  function ReconnectNetwork (line 136) | func ReconnectNetwork(ctx context.Context, cli *dockerClient.Client, nam...

FILE: pkg/client/docker/teleroute/server.go
  type Server (line 5) | type Server interface

FILE: pkg/client/docker/teleroute/server_linux.go
  constant bridgeName (line 31) | bridgeName = "br-daemon"
  type linkNotFoundError (line 33) | type linkNotFoundError struct
    method Error (line 38) | func (e linkNotFoundError) Error() string {
    method Unwrap (line 42) | func (e linkNotFoundError) Unwrap() error {
  type endpoint (line 46) | type endpoint struct
  type server (line 53) | type server struct
    method DaemonAddresses (line 83) | func (ts *server) DaemonAddresses() []netip.Addr {
    method Connect (line 94) | func (ts *server) Connect(cr *rpc.ConnectRequest, connectServer grpc.S...
    method CreateEndpoint (line 117) | func (ts *server) CreateEndpoint(ctx context.Context, request *rpc.Cre...
    method Join (line 125) | func (ts *server) Join(ctx context.Context, request *rpc.EndpointIdent...
    method createAddressEndpoint (line 137) | func (ts *server) createAddressEndpoint(ctx context.Context) ([2]netli...
    method createEndpoint (line 173) | func (ts *server) createEndpoint(ctx context.Context, request *rpc.Cre...
    method isIPv6 (line 267) | func (ts *server) isIPv6() bool {
    method join (line 279) | func (ts *server) join(ctx context.Context, request *rpc.EndpointIdent...
    method Leave (line 330) | func (ts *server) Leave(_ context.Context, request *rpc.EndpointIdenti...
    method RemoveEndpoint (line 338) | func (ts *server) RemoveEndpoint(_ context.Context, request *rpc.Endpo...
    method bridge (line 346) | func (ts *server) bridge() (netlink.Link, error) {
    method serve (line 354) | func (ts *server) serve(ctx context.Context) error {
  function StartServer (line 70) | func StartServer(g log.Group, tap *vif.TunnelingDevice, routesCh <-chan ...
  function addrFromRaw (line 162) | func addrFromRaw(raw []byte) (netip.Addr, error) {
  type responseStringer (line 214) | type responseStringer struct
    method String (line 244) | func (r responseStringer) String() string {
  function writeRawIP (line 218) | func writeRawIP(raw []byte, w *strings.Builder) {
  function writeRawPrefix (line 231) | func writeRawPrefix(raw []byte, w *strings.Builder) {
  constant nameRndSize (line 401) | nameRndSize = 7
  function generateInterfaceName (line 407) | func generateInterfaceName() string {
  function createVethPair (line 413) | func createVethPair(ctx context.Context) (pair [2]netlink.Link, err erro...

FILE: pkg/client/docker/teleroute/server_other.go
  function StartServer (line 14) | func StartServer(g log.Group, tap *vif.TunnelingDevice, routesCh <-chan ...

FILE: pkg/client/docker/volume.go
  function CreateVolumes (line 24) | func CreateVolumes(
  function RemoveVolumes (line 64) | func RemoveVolumes(ctx context.Context, vols []string) {
  function VolumeDriverOpts (line 72) | func VolumeDriverOpts(ctx context.Context, pluginName string, hostPort n...
  function parsePluginSemver (line 91) | func parsePluginSemver(name string) *semver.Version {
  function createVolume (line 101) | func createVolume(ctx context.Context, pluginName string, hostPort netip...
  function removeVolume (line 120) | func removeVolume(ctx context.Context, volume string) error {

FILE: pkg/client/docker/volume_test.go
  function Test_getLatestPluginVersion (line 13) | func Test_getLatestPluginVersion(t *testing.T) {

FILE: pkg/client/ensured_state.go
  type Prolog (line 10) | type Prolog
  type Action (line 11) | type Action
  function WithEnsuredState (line 16) | func WithEnsuredState(ctx context.Context, prolog Prolog, action, epilog...

FILE: pkg/client/envconfig.go
  type Env (line 9) | type Env struct
  type envKey (line 26) | type envKey struct
  function WithEnv (line 29) | func WithEnv(ctx context.Context, env *Env) context.Context {
  function GetEnv (line 33) | func GetEnv(ctx context.Context) *Env {
  function LoadEnv (line 41) | func LoadEnv() (Env, error) {
  function LoadEnvWith (line 45) | func LoadEnvWith(environment map[string]string) (Env, error) {

FILE: pkg/client/envconfig_unix.go
  type OSSpecificEnv (line 5) | type OSSpecificEnv struct

FILE: pkg/client/envconfig_windows.go
  type OSSpecificEnv (line 3) | type OSSpecificEnv struct

FILE: pkg/client/install_id.go
  function InstallID (line 16) | func InstallID(ctx context.Context) (string, error) {

FILE: pkg/client/k8s/cani.go
  function CanPortForward (line 13) | func CanPortForward(ctx context.Context, namespace string) bool {

FILE: pkg/client/k8s/cluster.go
  constant supportedKubeAPIVersion (line 35) | supportedKubeAPIVersion = "1.17.0"
  constant defaultManagerNamespace (line 36) | defaultManagerNamespace = "ambassador"
  type NamespaceListener (line 39) | type NamespaceListener
  type Cluster (line 42) | type Cluster struct
    method ActualNamespace (line 59) | func (kc *Cluster) ActualNamespace(namespace string) string {
    method check (line 70) | func (kc *Cluster) check(c context.Context) error {
    method CheckTrafficManagerService (line 102) | func (kc *Cluster) CheckTrafficManagerService(ctx context.Context, nam...
    method namespaceAccessible (line 122) | func (kc *Cluster) namespaceAccessible(namespace string) (exists bool) {
    method determineTrafficManagerNamespace (line 230) | func (kc *Cluster) determineTrafficManagerNamespace() (string, error) {
    method GetCurrentNamespaces (line 256) | func (kc *Cluster) GetCurrentNamespaces(forClientAccess bool) []string {
    method GetManagerInstallId (line 275) | func (kc *Cluster) GetManagerInstallId() string {
    method StartNamespaceWatcher (line 310) | func (kc *Cluster) StartNamespaceWatcher() {
   
Condensed preview — 862 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,662K chars).
[
  {
    "path": ".dockerignore",
    "chars": 159,
    "preview": ".circleci/\n.idea/\n.git/\nbuild-aux/\nbuild-output/\n!build-output/version.txt\n!build-output/helm-version.txt\nintegration_te"
  },
  {
    "path": ".editorconfig",
    "chars": 348,
    "preview": "root = true\n\n[*]\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.go]\nin"
  },
  {
    "path": ".gitattributes",
    "chars": 79,
    "preview": "# Always check out with LF so that golangci-lint doesn't break\n*.go text eol=lf"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 855,
    "preview": "# These are supported funding model platforms\n\ngithub: [thallgren]\npatreon: # Replace with a single Patreon username\nope"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/Bug_report.md",
    "chars": 1314,
    "preview": "---\r\nname: Bug report\r\nabout: Create a report to help us improve Telepresence\r\n\r\n---\r\n\r\n**Describe the bug**\r\nA clear an"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/Feature_request.md",
    "chars": 817,
    "preview": "---\r\nname: Feature request\r\nabout: Suggest an idea for Telepresence\r\n\r\n---\r\n\r\n**Please describe your use case / problem."
  },
  {
    "path": ".github/actions/install-dependencies/action.yaml",
    "chars": 2721,
    "preview": "name: \"Install dependencies\"\ndescription: \"Install dependencies required by the runner\"\nruns:\n  using: composite\n  steps"
  },
  {
    "path": ".github/actions/upload-logs/action.yaml",
    "chars": 994,
    "preview": "name: \"Upload logs\"\ndescription: \"Upload logs from the test run\"\nruns:\n  using: composite\n  steps:\n    - run: |\n        "
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 774,
    "preview": "## Description\n\nA few sentences describing the overall goals of the pull request's commits.\n\n## Checklist\n\n<!--\n  Please"
  },
  {
    "path": ".github/workflows/dev.yaml",
    "chars": 4187,
    "preview": "name: \"Integration Tests\"\non:\n  pull_request:\n    types:\n      - labeled\n\npermissions:\n  contents: read\n  pull-requests:"
  },
  {
    "path": ".github/workflows/go-dependency-submission.yaml",
    "chars": 713,
    "preview": "name: Go Dependency Submission\non:\n  push:\n    branches:\n      - release/v2\n\n# The API requires write permission on the "
  },
  {
    "path": ".github/workflows/image-scan.yaml",
    "chars": 1169,
    "preview": "name: image-scan\non:\n  push:\n    branches:\n      - release/v2\n  pull_request:\njobs:\n  trivy-container-scan:\n    runs-on:"
  },
  {
    "path": ".github/workflows/licenses.yaml",
    "chars": 2195,
    "preview": "name: \"License verification\"\non:\n  pull_request:\n  workflow_dispatch:\njobs:\n  dependency_info_linux:\n    name: \"Linux: V"
  },
  {
    "path": ".github/workflows/release-teleroute.yaml",
    "chars": 760,
    "preview": "on:\n  push:\n    tags:\n      # These aren't regexps. They are \"Workflow Filter patterns\"\n      - teleroute-[0-9]+.[0-9]+."
  },
  {
    "path": ".github/workflows/release.yaml",
    "chars": 16668,
    "preview": "name: Releases\n\non:\n  push:\n    tags:\n      # These aren't regexps. They are \"Workflow Filter patterns\"\n      - v[0-9]+."
  },
  {
    "path": ".github/workflows/stale.yaml",
    "chars": 953,
    "preview": "name: 'Close stale issues and PR'\non:\n  schedule:\n    - cron: '12 10 * * *'\n\njobs:\n  stale:\n    runs-on: ubuntu-latest\n "
  },
  {
    "path": ".github/workflows/unit_tests.yaml",
    "chars": 1175,
    "preview": "name: \"Build and Unit test\"\non:\n  pull_request:\nenv:\n  HOMEBREW_NO_INSTALL_FROM_API:\njobs:\n  unit:\n    strategy:\n      f"
  },
  {
    "path": ".gitignore",
    "chars": 844,
    "preview": "# Binaries for programs and plugins\n*.exe\n*.exe~\n*.dll\n*.so\n*.dylib\n\n# Test binary, built with `go test -c`\n*.test\n\n# Ou"
  },
  {
    "path": ".golangci.yml",
    "chars": 4203,
    "preview": "version: \"2\"\nrun:\n  build-tags:\n    - citest\n  modules-download-mode: readonly\nlinters:\n  enable:\n    - asasalint\n    - "
  },
  {
    "path": ".mailmap",
    "chars": 1077,
    "preview": "Alex Gervais <alex@datawire.io>                        alex <alex@datawire.io>\nAlex Gervais <alex@datawire.io>          "
  },
  {
    "path": ".protolint.yaml",
    "chars": 182,
    "preview": "lint:\n  # Which rules to enable/disable.\n  rules:\n    remove:\n      - ENUM_FIELD_NAMES_PREFIX\n  # Settings for those rul"
  },
  {
    "path": "CHANGELOG.OLD.md",
    "chars": 72610,
    "preview": "# Changelog\n\n### 2.13.3 (May 25, 2023)\n\n- Feature: Add `.Values.hooks.curl.imagePullSecrets` and `.Values.hooks.curl.ima"
  },
  {
    "path": "CHANGELOG.yml",
    "chars": 145145,
    "preview": "# The YAML in this file should contain:\n#\n# items: An array of releases with the following attributes:\n#     - version: "
  },
  {
    "path": "CLAUDE.md",
    "chars": 17079,
    "preview": "# CLAUDE.md\n\nThis file provides guidance for contributors and AI assistants working with this repository.\n\n## Project Ov"
  },
  {
    "path": "CODE-OF-CONDUCT.md",
    "chars": 252,
    "preview": "# Code of Conduct\n\nWe follow the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md)"
  },
  {
    "path": "CODEOWNERS",
    "chars": 99,
    "preview": "# Default codeowners for the telepresenceio/telepresence repository\n* @telepresenceio/telepresence\n"
  },
  {
    "path": "DEPENDENCIES.md",
    "chars": 26804,
    "preview": "The Go module \"github.com/telepresenceio/telepresence/v2\" incorporates the\nfollowing Free and Open Source software:\n\n   "
  },
  {
    "path": "DEPENDENCY_LICENSES.md",
    "chars": 547,
    "preview": "Telepresence CLI incorporates Free and Open Source software under the following licenses:\n\n* [2-clause BSD license](http"
  },
  {
    "path": "GOVERNANCE-maintainer.md",
    "chars": 8548,
    "preview": "# Telepresence Project Governance\n\nThe goal of the Telepresence project is to accelerate the \"developer inner loop\" for "
  },
  {
    "path": "LICENSE",
    "chars": 11358,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "MAINTAINERS.md",
    "chars": 1229,
    "preview": "# Telepresence Maintainers\n\n[GOVERNANCE.md](GOVERNANCE.md) describes governance guidelines and\nmaintainer responsibiliti"
  },
  {
    "path": "Makefile",
    "chars": 1337,
    "preview": "# Copyright 2020-2021 Datawire.  All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\")"
  },
  {
    "path": "README.md",
    "chars": 2253,
    "preview": "# Telepresence: Fast, Local Development for Kubernetes\n\n[<img src=\"https://raw.githubusercontent.com/telepresenceio/tele"
  },
  {
    "path": "SECURITY.md",
    "chars": 942,
    "preview": "# Security Policy\n\n## Supported Versions\n\nSecurity updates will be provided for the latest 2.x release.\n\n\n### How do we "
  },
  {
    "path": "build-aux/INSTALLERS.md",
    "chars": 6343,
    "preview": "# Telepresence Installers Specification\n\nThis document describes the platform-specific installers that bundle Telepresen"
  },
  {
    "path": "build-aux/admission_controller_tls/main.go",
    "chars": 4788,
    "preview": "package main\n\nimport (\n\t\"bytes\"\n\tcryptorand \"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"crypto/sha1\"\n\t\"crypto/x509\"\n\t\"crypto/x509/pkix"
  },
  {
    "path": "build-aux/docker/images/Dockerfile.client",
    "chars": 1848,
    "preview": "# syntax = docker/dockerfile:1.3\n\n# Copyright 2020-2022 Datawire. All rights reserved.\n#\n# Licensed under the Apache Lic"
  },
  {
    "path": "build-aux/docker/images/Dockerfile.routecontroller",
    "chars": 1347,
    "preview": "# syntax = docker/dockerfile:1.3\n\n# Copyright 2024 Datawire. All rights reserved.\n#\n# Licensed under the Apache License,"
  },
  {
    "path": "build-aux/docker/images/Dockerfile.traffic",
    "chars": 1719,
    "preview": "# syntax = docker/dockerfile:1.3\n\n# Copyright 2020-2022 Datawire. All rights reserved.\n#\n# Licensed under the Apache Lic"
  },
  {
    "path": "build-aux/docker/images/Dockerfile.winbuild",
    "chars": 644,
    "preview": "FROM golang:1.19.4\n\n\nRUN apt-get update && \\\n    apt-get install -y \\\n            apt-transport-https \\\n            ca-c"
  },
  {
    "path": "build-aux/genversion/main.go",
    "chars": 5410,
    "preview": "// Copyright 2021 Datawire. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n/"
  },
  {
    "path": "build-aux/image-importer.yaml",
    "chars": 882,
    "preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  creationTimestamp: null\n  labels:\n    app: image-importer\n  name: image"
  },
  {
    "path": "build-aux/main.mk",
    "chars": 21231,
    "preview": "# Copyright 2020-2021 Datawire.  All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\")"
  },
  {
    "path": "build-aux/maintenance.mk",
    "chars": 268,
    "preview": "\n\nupdate-dependencies: $(dir $(shell find . -name go.mod))\n\tfor dir in $?; do\\\n \t\t(cd $$dir && \\\n \t\t (go get -u ./... &&"
  },
  {
    "path": "build-aux/pkg-installer/Distribution.xml",
    "chars": 1266,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<installer-script minSpecVersion=\"1\" forVolumeCalculation=\"any\" authoringTool=\"co"
  },
  {
    "path": "build-aux/pkg-installer/build-pkg.sh",
    "chars": 6168,
    "preview": "#!/usr/bin/env bash\nset -e\n\n# Validate that VERSION is set and a valid SemVer\n[[ -z \"${VERSION}\" ]] && { echo \"Error: VE"
  },
  {
    "path": "build-aux/pkg-installer/io.telepresence.rootd.plist",
    "chars": 1191,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "build-aux/pkg-installer/postinstall",
    "chars": 666,
    "preview": "#!/bin/bash\nset -e\n\nmkdir -p \"/Library/Application Support/telepresence\"\nmkdir -p \"/Library/Caches/telepresence\"\ntouch \""
  },
  {
    "path": "build-aux/pkg-installer/syslog.conf",
    "chars": 207,
    "preview": "# /etc/newsyslog.d/telepresence-rootd.conf\n# Rotate telepresence-rootd.log daily, keep 7 days, compress, restart daemon\n"
  },
  {
    "path": "build-aux/pkg-installer/telepresence-rootd",
    "chars": 621,
    "preview": "#!/bin/bash\nACTION=\"$1\"\nif [[ \"$ACTION\" != \"start\" && \"$ACTION\" != \"stop\" && \"$ACTION\" != \"restart\" ]]; then\n    echo \"U"
  },
  {
    "path": "build-aux/pkg-installer/uninstall",
    "chars": 422,
    "preview": "#!/usr/bin/env bash\necho \"Uninstalling Telepresence...\"\nsudo /bin/launchctl unload -w /Library/LaunchDaemons/io.telepres"
  },
  {
    "path": "build-aux/pkg-installer/welcome.rtf",
    "chars": 986,
    "preview": "{\\rtf1\\ansi\\ansicpg1252\\cocoartf2822\n\\cocoatextscaling0\\cocoaplatform0{\\fonttbl\\f0\\fswiss\\fcharset0 Helvetica-Bold;\\f1\\f"
  },
  {
    "path": "build-aux/prelude.mk",
    "chars": 2160,
    "preview": "# Copyright 2020-2021 Datawire.  All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\")"
  },
  {
    "path": "build-aux/systemd-installer/.gitignore",
    "chars": 10,
    "preview": "nfpm.yaml\n"
  },
  {
    "path": "build-aux/systemd-installer/build-packages.sh",
    "chars": 3062,
    "preview": "#!/bin/bash\nset -e\n\n# Build .deb and .rpm packages using nfpm\n\n# Validate required environment variables\n[[ -z \"${VERSIO"
  },
  {
    "path": "build-aux/systemd-installer/config.yml",
    "chars": 143,
    "preview": "# Telepresence root daemon configuration\n# See https://www.telepresence.io/docs/reference/config for all options\n\nlogLev"
  },
  {
    "path": "build-aux/systemd-installer/nfpm.yaml.in",
    "chars": 1563,
    "preview": "# nfpm configuration for building .deb and .rpm packages\n# Documentation: https://nfpm.goreleaser.com/configuration/\n\nna"
  },
  {
    "path": "build-aux/systemd-installer/postinstall.sh",
    "chars": 780,
    "preview": "#!/bin/bash\nset -e\n\n# Create required directories\nmkdir -p /var/cache/telepresence/rootd\nmkdir -p /etc/telepresence\nchmo"
  },
  {
    "path": "build-aux/systemd-installer/postremove.sh",
    "chars": 319,
    "preview": "#!/bin/bash\nset -e\n\n# Reload systemd to forget about the removed service\nsystemctl daemon-reload || true\n\necho \"\"\necho \""
  },
  {
    "path": "build-aux/systemd-installer/preremove.sh",
    "chars": 443,
    "preview": "#!/bin/bash\nset -e\n\n# Stop the service if running\nif systemctl is-active --quiet telepresence-rootd.service 2>/dev/null;"
  },
  {
    "path": "build-aux/systemd-installer/telepresence-rootd.service",
    "chars": 1198,
    "preview": "[Unit]\nDescription=Telepresence root daemon (rootd)\nDocumentation=https://telepresence.io/\nAfter=network.target\n\n[Servic"
  },
  {
    "path": "build-aux/systemd-installer/uninstall.sh",
    "chars": 1085,
    "preview": "#!/bin/bash\nset -e\n\necho \"Uninstalling Telepresence...\"\n\n# Stop and disable the service\nif systemctl is-active --quiet t"
  },
  {
    "path": "build-aux/tools.mk",
    "chars": 5748,
    "preview": "# Copyright 2020-2021 Datawire.  All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\")"
  },
  {
    "path": "build-aux/unparsable-packages.yaml",
    "chars": 136,
    "preview": "# Packages whose licenses cannot be auto-detected by go-mkopensource.\n# Format: package-import-path: [list of SPDX licen"
  },
  {
    "path": "build-aux/winmake.bat",
    "chars": 1878,
    "preview": "echo off\nsetlocal\nmkdir .wintools\nmkdir .gocache\n\nif \"%TELEPRESENCE_REGISTRY%\" == \"\" (\n    echo \"Please define a %%TELEP"
  },
  {
    "path": "build-aux/wix-installer/Dialogs_en-us.wxl",
    "chars": 756,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<WixLocalization xmlns=\"http://wixtoolset.org/schemas/v4/wxl\" Culture=\"en-US\" Cod"
  },
  {
    "path": "build-aux/wix-installer/MainPackage.wxs",
    "chars": 9102,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\"\n    xmlns:ui=\"http://wixtoolset"
  },
  {
    "path": "build-aux/wix-installer/Makefile",
    "chars": 5953,
    "preview": "# Makefile — complete Telepresence Windows installer\n# Run: make bundle          → produces TelepresenceInstall.exe\n#   "
  },
  {
    "path": "build-aux/wix-installer/Telepresence.wxs",
    "chars": 1496,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\" xmlns:bal=\"http://wixtoolset.or"
  },
  {
    "path": "build-aux/wix-installer/config.yml",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "build-aux/wix-installer/tpwrapper.go",
    "chars": 3227,
    "preview": "//go:build windows\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strconv\"\n\n\t\"golang.org/x/sys/windows/"
  },
  {
    "path": "build-aux/wix-installer/txt2rtf.ps1",
    "chars": 418,
    "preview": "param(\n    [Parameter(Mandatory)][string]$InputFile,\n    [Parameter(Mandatory)][string]$OutputFile\n)\n\nAdd-Type -Assembly"
  },
  {
    "path": "charts/chart.go",
    "chars": 5047,
    "preview": "package charts\n\nimport (\n\t\"archive/tar\"\n\t\"compress/gzip\"\n\t\"embed\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/fs\"\n\t\"sort\"\n\t\"strings\"\n\n\t\""
  },
  {
    "path": "charts/telepresence-oss/.helmignore",
    "chars": 349,
    "preview": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation"
  },
  {
    "path": "charts/telepresence-oss/Chart.yaml",
    "chars": 771,
    "preview": "apiVersion: v2\nname: telepresence-oss\ndescription: A chart for deploying the server-side components of Telepresence\ntype"
  },
  {
    "path": "charts/telepresence-oss/README.md",
    "chars": 32700,
    "preview": "# Telepresence\n\n[Telepresence](https://telepresence.io/) is a tool\nthat allows for local development of microservices ru"
  },
  {
    "path": "charts/telepresence-oss/templates/NOTES.txt",
    "chars": 845,
    "preview": "--------------------------------------------------------------------------------\nCongratulations!\n\n\nYou have successfull"
  },
  {
    "path": "charts/telepresence-oss/templates/_helpers.tpl",
    "chars": 7780,
    "preview": "{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"telepresence.name\" -}}\n{{- default .Chart.Name .Values.nameOverride "
  },
  {
    "path": "charts/telepresence-oss/templates/agentInjectorWebhook.yaml",
    "chars": 6219,
    "preview": "{{- if and (not (and .Values.rbac .Values.rbac.only)) .Values.agentInjector.enabled }}\n{{- $namespaceSelector := mustFro"
  },
  {
    "path": "charts/telepresence-oss/templates/certificate.yaml",
    "chars": 549,
    "preview": "{{- if and (eq .Values.agentInjector.certificate.method \"certmanager\") .Values.agentInjector.enabled }}\napiVersion: cert"
  },
  {
    "path": "charts/telepresence-oss/templates/clientRbac/cluster-scope.yaml",
    "chars": 974,
    "preview": "{{- /*\nThese are the cluster-wide rbac roles + bindings that will be used by users\nwho want to use telepresence once its"
  },
  {
    "path": "charts/telepresence-oss/templates/clientRbac/connect.yaml",
    "chars": 1068,
    "preview": "{{- with .Values.clientRbac }}\n{{- if .create }}\n{{- /*\nClient must have the following RBAC in the traffic-manager.names"
  },
  {
    "path": "charts/telepresence-oss/templates/clientRbac/namespace-scope.yaml",
    "chars": 2246,
    "preview": "{{- /*\nThese are the namespace-scoped rbac roles + bindings that will be used by users\nwho want to use telepresence once"
  },
  {
    "path": "charts/telepresence-oss/templates/deployment.yaml",
    "chars": 11682,
    "preview": "{{- with .Values }}\n{{- if not (and .rbac .rbac.only) }}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ inclu"
  },
  {
    "path": "charts/telepresence-oss/templates/issuer.yaml",
    "chars": 327,
    "preview": "{{- if and (eq .Values.agentInjector.certificate.method \"certmanager\") .Values.agentInjector.enabled }}\napiVersion: cert"
  },
  {
    "path": "charts/telepresence-oss/templates/pre-delete-hook.yaml",
    "chars": 2870,
    "preview": "{{- if and (not (and .Values.rbac .Values.rbac.only)) .Values.agentInjector.enabled }}\napiVersion: batch/v1\nkind: Job\nme"
  },
  {
    "path": "charts/telepresence-oss/templates/routecontroller-daemonset.yaml",
    "chars": 1573,
    "preview": "{{- $localCluster := or (eq .Values.image.registry \"local\") (hasPrefix \"localhost:\" .Values.image.registry) }}\n{{- $rcEn"
  },
  {
    "path": "charts/telepresence-oss/templates/routecontroller-rbac.yaml",
    "chars": 1229,
    "preview": "{{- $localCluster := or (eq .Values.image.registry \"local\") (hasPrefix \"localhost:\" .Values.image.registry) }}\n{{- $rcEn"
  },
  {
    "path": "charts/telepresence-oss/templates/service.yaml",
    "chars": 1344,
    "preview": "{{- with .Values }}\n{{- if not (and .rbac .rbac.only) }}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"traf"
  },
  {
    "path": "charts/telepresence-oss/templates/tests/test-connection.yaml",
    "chars": 712,
    "preview": "{{- if not (and .Values.rbac .Values.rbac.only) }}\napiVersion: v1\nkind: Pod\nmetadata:\n  name: \"{{ include \"traffic-manag"
  },
  {
    "path": "charts/telepresence-oss/templates/trafficManager-configmap.yaml",
    "chars": 616,
    "preview": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: {{ include \"traffic-manager.name\" $ }}\n  namespace: {{ include \"traffic"
  },
  {
    "path": "charts/telepresence-oss/templates/trafficManagerRbac/cluster-scope.yaml",
    "chars": 2081,
    "preview": "{{- with .Values }}\n{{- if and .managerRbac.create (not (include \"traffic-manager.namespaced\" $)) }}\n{{- /*\nThis file co"
  },
  {
    "path": "charts/telepresence-oss/templates/trafficManagerRbac/namespace-scope.yaml",
    "chars": 4467,
    "preview": "{{- if .Values.managerRbac.create }}\n{{- /*\nThis file contains the various namespace-scoped roles + bindings that the tr"
  },
  {
    "path": "charts/telepresence-oss/templates/trafficManagerRbac/service-account.yaml",
    "chars": 332,
    "preview": "{{- if .Values.managerRbac.create }}\n{{- /* This file contains the serviceAccount used for the traffic-manager deploymen"
  },
  {
    "path": "charts/telepresence-oss/templates/trafficManagerRbac/webhook-secret.yaml",
    "chars": 935,
    "preview": "{{- if and (not (eq .Values.agentInjector.certificate.accessMethod \"mount\")) .Values.agentInjector.enabled }}\napiVersion"
  },
  {
    "path": "charts/telepresence-oss/values.schema.yaml",
    "chars": 23309,
    "preview": "$schema: https://json-schema.org/draft/2020-12/schema#\n$id: https://github.com/telepresenceio/telepresence-oss.schema.js"
  },
  {
    "path": "charts/telepresence-oss/values.yaml",
    "chars": 8404,
    "preview": "################################################################################\n## Deployment Configuration\n###########"
  },
  {
    "path": "cmd/cobraparser/LICENSE",
    "chars": 11358,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "cmd/cobraparser/README.md",
    "chars": 724,
    "preview": "# Cobra Help Output Parser\n\n## Parser\nThe `cobraparser` is a tool to parse the output produced by the `spf13.CobraComman"
  },
  {
    "path": "cmd/cobraparser/generate/generate.go",
    "chars": 3965,
    "preview": "package generate\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/docker/docker/opts\"\n\t\"github.com/spf13/pfl"
  },
  {
    "path": "cmd/cobraparser/go.mod",
    "chars": 524,
    "preview": "module github.com/telepresenceio/telepresence/cmd/cobraparser/v2\n\ngo 1.24\n\nrequire (\n\tgithub.com/docker/docker v28.5.2+i"
  },
  {
    "path": "cmd/cobraparser/go.sum",
    "chars": 1756,
    "preview": "github.com/docker/docker v28.5.2+incompatible h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaftjlSWt4AFexzM=\ngithub.com/docker/docker v"
  },
  {
    "path": "cmd/cobraparser/main.go",
    "chars": 958,
    "preview": "//go:build go1.24\n\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/spf13/pflag\"\n\n\t\"github.com/"
  },
  {
    "path": "cmd/cobraparser/types/commandinfo.go",
    "chars": 7511,
    "preview": "package types\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// CommandInfo descr"
  },
  {
    "path": "cmd/routecontroller/main.go",
    "chars": 4921,
    "preview": "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/coreos/go-iptables/iptables\"\n\tmeta \"k8s.i"
  },
  {
    "path": "cmd/teleroute/.gitignore",
    "chars": 4,
    "preview": "rpc/"
  },
  {
    "path": "cmd/teleroute/DEVELOPING.md",
    "chars": 776,
    "preview": "# Docker network plugin for Telepresence\n\n## Debugging\n\nStart by configuring telepresence to not check for the latest ve"
  },
  {
    "path": "cmd/teleroute/Dockerfile",
    "chars": 473,
    "preview": "FROM --platform=$BUILDPLATFORM golang:alpine AS builder\n\nRUN apk add --no-cache --virtual .build-deps gcc libc-dev\nWORKD"
  },
  {
    "path": "cmd/teleroute/Makefile",
    "chars": 3459,
    "preview": "# Avoid potential confusion about what shell to use\nSHELL := /bin/bash\n\n# Delete implicit rules not used here (clutters "
  },
  {
    "path": "cmd/teleroute/config.json",
    "chars": 544,
    "preview": "{\n  \"description\": \"Docker network plugin for Telepresence\",\n  \"documentation\": \"https://docs.docker.com/engine/extend/p"
  },
  {
    "path": "cmd/teleroute/driver/driver.go",
    "chars": 2835,
    "preview": "package driver\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/docker/go-plugins-helpers/network\"\n\t\"github.com/puzpuzpuz/xsync"
  },
  {
    "path": "cmd/teleroute/driver/network.go",
    "chars": 8051,
    "preview": "package driver\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/netip\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/cenkalti/backof"
  },
  {
    "path": "cmd/teleroute/driver/options.go",
    "chars": 1254,
    "preview": "package driver\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net/netip\"\n\t\"strconv\"\n)\n\ntype options struct {\n\t// host IP on the default br"
  },
  {
    "path": "cmd/teleroute/go.mod",
    "chars": 887,
    "preview": "module github.com/telepresenceio/telepresence/cmd/teleroute\n\ngo 1.25.0\n\nrequire (\n\tgithub.com/cenkalti/backoff/v4 v4.3.0"
  },
  {
    "path": "cmd/teleroute/go.sum",
    "chars": 4726,
    "preview": "github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=\ngithub.com/Microsoft/go-winio v0.6."
  },
  {
    "path": "cmd/teleroute/main.go",
    "chars": 1977,
    "preview": "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log/slog\"\n\t\"os\"\n\t\"os/signal\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"syscall\"\n\n\t\"github"
  },
  {
    "path": "docs/CONTRIBUTING.md",
    "chars": 944,
    "preview": "# Telepresence Documentation\n\nThis folder contains the Telepresence documentation in a format suitable for a versioned f"
  },
  {
    "path": "docs/README.md",
    "chars": 8297,
    "preview": "---\ndescription: Main menu when using plain markdown. Excluded when generating the website\n---\n# <img src=\"images/logo.p"
  },
  {
    "path": "docs/common/quantity.md",
    "chars": 298,
    "preview": "---\ntitle: Quantity\n---\nQuantity is measured in bytes. You can express it as a plain integer or as a fixed-point number "
  },
  {
    "path": "docs/community.md",
    "chars": 473,
    "preview": "---\ntitle: Community\nhide_table_of_contents: true\n---\n\n# Community\n\n## Contributor's guide\nPlease review our [contributo"
  },
  {
    "path": "docs/compare/mirrord.md",
    "chars": 6327,
    "preview": "---\ntitle: \"Telepresence vs mirrord\"\nhide_table_of_contents: true\n---\n\n## Telepresence\n\nTelepresence is a very feature r"
  },
  {
    "path": "docs/concepts/devloop.md",
    "chars": 5338,
    "preview": "---\ntitle: The developer experience and the inner dev loop\nhide_table_of_contents: true\n---\n\n# The developer experience "
  },
  {
    "path": "docs/concepts/faster.md",
    "chars": 3244,
    "preview": "---\ntitle: \"Making the remote local: Faster feedback, collaboration and debugging\"\nhide_table_of_contents: true\n---\n\n---"
  },
  {
    "path": "docs/concepts/intercepts.md",
    "chars": 1750,
    "preview": "---\ntitle: \"Intercepts\"\ndescription: \"Short demonstration of global intercepts\"\nhide_table_of_contents: true\n---\n\nimport"
  },
  {
    "path": "docs/doc-links.yml",
    "chars": 11188,
    "preview": "- title: Quick start\n  link: quick-start\n- title: Install Telepresence\n  items:\n    - title: Install Client\n      link: "
  },
  {
    "path": "docs/faqs.md",
    "chars": 7810,
    "preview": "---\ntitle: FAQs\ndescription: \"Learn how Telepresence helps with fast development and debugging in your Kubernetes cluste"
  },
  {
    "path": "docs/helm/values.schema.json",
    "chars": 19887,
    "preview": "{\"$defs\":{\"affinity\":{\"$ref\":\"#/definitions/io.k8s.api.core.v1.Affinity\"},\"duration\":{\"pattern\":\"^[+-]?(\\\\d+(\\\\.\\\\d+)?(h"
  },
  {
    "path": "docs/howtos/cluster-in-vm.md",
    "chars": 7746,
    "preview": "---\ntitle: Host a cluster in Docker or a VM\ndescription: Use Telepresence to engage with services in a cluster running i"
  },
  {
    "path": "docs/howtos/docker-compose.md",
    "chars": 16210,
    "preview": "---\ntitle: \"Using Telepresence with Docker Compose\"\nhide_table_of_contents: true\n---\n# Telepresence Docker Compose Exten"
  },
  {
    "path": "docs/howtos/docker.md",
    "chars": 5154,
    "preview": "---\ntitle: \"Using Telepresence with Docker\"\nhide_table_of_contents: true\n---\n# Telepresence with Docker\n\n## Why?\n\nIt can"
  },
  {
    "path": "docs/howtos/engage.md",
    "chars": 17185,
    "preview": "---\ntitle: Code and debug an application locally\ndescription: Start using Telepresence in your own environment. Follow t"
  },
  {
    "path": "docs/howtos/large-clusters.md",
    "chars": 3334,
    "preview": "---\ntitle: Work with large clusters\ndescription: Use Telepresence to intercept services in clusters with a large number "
  },
  {
    "path": "docs/howtos/mtls.md",
    "chars": 6333,
    "preview": "---\ntitle: Intercepting Applications Using TLS/mTLS\ndescription: How to perform HTTP-filtered intercepts with encrypted "
  },
  {
    "path": "docs/install/client.md",
    "chars": 11434,
    "preview": "---\ntitle: Install client\nhide_table_of_contents: true\n---\n\n\nimport Platform from '@site/src/components/Platform';\n\n# Cl"
  },
  {
    "path": "docs/install/cloud.md",
    "chars": 3053,
    "preview": "---\ntitle: Cloud Provider Prerequisites\nhide_table_of_contents: true\n---\n\n# Provider Prerequisites for Traffic Manager\n\n"
  },
  {
    "path": "docs/install/manager.md",
    "chars": 9550,
    "preview": "---\ntitle: Install Traffic Manager\nhide_table_of_contents: true\n---\n\n# Install/Uninstall the Traffic Manager\n\nTelepresen"
  },
  {
    "path": "docs/install/upgrade.md",
    "chars": 3333,
    "preview": "---\ntitle: Upgrade client\ndescription: \"How to upgrade your installation of Telepresence and install previous versions.\""
  },
  {
    "path": "docs/licenses.md",
    "chars": 547,
    "preview": "Telepresence CLI incorporates Free and Open Source software under the following licenses:\n\n* [2-clause BSD license](http"
  },
  {
    "path": "docs/quick-start.md",
    "chars": 1278,
    "preview": "---\ntitle: Quick start\ndescription: \"Start using Telepresence in your own environment. Follow these steps to intercept y"
  },
  {
    "path": "docs/redirects.yml",
    "chars": 32,
    "preview": "- {from: \"\", to: \"quick-start\"}\n"
  },
  {
    "path": "docs/reference/architecture.md",
    "chars": 2404,
    "preview": "---\ntitle: Architecture\ndescription: How Telepresence works to intercept traffic from your Kubernetes cluster to code ru"
  },
  {
    "path": "docs/reference/cli/telepresence.md",
    "chars": 3741,
    "preview": "---\ntitle: telepresence\ndescription: Connect your workstation to a Kubernetes cluster\nhide_table_of_contents: true\n---\n\n"
  },
  {
    "path": "docs/reference/cli/telepresence_completion.md",
    "chars": 2024,
    "preview": "---\ntitle: telepresence completion\ndescription: Generate a shell completion script\nhide_table_of_contents: true\n---\n\nGen"
  },
  {
    "path": "docs/reference/cli/telepresence_compose.md",
    "chars": 4111,
    "preview": "---\ntitle: telepresence compose\ndescription: Define and run multi-container applications with Telepresence and Docker\nhi"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_attach.md",
    "chars": 1600,
    "preview": "---\ntitle: telepresence compose attach\ndescription: Attach local standard input, output, and error streams to a service'"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_bridge.md",
    "chars": 1199,
    "preview": "---\ntitle: telepresence compose bridge\ndescription: Convert compose files into another model\nhide_table_of_contents: tru"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_build.md",
    "chars": 2097,
    "preview": "---\ntitle: telepresence compose build\ndescription: Build or rebuild services\nhide_table_of_contents: true\n---\n\nBuild or "
  },
  {
    "path": "docs/reference/cli/telepresence_compose_commit.md",
    "chars": 1591,
    "preview": "---\ntitle: telepresence compose commit\ndescription: Create a new image from a service container's changes\nhide_table_of_"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_config.md",
    "chars": 2602,
    "preview": "---\ntitle: telepresence compose config\ndescription: Parse, resolve and render compose file in canonical format\nhide_tabl"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_cp.md",
    "chars": 1486,
    "preview": "---\ntitle: telepresence compose cp\ndescription: docker compose cp [OPTIONS] SRC_PATH|- SERVICE:DEST_PATH\nhide_table_of_c"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_create.md",
    "chars": 2053,
    "preview": "---\ntitle: telepresence compose create\ndescription: Creates containers for a service\nhide_table_of_contents: true\n---\n\nC"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_down.md",
    "chars": 1647,
    "preview": "---\ntitle: telepresence compose down\ndescription: Stop and remove containers, networks\nhide_table_of_contents: true\n---\n"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_events.md",
    "chars": 1384,
    "preview": "---\ntitle: telepresence compose events\ndescription: Receive real time events from containers\nhide_table_of_contents: tru"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_exec.md",
    "chars": 1707,
    "preview": "---\ntitle: telepresence compose exec\ndescription: Execute a command in a running container\nhide_table_of_contents: true\n"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_export.md",
    "chars": 1370,
    "preview": "---\ntitle: telepresence compose export\ndescription: Export a service container's filesystem as a tar archive\nhide_table_"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_images.md",
    "chars": 1337,
    "preview": "---\ntitle: telepresence compose images\ndescription: List images used by the created containers\nhide_table_of_contents: t"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_kill.md",
    "chars": 1357,
    "preview": "---\ntitle: telepresence compose kill\ndescription: Force stop service containers\nhide_table_of_contents: true\n---\n\nForce "
  },
  {
    "path": "docs/reference/cli/telepresence_compose_logs.md",
    "chars": 1780,
    "preview": "---\ntitle: telepresence compose logs\ndescription: View output from containers\nhide_table_of_contents: true\n---\n\nView out"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_ls.md",
    "chars": 1430,
    "preview": "---\ntitle: telepresence compose ls\ndescription: List running compose projects\nhide_table_of_contents: true\n---\n\nList run"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_pause.md",
    "chars": 1143,
    "preview": "---\ntitle: telepresence compose pause\ndescription: Pause services\nhide_table_of_contents: true\n---\n\nPause services\n\n### "
  },
  {
    "path": "docs/reference/cli/telepresence_compose_port.md",
    "chars": 1349,
    "preview": "---\ntitle: telepresence compose port\ndescription: Print the public port for a port binding\nhide_table_of_contents: true\n"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_ps.md",
    "chars": 2156,
    "preview": "---\ntitle: telepresence compose ps\ndescription: List containers\nhide_table_of_contents: true\n---\n\nList containers\n\n### U"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_publish.md",
    "chars": 1608,
    "preview": "---\ntitle: telepresence compose publish\ndescription: Publish compose application\nhide_table_of_contents: true\n---\n\nPubli"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_pull.md",
    "chars": 1536,
    "preview": "---\ntitle: telepresence compose pull\ndescription: Pull service images\nhide_table_of_contents: true\n---\n\nPull service ima"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_push.md",
    "chars": 1393,
    "preview": "---\ntitle: telepresence compose push\ndescription: Push service images\nhide_table_of_contents: true\n---\n\nPush service ima"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_restart.md",
    "chars": 1289,
    "preview": "---\ntitle: telepresence compose restart\ndescription: Restart service containers\nhide_table_of_contents: true\n---\n\nRestar"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_rm.md",
    "chars": 1355,
    "preview": "---\ntitle: telepresence compose rm\ndescription: Removes stopped service containers\nhide_table_of_contents: true\n---\n\nRem"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_run.md",
    "chars": 3109,
    "preview": "---\ntitle: telepresence compose run\ndescription: Run a one-off command on a service\nhide_table_of_contents: true\n---\n\nRu"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_scale.md",
    "chars": 1188,
    "preview": "---\ntitle: telepresence compose scale\ndescription: Scale services\nhide_table_of_contents: true\n---\n\nScale services\n\n### "
  },
  {
    "path": "docs/reference/cli/telepresence_compose_start.md",
    "chars": 1334,
    "preview": "---\ntitle: telepresence compose start\ndescription: Start services\nhide_table_of_contents: true\n---\n\nStart services\n\n### "
  },
  {
    "path": "docs/reference/cli/telepresence_compose_stats.md",
    "chars": 1877,
    "preview": "---\ntitle: telepresence compose stats\ndescription: Display a live stream of container(s) resource usage statistics\nhide_"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_stop.md",
    "chars": 1196,
    "preview": "---\ntitle: telepresence compose stop\ndescription: Stop services\nhide_table_of_contents: true\n---\n\nStop services\n\n### Usa"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_top.md",
    "chars": 1165,
    "preview": "---\ntitle: telepresence compose top\ndescription: Display the running processes\nhide_table_of_contents: true\n---\n\nDisplay"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_unpause.md",
    "chars": 1155,
    "preview": "---\ntitle: telepresence compose unpause\ndescription: Unpause services\nhide_table_of_contents: true\n---\n\nUnpause services"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_up.md",
    "chars": 4123,
    "preview": "---\ntitle: telepresence compose up\ndescription: Create and start containers\nhide_table_of_contents: true\n---\n\nCreate and"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_version.md",
    "chars": 1354,
    "preview": "---\ntitle: telepresence compose version\ndescription: Show the Docker Compose version information\nhide_table_of_contents:"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_volumes.md",
    "chars": 1654,
    "preview": "---\ntitle: telepresence compose volumes\ndescription: List volumes\nhide_table_of_contents: true\n---\n\nList volumes\n\n### Us"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_wait.md",
    "chars": 1296,
    "preview": "---\ntitle: telepresence compose wait\ndescription: Block until containers of all (or specified) services stop.\nhide_table"
  },
  {
    "path": "docs/reference/cli/telepresence_compose_watch.md",
    "chars": 1448,
    "preview": "---\ntitle: telepresence compose watch\ndescription: Watch build context for service and rebuild/refresh containers when f"
  },
  {
    "path": "docs/reference/cli/telepresence_config.md",
    "chars": 988,
    "preview": "---\ntitle: telepresence config\ndescription: Telepresence configuration commands\nhide_table_of_contents: true\n---\n\nTelepr"
  },
  {
    "path": "docs/reference/cli/telepresence_config_view.md",
    "chars": 820,
    "preview": "---\ntitle: telepresence config view\ndescription: View current Telepresence configuration\nhide_table_of_contents: true\n--"
  },
  {
    "path": "docs/reference/cli/telepresence_connect.md",
    "chars": 4962,
    "preview": "---\ntitle: telepresence connect\ndescription: Connect to a cluster\nhide_table_of_contents: true\n---\n\nConnect to a cluster"
  },
  {
    "path": "docs/reference/cli/telepresence_curl.md",
    "chars": 704,
    "preview": "---\ntitle: telepresence curl\ndescription: curl with daemon network\nhide_table_of_contents: true\n---\n\ncurl with daemon ne"
  },
  {
    "path": "docs/reference/cli/telepresence_docker-run.md",
    "chars": 734,
    "preview": "---\ntitle: telepresence docker-run\ndescription: Docker run with daemon network\nhide_table_of_contents: true\n---\n\nDocker "
  },
  {
    "path": "docs/reference/cli/telepresence_gather-logs.md",
    "chars": 2555,
    "preview": "---\ntitle: telepresence gather-logs\ndescription: Gather logs from traffic-manager, traffic-agent, user and root daemons,"
  },
  {
    "path": "docs/reference/cli/telepresence_genyaml.md",
    "chars": 2246,
    "preview": "---\ntitle: telepresence genyaml\ndescription: Generate YAML for use in kubernetes manifests.\nhide_table_of_contents: true"
  },
  {
    "path": "docs/reference/cli/telepresence_genyaml_annotations.md",
    "chars": 1143,
    "preview": "---\ntitle: telepresence genyaml annotations\ndescription: Generate YAML for the pod template metadata annotations.\nhide_t"
  },
  {
    "path": "docs/reference/cli/telepresence_genyaml_config.md",
    "chars": 4147,
    "preview": "---\ntitle: telepresence genyaml config\ndescription: Generate YAML for the agent's entry in the telepresence-agents confi"
  },
  {
    "path": "docs/reference/cli/telepresence_genyaml_container.md",
    "chars": 3459,
    "preview": "---\ntitle: telepresence genyaml container\ndescription: Generate YAML for the traffic-agent container.\nhide_table_of_cont"
  },
  {
    "path": "docs/reference/cli/telepresence_genyaml_initcontainer.md",
    "chars": 3310,
    "preview": "---\ntitle: telepresence genyaml initcontainer\ndescription: Generate YAML for the traffic-agent init container.\nhide_tabl"
  },
  {
    "path": "docs/reference/cli/telepresence_genyaml_volume.md",
    "chars": 3441,
    "preview": "---\ntitle: telepresence genyaml volume\ndescription: Generate YAML for the traffic-agent volume.\nhide_table_of_contents: "
  },
  {
    "path": "docs/reference/cli/telepresence_helm.md",
    "chars": 1352,
    "preview": "---\ntitle: telepresence helm\ndescription: Helm commands using the embedded Telepresence Helm chart.\nhide_table_of_conten"
  },
  {
    "path": "docs/reference/cli/telepresence_helm_install.md",
    "chars": 6047,
    "preview": "---\ntitle: telepresence helm install\ndescription: Install telepresence traffic manager\nhide_table_of_contents: true\n---\n"
  },
  {
    "path": "docs/reference/cli/telepresence_helm_lint.md",
    "chars": 5849,
    "preview": "---\ntitle: telepresence helm lint\ndescription: Verify the embedded telepresence Helm chart\nhide_table_of_contents: true\n"
  },
  {
    "path": "docs/reference/cli/telepresence_helm_uninstall.md",
    "chars": 5063,
    "preview": "---\ntitle: telepresence helm uninstall\ndescription: Uninstall telepresence traffic manager\nhide_table_of_contents: true\n"
  },
  {
    "path": "docs/reference/cli/telepresence_helm_upgrade.md",
    "chars": 6290,
    "preview": "---\ntitle: telepresence helm upgrade\ndescription: Upgrade telepresence traffic manager\nhide_table_of_contents: true\n---\n"
  },
  {
    "path": "docs/reference/cli/telepresence_helm_version.md",
    "chars": 755,
    "preview": "---\ntitle: telepresence helm version\ndescription: Print the version of the Helm client\nhide_table_of_contents: true\n---\n"
  },
  {
    "path": "docs/reference/cli/telepresence_ingest.md",
    "chars": 3159,
    "preview": "---\ntitle: telepresence ingest\ndescription: Ingest a container\nhide_table_of_contents: true\n---\n\nIngest a container\n\n###"
  },
  {
    "path": "docs/reference/cli/telepresence_intercept.md",
    "chars": 5683,
    "preview": "---\ntitle: telepresence intercept\ndescription: Intercept a service\nhide_table_of_contents: true\n---\n\nIntercept a service"
  },
  {
    "path": "docs/reference/cli/telepresence_leave.md",
    "chars": 794,
    "preview": "---\ntitle: telepresence leave\ndescription: Remove existing intercept\nhide_table_of_contents: true\n---\n\nRemove existing i"
  }
]

// ... and 662 more files (download for full content)

About this extraction

This page contains the full source code of the telepresenceio/telepresence GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 862 files (4.1 MB), approximately 1.1M tokens, and a symbol index with 5614 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!