Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

## Unreleased

### Changed

- deployment target OS is now derived from the workspace agent's reported OS, falling back to automatic detection when
unknown

## 0.9.2 - 2026-08-06

### Fixed
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
version=0.9.2
version=0.9.3
group=com.coder.toolbox
name=coder-toolbox
21 changes: 20 additions & 1 deletion src/main/kotlin/com/coder/toolbox/CoderRemoteEnvironment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import com.coder.toolbox.sdk.ex.APIResponseException
import com.coder.toolbox.sdk.v2.models.NetworkMetrics
import com.coder.toolbox.sdk.v2.models.Workspace
import com.coder.toolbox.sdk.v2.models.WorkspaceAgent
import com.coder.toolbox.util.OS
import com.coder.toolbox.util.waitForFalseWithTimeout
import com.coder.toolbox.util.withPath
import com.coder.toolbox.views.Action
Expand All @@ -21,7 +22,10 @@ import com.jetbrains.toolbox.api.remoteDev.AfterDisconnectHook
import com.jetbrains.toolbox.api.remoteDev.BeforeConnectionHook
import com.jetbrains.toolbox.api.remoteDev.EnvironmentVisibilityState
import com.jetbrains.toolbox.api.remoteDev.RemoteProviderEnvironment
import com.jetbrains.toolbox.api.remoteDev.deploy.DeploymentSettings
import com.jetbrains.toolbox.api.remoteDev.deploy.DeploymentTarget
import com.jetbrains.toolbox.api.remoteDev.environments.EnvironmentContentsView
import com.jetbrains.toolbox.api.remoteDev.environments.WithDeploymentSettings
import com.jetbrains.toolbox.api.remoteDev.states.EnvironmentDescription
import com.jetbrains.toolbox.api.remoteDev.states.RemoteEnvironmentState
import com.jetbrains.toolbox.api.ui.actions.ActionDescription
Expand All @@ -48,6 +52,13 @@ private val POLL_INTERVAL = 5.seconds
private fun environmentId(workspace: Workspace, agent: WorkspaceAgent?): String =
agent?.let { "${workspace.name}.${it.name}" } ?: workspace.name

private fun OS?.toDeploymentTarget(): DeploymentTarget = when (this) {
OS.LINUX -> DeploymentTarget.LINUX
OS.MAC -> DeploymentTarget.MACOS
OS.WINDOWS -> DeploymentTarget.WINDOWS
else -> DeploymentTarget.AUTO
}

/**
* Represents a workspace, or a workspace and agent combination when an agent is available.
*
Expand All @@ -60,7 +71,8 @@ class CoderRemoteEnvironment(
private val workspaceRefreshTrigger: Channel<Boolean>,
private var workspace: Workspace,
private var agent: WorkspaceAgent?,
) : RemoteProviderEnvironment(environmentId(workspace, agent)), BeforeConnectionHook, AfterDisconnectHook {
) : RemoteProviderEnvironment(environmentId(workspace, agent)), BeforeConnectionHook, AfterDisconnectHook,
WithDeploymentSettings {
private var environmentStatus = WorkspaceAndAgentStatus.from(workspace, agent)

override var name: String = environmentId(workspace, agent)
Expand All @@ -74,6 +86,13 @@ class CoderRemoteEnvironment(
override val additionalEnvironmentInformation: MutableMap<LocalizableString, String> = mutableMapOf()
override val actionsList: MutableStateFlow<List<ActionDescription>> = MutableStateFlow(emptyList())

/**
* Derives the deployment target from the agent's reported OS, falling back to
* AUTO (automatic remote OS detection) when the agent or its OS is unknown.
*/
override val deploymentSettings: DeploymentSettings
get() = DeploymentSettings.Default.copy(deploymentTarget = agent?.operatingSystem.toDeploymentTarget())

private val networkMetricsMarshaller = Moshi.Builder().build().adapter(NetworkMetrics::class.java)
private val proxyCommandHandle = SshCommandProcessHandle(context)
private var pollJob: Job? = null
Expand Down
Loading