Skip to content
46 changes: 17 additions & 29 deletions registry/coder/modules/cursor/main.tf
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
terraform {
required_version = ">= 1.0"

required_providers {
coder = {
source = "coder/coder"
version = ">= 2.5"
}
}
}

variable "agent_id" {
Expand Down Expand Up @@ -64,26 +57,21 @@ locals {
mcp_b64 = var.mcp != "" ? base64encode(var.mcp) : ""
}

resource "coder_app" "cursor" {
agent_id = var.agent_id
external = true
icon = "/icon/cursor.svg"
slug = var.slug
display_name = var.display_name
order = var.order
group = var.group
url = join("", [
"cursor://coder.coder-remote/open",
"?owner=",
data.coder_workspace_owner.me.name,
"&workspace=",
data.coder_workspace.me.name,
var.folder != "" ? join("", ["&folder=", var.folder]) : "",
var.open_recent ? "&openRecent" : "",
"&url=",
data.coder_workspace.me.access_url,
"&token=$SESSION_TOKEN",
])
module "vscode-desktop-core" {
source = "registry.coder.com/coder/vscode-desktop-core/coder"
version = "1.0.0"

agent_id = var.agent_id

coder_app_icon = "/icon/cursor.svg"
coder_app_slug = var.slug
coder_app_display_name = var.display_name
coder_app_order = var.order
coder_app_group = var.group

folder = var.folder
open_recent = var.open_recent
protocol = "cursor"
}

resource "coder_script" "cursor_mcp" {
Expand All @@ -103,6 +91,6 @@ resource "coder_script" "cursor_mcp" {
}

output "cursor_url" {
value = coder_app.cursor.url
value = module.cursor.ide_uri
description = "Cursor IDE Desktop URL."
}
}
58 changes: 17 additions & 41 deletions registry/coder/modules/kiro/main.tf
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
terraform {
required_version = ">= 1.0"

required_providers {
coder = {
source = "coder/coder"
version = ">= 2.5"
}
}
}

variable "agent_id" {
Expand Down Expand Up @@ -38,18 +31,6 @@ variable "group" {
default = null
}

variable "slug" {
type = string
description = "The slug of the app."
default = "kiro"
}

variable "display_name" {
type = string
description = "The display name of the app."
default = "Kiro IDE"
}

variable "mcp" {
type = string
description = "JSON-encoded string to configure MCP servers for Kiro. When set, writes ~/.kiro/settings/mcp.json."
Expand All @@ -63,26 +44,21 @@ locals {
mcp_b64 = var.mcp != "" ? base64encode(var.mcp) : ""
}

resource "coder_app" "kiro" {
agent_id = var.agent_id
external = true
icon = "/icon/kiro.svg"
slug = var.slug
display_name = var.display_name
order = var.order
group = var.group
url = join("", [
"kiro://coder.coder-remote/open",
"?owner=",
data.coder_workspace_owner.me.name,
"&workspace=",
data.coder_workspace.me.name,
var.folder != "" ? join("", ["&folder=", var.folder]) : "",
var.open_recent ? "&openRecent" : "",
"&url=",
data.coder_workspace.me.access_url,
"&token=$SESSION_TOKEN",
])
module "vscode-desktop-core" {
source = "registry.coder.com/coder/vscode-desktop-core/coder"
version = "1.0.0"

agent_id = var.agent_id

coder_app_icon = "/icon/kiro.svg"
coder_app_slug = "kiro"
coder_app_display_name = "Kiro IDE"
coder_app_order = var.order
coder_app_group = var.group

folder = var.folder
open_recent = var.open_recent
protocol = "kiro"
}

resource "coder_script" "kiro_mcp" {
Expand All @@ -102,6 +78,6 @@ resource "coder_script" "kiro_mcp" {
}

output "kiro_url" {
value = coder_app.kiro.url
value = module.kiro.ide_uri
description = "Kiro IDE URL."
}
}
16 changes: 8 additions & 8 deletions registry/coder/modules/vscode-desktop-core/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
display_name: VSCode Desktop Core
display_name: Coder VSCode Desktop Core
description: Building block for modules that need to link to an external VSCode-based IDE
icon: ../../../../.icons/coder.svg
verified: true
Expand All @@ -11,20 +11,20 @@ tags: [internal, library]
> [!CAUTION]
> We do not recommend using this module directly. Instead, please consider using one of our [Desktop IDE modules](https://registry.coder.com/modules?search=tag%3Aide).

The VSCode Desktop Core module is a building block for modules that need to expose access to VSCode-based IDEs. It is intended primarily to be used as a library to create modules for VSCode-based IDEs.
The VSCode Desktop Core module is a building block for modules that need to expose access to VSCode-based IDEs. It is intended primarily for internal use by Coder to create modules for VSCode-based IDEs.

```tf
module "vscode-desktop-core" {
source = "registry.coder.com/coder/vscode-desktop-core/coder"
version = "1.0.0"
version = "1.0.1"

agent_id = var.agent_id

coder_app_icon = "/icon/code.svg"
coder_app_slug = "vscode"
coder_app_display_name = "VS Code Desktop"
coder_app_order = var.order
coder_app_group = var.group
web_app_icon = "/icon/code.svg"
web_app_slug = "vscode"
web_app_display_name = "VS Code Desktop"
web_app_order = var.order
web_app_group = var.group

folder = var.folder
open_recent = var.open_recent
Expand Down
8 changes: 4 additions & 4 deletions registry/coder/modules/vscode-desktop-core/main.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ const appName = "vscode-desktop";

const defaultVariables = {
agent_id: "foo",
coder_app_icon: "/icon/code.svg",
coder_app_slug: "vscode",
coder_app_display_name: "VS Code Desktop",
web_app_icon: "/icon/code.svg",
web_app_slug: "vscode",
web_app_display_name: "VS Code Desktop",
protocol: "vscode",
};

Expand Down Expand Up @@ -85,7 +85,7 @@ describe("vscode-desktop-core", async () => {

it("expect order to be set", async () => {
const state = await runTerraformApply(import.meta.dir, {
coder_app_order: "22",
web_app_order: "22",
...defaultVariables,
});

Expand Down
43 changes: 28 additions & 15 deletions registry/coder/modules/vscode-desktop-core/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -28,31 +28,31 @@ variable "open_recent" {

variable "protocol" {
type = string
description = "The URI protocol for the IDE."
description = "The URI protocol the IDE."
}

variable "coder_app_icon" {
variable "web_app_icon" {
type = string
description = "The icon of the coder_app."
}

variable "coder_app_slug" {
variable "web_app_slug" {
type = string
description = "The slug of the coder_app."
}

variable "coder_app_display_name" {
variable "web_app_display_name" {
type = string
description = "The display name of the coder_app."
}

variable "coder_app_order" {
variable "web_app_order" {
type = number
description = "The order of the coder_app."
default = null
}

variable "coder_app_group" {
variable "web_app_group" {
type = string
description = "The group of the coder_app."
default = null
Expand All @@ -65,25 +65,38 @@ resource "coder_app" "vscode-desktop" {
agent_id = var.agent_id
external = true

icon = var.coder_app_icon
slug = var.coder_app_slug
display_name = var.coder_app_display_name
icon = var.web_app_icon
slug = var.web_app_slug
display_name = var.web_app_display_name

order = var.coder_app_order
group = var.coder_app_group
order = var.web_app_order
group = var.web_app_group

# While the call to "join" is not strictly necessary, it makes the URL more readable.
url = join("", [
"${var.protocol}://coder.coder-remote/open",
var.protocol,
"://coder.coder-remote/open",
"?owner=",
data.coder_workspace_owner.me.name,
"&workspace=",
data.coder_workspace.me.name,
var.folder != "" ? join("", ["&folder=", var.folder]) : "",
var.open_recent ? "&openRecent" : "",
"&url=",
data.coder_workspace.me.access_url,
"&token=$SESSION_TOKEN",
])

/*
url = join("", [
"vscode://coder.coder-remote/open",
"?owner=${data.coder_workspace_owner.me.name}",
"&workspace=${data.coder_workspace.me.name}",
var.folder != "" ? join("", ["&folder=", var.folder]) : "",
var.open_recent ? "&openRecent" : "",
"&url=${data.coder_workspace.me.access_url}",
# NOTE: There is a protocol whitelist for the token replacement, so this will only work with the protocols hardcoded in the front-end.
# (https://github.com/coder/coder/blob/6ba4b5bbc95e2e528d7f5b1e31fffa200ae1a6db/site/src/modules/apps/apps.ts#L18)
"&token=$SESSION_TOKEN",
])
*/
}

output "ide_uri" {
Expand Down
46 changes: 15 additions & 31 deletions registry/coder/modules/vscode-desktop/main.tf
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
terraform {
required_version = ">= 1.0"

required_providers {
coder = {
source = "coder/coder"
version = ">= 2.5"
}
}
}

variable "agent_id" {
Expand Down Expand Up @@ -38,33 +31,24 @@ variable "group" {
default = null
}

data "coder_workspace" "me" {}
data "coder_workspace_owner" "me" {}
module "vscode-desktop-core" {
source = "registry.coder.com/coder/vscode-desktop-core/coder"
version = "1.0.0"

agent_id = var.agent_id

resource "coder_app" "vscode" {
agent_id = var.agent_id
external = true
icon = "/icon/code.svg"
slug = "vscode"
display_name = "VS Code Desktop"
order = var.order
group = var.group
coder_app_icon = "/icon/code.svg"
coder_app_slug = "vscode"
coder_app_display_name = "VS Code Desktop"
coder_app_order = var.order
coder_app_group = var.group

url = join("", [
"vscode://coder.coder-remote/open",
"?owner=",
data.coder_workspace_owner.me.name,
"&workspace=",
data.coder_workspace.me.name,
var.folder != "" ? join("", ["&folder=", var.folder]) : "",
var.open_recent ? "&openRecent" : "",
"&url=",
data.coder_workspace.me.access_url,
"&token=$SESSION_TOKEN",
])
folder = var.folder
open_recent = var.open_recent
protocol = "vscode"
}

output "vscode_url" {
value = coder_app.vscode.url
value = module.vscode.ide_uri
description = "VS Code Desktop URL."
}
}
Loading
Loading