Skip to content

Tags: coder/coder-jetbrains-toolbox

Tags

v0.8.1

Toggle v0.8.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix: simplify URI handling when the same deployment URL is already op…

…ened (#227)

Netflix reported that only seems to reproduce on Linux (we've only
tested Ubuntu so far).
I can’t reproduce it on macOS. First, here’s some context:
1. Polling workspaces:
Coder Toolbox polls the deployment every 5 seconds for workspace
updates.
These updates (new workspaces, deletions,status changes) are stored in a
cached “environments” list (an oversimplified explanation). When a URI
is executed,
we reset the content of the list and run the login sequence, which
re-initializes
the HTTP poller and CLI using the new deployment URL and token. A new
polling loop
then begins populating the environments list again.

2. Cache monitoring:
Toolbox watches this cached list for changes—especially status changes,
which determine
when an SSH connection can be established.

In Netflix’s case, they launched Toolbox, created a workspace from the
Dashboard, and the
poller added it to the environments list. When the workspace switched
from starting to ready,
they used a URI to connect to it. The URI reset the list, then the
poller repopulated it. But
because the list had the same IDs (but new object references), Toolbox
didn’t detect any changes.
As a result, it never triggered the SSH connection. This issue only
reproduces on Linux, but it
might explain some of the sporadic macOS failures Atif mentioned in the
past.

I need to dig deeper into the Toolbox bytecode to determine whether this
is a Toolbox bug, but
it does seem like Toolbox wasn’t designed to switch cleanly between
multiple deployments and/or users.
The current Coder plugin behavior—always performing a full login
sequence on every URI—is also ...sub-optimal.
It only really makes sense in these scenarios:

1. Toolbox started with deployment A, but the URI targets deployment B.
2. Toolbox started with deployment A/user X, but the URI targets
deployment A/user Y.

But this design is inefficient for the most common case: connecting via
URI to a workspace on the
same deployment and same user. While working on the fix, I realized that
scenario (2) is not realistic.
On the same host machine, why would multiple users log into the same
deployment via Toolbox? The whole
fix revolves around the idea of just recreating the http client and
updating the CLI with the new token
instead of going through the full authentication steps when the URI
deployment URL is the same as the
currently opened URL

The fix focuses on simply recreating the HTTP client and updating the
CLI token when the URI URL matches the existing deployment URL, instead
of running a full login.

This PR splits responsibilities more cleanly:

- CoderProtocolHandler now only finds the workspace and agent and
handles IDE installation and launch.
- the logic for creating a new HTTP client, updating the CLI, cleaning
up old resources (polling loop, environment cache), and handling
deployment URL changes is separated out.

The benefits would be:

- shared logic for cleanup and re-initialization, with less coupling and
clearer, more maintainable code.
- a clean way to check whether the URI’s deployment URL matches the
current one and react appropriately when they differ.

v0.8.0

Toggle v0.8.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: next version is 0.8.0 (#228)

Major features were added like the ability to refresh mTLS certificates
and start workspace via CLI instead of REST API

v0.7.2

Toggle v0.7.2's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: downgrade plugin version to 0.7.2 (#217)

It was increased to 0.7.3 by mistake, 0.7.2 was not actually released.

v0.7.1

Toggle v0.7.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
 fix: allow x-ms-dos-executable content type (#207)

On some Windows versions the cli stream comes as
application/x-ms-dos-executable.

- resolves #187

v0.7.0

Toggle v0.7.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
impl: store last used URL in Toolbox Settings Store (#200)

Context: Toolbox can store key/value pairs in two places:
- a settings store which is backed by a clear text json file per each
plugin
- native keystore for sensitive data

At the same time some of Coder's clients (ex: Netflix) would like to
deploy at scale preconfigured settings for Toolbox. Most of the needed
settings are part of json backed store except the last used URL.

This PR reworks the code around the last used URL/token and moves the
URL in the json backed store, making it easy to configure. At the same
time we still support the pair stored in the native keystore for
backward compatibility reasons.

v0.6.6

Toggle v0.6.6's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
 impl: confirmation dialog for workspace deletion (#179)

Users are now required to confirm the workspace name if they want to
delete a workspace. This is in order to avoid any accidental removals.

Note: right now there are two issues with Toolbox input dialogs, the
dialog title is not rendered, and worse - the text field is rendered as
a password input field, so it does not make sense to merge this until
Toolbox fixes the issues.

<img width="486" height="746" alt="image"
src="https://github.com/user-attachments/assets/e8fc2409-6e24-42d0-8258-473c29f5df44"
/>


- resolves #178

v0.6.5

Toggle v0.6.5's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix: report errors while running actions (#193)

JetBrains team reported in the past a couple of errors in the log, one
of them being `A workspace build is already active`. The issue can be
reproduced if the user hits the `Stop` action for example quite quick.
It takes maybe one or two seconds to make rest api request, then for the
backend to enqueue the build and change the workspace action. If we hit
the action buttons really fast then this error could be reproduced.

One approach I tried was to disable the action buttons in the context
menu for the duration the request is executed. But for some reason the
"enabled" property is not working in context menu, only when the actions
are rendered on a UI "page".

Instead, I decided to refactor the existing code and (also) visually
report the errors in the UI screen to make the user aware in some cases
that a job is already running on the backend.

Another error reported by JetBrains is a `RejectedExecutionException` in
the rest api client, and from the stack trace it seems the thread pool
in the rest client was at some point shutdown.
I think it is some sort of race condition, some thread calling shutting
down the rest api client while the UI thread still executes polling and
user's action. I tried to reproduce the issue with no success, and so
I'm improving the logging around plugin de-initialization in the hope
that next time the sequence of events is more helpful.

v0.6.4

Toggle v0.6.4's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: bump org.jetbrains.intellij.plugins:structure-toolbox from 3.3…

…15 to 3.316 (#188)

Bumps
[org.jetbrains.intellij.plugins:structure-toolbox](https://github.com/JetBrains/intellij-plugin-verifier)
from 3.315 to 3.316.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/JetBrains/intellij-plugin-verifier/commits">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=org.jetbrains.intellij.plugins:structure-toolbox&package-manager=gradle&previous-version=3.315&new-version=3.316)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

v0.6.3

Toggle v0.6.3's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
impl: report progress while handling URI (#180)

Up until now there was no progress while downloading CLI, setting up the
cli and the ssh config while handling URIs. This PR reworks the uri
handler and the connection screen to be able to reuse the later part in
the URI handler. This should improve the experience because the user is
no longer left in the dark for a good couple of seconds.

v0.6.2

Toggle v0.6.2's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix: enforce Content-Type to accept only binary responses (#174)

Add validation for CLI downloads that ensures the Content-Type header is
indicating a binary stream (`application/octet-stream`), including
common variants with parameters. This prevents saving unexpected HTML or
other non-binary responses (e.g., from frontend dev servers on :8080) as
binaries, improving reliability and providing clearer error feedback.