diff --git a/registry/coder/modules/cursor/main.tf b/registry/coder/modules/cursor/main.tf index d26000a83..defc7bc47 100644 --- a/registry/coder/modules/cursor/main.tf +++ b/registry/coder/modules/cursor/main.tf @@ -1,12 +1,5 @@ terraform { required_version = ">= 1.0" - - required_providers { - coder = { - source = "coder/coder" - version = ">= 2.5" - } - } } variable "agent_id" { @@ -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" { @@ -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." -} +} \ No newline at end of file diff --git a/registry/coder/modules/kiro/main.tf b/registry/coder/modules/kiro/main.tf index fed8407b4..bf7eaece7 100644 --- a/registry/coder/modules/kiro/main.tf +++ b/registry/coder/modules/kiro/main.tf @@ -1,12 +1,5 @@ terraform { required_version = ">= 1.0" - - required_providers { - coder = { - source = "coder/coder" - version = ">= 2.5" - } - } } variable "agent_id" { @@ -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." @@ -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" { @@ -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." -} +} \ No newline at end of file diff --git a/registry/coder/modules/vscode-desktop-core/README.md b/registry/coder/modules/vscode-desktop-core/README.md index 7ae070dd8..d95e2da28 100644 --- a/registry/coder/modules/vscode-desktop-core/README.md +++ b/registry/coder/modules/vscode-desktop-core/README.md @@ -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 @@ -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 diff --git a/registry/coder/modules/vscode-desktop-core/main.test.ts b/registry/coder/modules/vscode-desktop-core/main.test.ts index 6777b1d58..7b0178f65 100644 --- a/registry/coder/modules/vscode-desktop-core/main.test.ts +++ b/registry/coder/modules/vscode-desktop-core/main.test.ts @@ -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", }; @@ -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, }); diff --git a/registry/coder/modules/vscode-desktop-core/main.tf b/registry/coder/modules/vscode-desktop-core/main.tf index 3bed8e791..7e6757129 100644 --- a/registry/coder/modules/vscode-desktop-core/main.tf +++ b/registry/coder/modules/vscode-desktop-core/main.tf @@ -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 @@ -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" { diff --git a/registry/coder/modules/vscode-desktop/main.tf b/registry/coder/modules/vscode-desktop/main.tf index f93d14e30..033451bc5 100644 --- a/registry/coder/modules/vscode-desktop/main.tf +++ b/registry/coder/modules/vscode-desktop/main.tf @@ -1,12 +1,5 @@ terraform { required_version = ">= 1.0" - - required_providers { - coder = { - source = "coder/coder" - version = ">= 2.5" - } - } } variable "agent_id" { @@ -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." -} +} \ No newline at end of file diff --git a/registry/coder/modules/windsurf/main.tf b/registry/coder/modules/windsurf/main.tf index b75f86386..fbf65f640 100644 --- a/registry/coder/modules/windsurf/main.tf +++ b/registry/coder/modules/windsurf/main.tf @@ -1,12 +1,5 @@ terraform { required_version = ">= 1.0" - - required_providers { - coder = { - source = "coder/coder" - version = ">= 2.5" - } - } } variable "agent_id" { @@ -16,7 +9,7 @@ variable "agent_id" { variable "folder" { type = string - description = "The folder to open in Cursor IDE." + description = "The folder to open in Windsurf Editor." default = "" } @@ -63,26 +56,21 @@ locals { mcp_b64 = var.mcp != "" ? base64encode(var.mcp) : "" } -resource "coder_app" "windsurf" { - agent_id = var.agent_id - external = true - icon = "/icon/windsurf.svg" - slug = var.slug - display_name = var.display_name - order = var.order - group = var.group - url = join("", [ - "windsurf://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/windsurf.svg" + coder_app_slug = "windsurf" + coder_app_display_name = "Windsurf Editor" + coder_app_order = var.order + coder_app_group = var.group + + folder = var.folder + open_recent = var.open_recent + protocol = "windsurf" } resource "coder_script" "windsurf_mcp" { @@ -102,6 +90,6 @@ resource "coder_script" "windsurf_mcp" { } output "windsurf_url" { - value = coder_app.windsurf.url + value = module.windsurf.ide_uri description = "Windsurf Editor URL." -} +} \ No newline at end of file