From bbae3d105f910a25f19f2896edc5421aa1a7689f Mon Sep 17 00:00:00 2001 From: Phorcys <57866459+phorcys420@users.noreply.github.com> Date: Thu, 31 Jul 2025 16:51:32 +0000 Subject: [PATCH 01/18] feat: add `vscode-desktop-core` module --- .../modules/vscode-desktop-core/README.md | 14 +++ .../modules/vscode-desktop-core/main.test.ts | 100 +++++++++++++++++ .../coder/modules/vscode-desktop-core/main.tf | 105 ++++++++++++++++++ 3 files changed, 219 insertions(+) create mode 100644 registry/coder/modules/vscode-desktop-core/README.md create mode 100644 registry/coder/modules/vscode-desktop-core/main.test.ts create mode 100644 registry/coder/modules/vscode-desktop-core/main.tf diff --git a/registry/coder/modules/vscode-desktop-core/README.md b/registry/coder/modules/vscode-desktop-core/README.md new file mode 100644 index 000000000..ced483dd3 --- /dev/null +++ b/registry/coder/modules/vscode-desktop-core/README.md @@ -0,0 +1,14 @@ +--- +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 +tags: [internal, library] +--- + +# VS Code Desktop Core + +> [!CAUTION] +> We do not recommend using this module directly. Instead, please consider using one of our [Tasks-compatible AI agent modules](https://registry.coder.com/modules?search=tag%3Atasks). + +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. diff --git a/registry/coder/modules/vscode-desktop-core/main.test.ts b/registry/coder/modules/vscode-desktop-core/main.test.ts new file mode 100644 index 000000000..e7b019667 --- /dev/null +++ b/registry/coder/modules/vscode-desktop-core/main.test.ts @@ -0,0 +1,100 @@ +import { describe, expect, it } from "bun:test"; +import { + runTerraformApply, + runTerraformInit, + testRequiredVariables, +} from "~test"; + +// hardcoded coder_app name in main.tf +const appName = "vscode-desktop"; + +const defaultVariables = { + agent_id: "foo", + web_app_icon: "/icon/code.svg", + web_app_slug: "vscode", + web_app_display_name: "VS Code Desktop", + protocol: "vscode", +} + +describe("vscode-desktop-core", async () => { + await runTerraformInit(import.meta.dir); + + testRequiredVariables(import.meta.dir, defaultVariables); + + it("default output", async () => { + const state = await runTerraformApply(import.meta.dir, defaultVariables); + expect(state.outputs.ide_uri.value).toBe( + `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, + ); + + const coder_app = state.resources.find( + (res) => res.type === "coder_app" && res.name === appName, + ); + + expect(coder_app).not.toBeNull(); + expect(coder_app?.instances.length).toBe(1); + expect(coder_app?.instances[0].attributes.order).toBeNull(); + }); + + it("adds folder", async () => { + const state = await runTerraformApply(import.meta.dir, { + folder: "/foo/bar", + + ...defaultVariables + }); + + expect(state.outputs.ide_uri.value).toBe( + `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, + ); + }); + + it("adds folder and open_recent", async () => { + const state = await runTerraformApply(import.meta.dir, { + folder: "/foo/bar", + open_recent: "true", + + ...defaultVariables, + }); + expect(state.outputs.ide_uri.value).toBe( + `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&openRecent&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, + ); + }); + + it("adds folder but not open_recent", async () => { + const state = await runTerraformApply(import.meta.dir, { + folder: "/foo/bar", + openRecent: "false", + + ...defaultVariables, + }); + expect(state.outputs.ide_uri.value).toBe( + `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, + ); + }); + + it("adds open_recent", async () => { + const state = await runTerraformApply(import.meta.dir, { + open_recent: "true", + + ...defaultVariables, + }); + expect(state.outputs.ide_uri.value).toBe( + `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&openRecent&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, + ); + }); + + it("expect order to be set", async () => { + const state = await runTerraformApply(import.meta.dir, { + web_app_order: "22", + ...defaultVariables + }); + + const coder_app = state.resources.find( + (res) => res.type === "coder_app" && res.name === appName, + ); + + expect(coder_app).not.toBeNull(); + expect(coder_app?.instances.length).toBe(1); + expect(coder_app?.instances[0].attributes.order).toBe(22); + }); +}); diff --git a/registry/coder/modules/vscode-desktop-core/main.tf b/registry/coder/modules/vscode-desktop-core/main.tf new file mode 100644 index 000000000..77b4d8f36 --- /dev/null +++ b/registry/coder/modules/vscode-desktop-core/main.tf @@ -0,0 +1,105 @@ +terraform { + required_version = ">= 1.0" + + required_providers { + coder = { + source = "coder/coder" + version = ">= 2.5" + } + } +} + +variable "agent_id" { + type = string + description = "The ID of a Coder agent." +} + +variable "folder" { + type = string + description = "The folder to open in the IDE." + default = "" +} + +variable "open_recent" { + type = bool + description = "Open the most recent workspace or folder. Falls back to the folder if there is no recent workspace or folder to open." + default = false +} + +variable "protocol" { + type = string + description = "The URI protocol the IDE." +} + +variable "web_app_icon" { + type = string + description = "The icon of the coder_app." +} + +variable "web_app_slug" { + type = string + description = "The slug of the coder_app." +} + +variable "web_app_display_name" { + type = string + description = "The display name of the coder_app." +} + +variable "web_app_order" { + type = number + description = "The order of the coder_app." + default = null +} + +variable "web_app_group" { + type = string + description = "The group of the coder_app." + default = null +} + +data "coder_workspace" "me" {} +data "coder_workspace_owner" "me" {} + +resource "coder_app" "vscode-desktop" { + agent_id = var.agent_id + external = true + + icon = var.web_app_icon + slug = var.web_app_slug + display_name = var.web_app_display_name + + order = var.web_app_order + group = var.web_app_group + + url = join("", [ + 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}", + "&token=$SESSION_TOKEN", + ]) + */ +} + +output "ide_uri" { + value = coder_app.vscode-desktop.url + description = "IDE URI." +} \ No newline at end of file From 521a8d290f48be61f1893e98c7c9f966fe3d68c9 Mon Sep 17 00:00:00 2001 From: Phorcys <57866459+phorcys420@users.noreply.github.com> Date: Thu, 31 Jul 2025 22:40:36 +0000 Subject: [PATCH 02/18] chore: format --- registry/coder/modules/vscode-desktop-core/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/registry/coder/modules/vscode-desktop-core/main.tf b/registry/coder/modules/vscode-desktop-core/main.tf index 77b4d8f36..7e6757129 100644 --- a/registry/coder/modules/vscode-desktop-core/main.tf +++ b/registry/coder/modules/vscode-desktop-core/main.tf @@ -64,7 +64,7 @@ data "coder_workspace_owner" "me" {} resource "coder_app" "vscode-desktop" { agent_id = var.agent_id external = true - + icon = var.web_app_icon slug = var.web_app_slug display_name = var.web_app_display_name From 74399e9ca9b826f81e82ac6c4216217e9adf2f65 Mon Sep 17 00:00:00 2001 From: Phorcys <57866459+phorcys420@users.noreply.github.com> Date: Thu, 31 Jul 2025 22:53:11 +0000 Subject: [PATCH 03/18] chore: update `vscode-desktop` module --- registry/coder/modules/vscode-desktop/main.tf | 46 ++++++------------- 1 file changed, 15 insertions(+), 31 deletions(-) diff --git a/registry/coder/modules/vscode-desktop/main.tf b/registry/coder/modules/vscode-desktop/main.tf index f93d14e30..e23d5c5c4 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" { + # TODO: update this + source = "git::https://github.com/coder/registry.git//registry/coder/modules/vscode-desktop-core?ref=phorcys420/centralize-vscode-desktop" + + 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 + 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 - 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 From ccc0c56eb56881f89e711a50a661bb4f8509c5b3 Mon Sep 17 00:00:00 2001 From: Phorcys <57866459+phorcys420@users.noreply.github.com> Date: Thu, 31 Jul 2025 23:00:08 +0000 Subject: [PATCH 04/18] chore: update `windsurf` module --- registry/coder/modules/windsurf/main.tf | 49 +++++++++---------------- 1 file changed, 17 insertions(+), 32 deletions(-) diff --git a/registry/coder/modules/windsurf/main.tf b/registry/coder/modules/windsurf/main.tf index 2f9d02a5c..8203fb4e1 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 = "" } @@ -38,32 +31,24 @@ variable "group" { default = null } -data "coder_workspace" "me" {} -data "coder_workspace_owner" "me" {} +module "windsurf" { + # TODO: update this + source = "git::https://github.com/coder/registry.git//registry/coder/modules/vscode-desktop-core?ref=phorcys420/centralize-vscode-desktop" + + agent_id = var.agent_id -resource "coder_app" "windsurf" { - agent_id = var.agent_id - external = true - icon = "/icon/windsurf.svg" - slug = "windsurf" - display_name = "Windsurf Editor" - 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", - ]) + web_app_icon = "/icon/windsurf.svg" + web_app_slug = "windsurf" + web_app_display_name = "Windsurf Editor" + web_app_order = var.order + web_app_group = var.group + + folder = var.folder + open_recent = var.open_recent + protocol = "windsurf" } output "windsurf_url" { - value = coder_app.windsurf.url + value = module.windsurf.ide_uri description = "Windsurf Editor URL." -} +} \ No newline at end of file From f93132d73513370e2732ecaa8cf5a9686ce9a877 Mon Sep 17 00:00:00 2001 From: Phorcys <57866459+phorcys420@users.noreply.github.com> Date: Thu, 31 Jul 2025 23:00:17 +0000 Subject: [PATCH 05/18] chore: update `cursor` module --- registry/coder/modules/cursor/main.tf | 47 +++++++++------------------ 1 file changed, 16 insertions(+), 31 deletions(-) diff --git a/registry/coder/modules/cursor/main.tf b/registry/coder/modules/cursor/main.tf index 47d35b623..2688d7b1a 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" { @@ -50,32 +43,24 @@ variable "display_name" { default = "Cursor Desktop" } -data "coder_workspace" "me" {} -data "coder_workspace_owner" "me" {} +module "cursor" { + # TODO: update this + source = "git::https://github.com/coder/registry.git//registry/coder/modules/vscode-desktop-core?ref=phorcys420/centralize-vscode-desktop" + + agent_id = var.agent_id -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", - ]) + web_app_icon = "/icon/cursor.svg" + web_app_slug = var.slug + web_app_display_name = var.display_name + web_app_order = var.order + web_app_group = var.group + + folder = var.folder + open_recent = var.open_recent + protocol = "cursor" } output "cursor_url" { - value = coder_app.cursor.url + value = module.cursor.ide_uri description = "Cursor IDE Desktop URL." -} +} \ No newline at end of file From 66b23b40fecc21968b4344498665a52daed05980 Mon Sep 17 00:00:00 2001 From: Phorcys <57866459+phorcys420@users.noreply.github.com> Date: Thu, 31 Jul 2025 23:00:31 +0000 Subject: [PATCH 06/18] chore: update `kiro` module --- registry/coder/modules/kiro/main.tf | 55 ++++++++--------------------- 1 file changed, 14 insertions(+), 41 deletions(-) diff --git a/registry/coder/modules/kiro/main.tf b/registry/coder/modules/kiro/main.tf index a6a49948d..7822c5a90 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,44 +31,24 @@ variable "group" { default = null } -variable "slug" { - type = string - description = "The slug of the app." - default = "kiro" -} +module "kiro" { + # TODO: update this + source = "git::https://github.com/coder/registry.git//registry/coder/modules/vscode-desktop-core?ref=phorcys420/centralize-vscode-desktop" -variable "display_name" { - type = string - description = "The display name of the app." - default = "Kiro IDE" -} + agent_id = var.agent_id -data "coder_workspace" "me" {} -data "coder_workspace_owner" "me" {} + web_app_icon = "/icon/kiro.svg" + web_app_slug = "kiro" + web_app_display_name = "Kiro IDE" + web_app_order = var.order + web_app_group = var.group -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", - ]) + folder = var.folder + open_recent = var.open_recent + protocol = "kiro" } output "kiro_url" { - value = coder_app.kiro.url + value = module.kiro.ide_uri description = "Kiro IDE URL." -} +} \ No newline at end of file From 0b756d87bd922fa6f39c4dac621274224c98c871 Mon Sep 17 00:00:00 2001 From: Phorcys <57866459+phorcys420@users.noreply.github.com> Date: Thu, 31 Jul 2025 23:26:22 +0000 Subject: [PATCH 07/18] chore: update kiro readme --- registry/coder/modules/kiro/README.md | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/registry/coder/modules/kiro/README.md b/registry/coder/modules/kiro/README.md index 732472cb4..19a3d46c9 100644 --- a/registry/coder/modules/kiro/README.md +++ b/registry/coder/modules/kiro/README.md @@ -36,16 +36,3 @@ module "kiro" { folder = "/home/coder/project" } ``` - -### Open with custom display name and order - -```tf -module "kiro" { - count = data.coder_workspace.me.start_count - source = "registry.coder.com/coder/kiro/coder" - version = "1.0.0" - agent_id = coder_agent.example.id - display_name = "Kiro AI IDE" - order = 1 -} -``` From 7c0a8043a5c3735f364cbdb3ba4019f49a13bfb1 Mon Sep 17 00:00:00 2001 From: Phorcys <57866459+phorcys420@users.noreply.github.com> Date: Fri, 1 Aug 2025 15:23:52 +0000 Subject: [PATCH 08/18] chore: fix readme --- .../modules/vscode-desktop-core/README.md | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/registry/coder/modules/vscode-desktop-core/README.md b/registry/coder/modules/vscode-desktop-core/README.md index ced483dd3..fd847a64f 100644 --- a/registry/coder/modules/vscode-desktop-core/README.md +++ b/registry/coder/modules/vscode-desktop-core/README.md @@ -9,6 +9,25 @@ tags: [internal, library] # VS Code Desktop Core > [!CAUTION] -> We do not recommend using this module directly. Instead, please consider using one of our [Tasks-compatible AI agent modules](https://registry.coder.com/modules?search=tag%3Atasks). +> 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 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.1" + + agent_id = var.agent_id + + 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 + protocol = "vscode" +} +``` From b6758c93cf3dfb67e2a08a0f6e03a9136aa5adb0 Mon Sep 17 00:00:00 2001 From: Phorcys Date: Mon, 6 Oct 2025 13:48:52 +0000 Subject: [PATCH 09/18] chore: update module definitions --- registry/coder/modules/cursor/main.tf | 8 ++++---- registry/coder/modules/kiro/main.tf | 8 ++++---- registry/coder/modules/vscode-desktop/main.tf | 8 ++++---- registry/coder/modules/windsurf/main.tf | 8 ++++---- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/registry/coder/modules/cursor/main.tf b/registry/coder/modules/cursor/main.tf index 6178307fc..dc7952903 100644 --- a/registry/coder/modules/cursor/main.tf +++ b/registry/coder/modules/cursor/main.tf @@ -55,11 +55,11 @@ data "coder_workspace_owner" "me" {} locals { mcp_b64 = var.mcp != "" ? base64encode(var.mcp) : "" -} +} -module "cursor" { - # TODO: update this - source = "git::https://github.com/coder/registry.git//registry/coder/modules/vscode-desktop-core?ref=phorcys420/centralize-vscode-desktop" +module "vscode-desktop-core" { + source = "registry.coder.com/coder/vscode-desktop-core/coder" + version = "1.0.0" agent_id = var.agent_id diff --git a/registry/coder/modules/kiro/main.tf b/registry/coder/modules/kiro/main.tf index 7495a17c1..4a69afdc4 100644 --- a/registry/coder/modules/kiro/main.tf +++ b/registry/coder/modules/kiro/main.tf @@ -44,10 +44,10 @@ locals { mcp_b64 = var.mcp != "" ? base64encode(var.mcp) : "" } -module "kiro" { - # TODO: update this - source = "git::https://github.com/coder/registry.git//registry/coder/modules/vscode-desktop-core?ref=phorcys420/centralize-vscode-desktop" - +module "vscode-desktop-core" { + source = "registry.coder.com/coder/vscode-desktop-core/coder" + version = "1.0.0" + agent_id = var.agent_id web_app_icon = "/icon/kiro.svg" diff --git a/registry/coder/modules/vscode-desktop/main.tf b/registry/coder/modules/vscode-desktop/main.tf index e23d5c5c4..844c4a2e6 100644 --- a/registry/coder/modules/vscode-desktop/main.tf +++ b/registry/coder/modules/vscode-desktop/main.tf @@ -31,10 +31,10 @@ variable "group" { default = null } -module "vscode" { - # TODO: update this - source = "git::https://github.com/coder/registry.git//registry/coder/modules/vscode-desktop-core?ref=phorcys420/centralize-vscode-desktop" - +module "vscode-desktop-core" { + source = "registry.coder.com/coder/vscode-desktop-core/coder" + version = "1.0.0" + agent_id = var.agent_id web_app_icon = "/icon/code.svg" diff --git a/registry/coder/modules/windsurf/main.tf b/registry/coder/modules/windsurf/main.tf index 3c977c786..10db091d1 100644 --- a/registry/coder/modules/windsurf/main.tf +++ b/registry/coder/modules/windsurf/main.tf @@ -56,10 +56,10 @@ locals { mcp_b64 = var.mcp != "" ? base64encode(var.mcp) : "" } -module "windsurf" { - # TODO: update this - source = "git::https://github.com/coder/registry.git//registry/coder/modules/vscode-desktop-core?ref=phorcys420/centralize-vscode-desktop" - +module "vscode-desktop-core" { + source = "registry.coder.com/coder/vscode-desktop-core/coder" + version = "1.0.0" + agent_id = var.agent_id web_app_icon = "/icon/windsurf.svg" From 8b296afbe2a6bc10739c1692e5c4f7ce35f994ae Mon Sep 17 00:00:00 2001 From: Phorcys Date: Mon, 6 Oct 2025 14:09:13 +0000 Subject: [PATCH 10/18] chore: lint and format --- registry/coder/modules/cursor/main.tf | 4 ++-- registry/coder/modules/kiro/main.tf | 4 ++-- registry/coder/modules/vscode-desktop-core/README.md | 4 ++-- registry/coder/modules/vscode-desktop-core/main.test.ts | 6 +++--- registry/coder/modules/vscode-desktop/main.tf | 4 ++-- registry/coder/modules/windsurf/main.tf | 4 ++-- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/registry/coder/modules/cursor/main.tf b/registry/coder/modules/cursor/main.tf index dc7952903..8e5a17dc2 100644 --- a/registry/coder/modules/cursor/main.tf +++ b/registry/coder/modules/cursor/main.tf @@ -55,10 +55,10 @@ data "coder_workspace_owner" "me" {} locals { mcp_b64 = var.mcp != "" ? base64encode(var.mcp) : "" -} +} module "vscode-desktop-core" { - source = "registry.coder.com/coder/vscode-desktop-core/coder" + source = "registry.coder.com/coder/vscode-desktop-core/coder" version = "1.0.0" agent_id = var.agent_id diff --git a/registry/coder/modules/kiro/main.tf b/registry/coder/modules/kiro/main.tf index 4a69afdc4..d6b12235c 100644 --- a/registry/coder/modules/kiro/main.tf +++ b/registry/coder/modules/kiro/main.tf @@ -45,9 +45,9 @@ locals { } module "vscode-desktop-core" { - source = "registry.coder.com/coder/vscode-desktop-core/coder" + source = "registry.coder.com/coder/vscode-desktop-core/coder" version = "1.0.0" - + agent_id = var.agent_id web_app_icon = "/icon/kiro.svg" diff --git a/registry/coder/modules/vscode-desktop-core/README.md b/registry/coder/modules/vscode-desktop-core/README.md index fd847a64f..d95e2da28 100644 --- a/registry/coder/modules/vscode-desktop-core/README.md +++ b/registry/coder/modules/vscode-desktop-core/README.md @@ -15,8 +15,8 @@ The VSCode Desktop Core module is a building block for modules that need to expo ```tf module "vscode-desktop-core" { - source = "registry.coder.com/coder/vscode-desktop-core/coder" - version = "1.0.1" + source = "registry.coder.com/coder/vscode-desktop-core/coder" + version = "1.0.1" agent_id = var.agent_id diff --git a/registry/coder/modules/vscode-desktop-core/main.test.ts b/registry/coder/modules/vscode-desktop-core/main.test.ts index e7b019667..7b0178f65 100644 --- a/registry/coder/modules/vscode-desktop-core/main.test.ts +++ b/registry/coder/modules/vscode-desktop-core/main.test.ts @@ -14,7 +14,7 @@ const defaultVariables = { web_app_slug: "vscode", web_app_display_name: "VS Code Desktop", protocol: "vscode", -} +}; describe("vscode-desktop-core", async () => { await runTerraformInit(import.meta.dir); @@ -40,7 +40,7 @@ describe("vscode-desktop-core", async () => { const state = await runTerraformApply(import.meta.dir, { folder: "/foo/bar", - ...defaultVariables + ...defaultVariables, }); expect(state.outputs.ide_uri.value).toBe( @@ -86,7 +86,7 @@ describe("vscode-desktop-core", async () => { it("expect order to be set", async () => { const state = await runTerraformApply(import.meta.dir, { web_app_order: "22", - ...defaultVariables + ...defaultVariables, }); const coder_app = state.resources.find( diff --git a/registry/coder/modules/vscode-desktop/main.tf b/registry/coder/modules/vscode-desktop/main.tf index 844c4a2e6..6ca2d4595 100644 --- a/registry/coder/modules/vscode-desktop/main.tf +++ b/registry/coder/modules/vscode-desktop/main.tf @@ -32,9 +32,9 @@ variable "group" { } module "vscode-desktop-core" { - source = "registry.coder.com/coder/vscode-desktop-core/coder" + source = "registry.coder.com/coder/vscode-desktop-core/coder" version = "1.0.0" - + agent_id = var.agent_id web_app_icon = "/icon/code.svg" diff --git a/registry/coder/modules/windsurf/main.tf b/registry/coder/modules/windsurf/main.tf index 10db091d1..2e190c1a7 100644 --- a/registry/coder/modules/windsurf/main.tf +++ b/registry/coder/modules/windsurf/main.tf @@ -57,9 +57,9 @@ locals { } module "vscode-desktop-core" { - source = "registry.coder.com/coder/vscode-desktop-core/coder" + source = "registry.coder.com/coder/vscode-desktop-core/coder" version = "1.0.0" - + agent_id = var.agent_id web_app_icon = "/icon/windsurf.svg" From 9c8f4e721c69f67dbf2341f7eb90cc53869d4b0f Mon Sep 17 00:00:00 2001 From: Phorcys Date: Mon, 6 Oct 2025 14:41:49 +0000 Subject: [PATCH 11/18] fix: `web_app_*` -> `coder_app_*` --- registry/coder/modules/cursor/main.tf | 10 +++++----- registry/coder/modules/kiro/main.tf | 10 +++++----- registry/coder/modules/vscode-desktop/main.tf | 10 +++++----- registry/coder/modules/windsurf/main.tf | 10 +++++----- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/registry/coder/modules/cursor/main.tf b/registry/coder/modules/cursor/main.tf index 8e5a17dc2..defc7bc47 100644 --- a/registry/coder/modules/cursor/main.tf +++ b/registry/coder/modules/cursor/main.tf @@ -63,11 +63,11 @@ module "vscode-desktop-core" { agent_id = var.agent_id - web_app_icon = "/icon/cursor.svg" - web_app_slug = var.slug - web_app_display_name = var.display_name - web_app_order = var.order - web_app_group = var.group + 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 diff --git a/registry/coder/modules/kiro/main.tf b/registry/coder/modules/kiro/main.tf index d6b12235c..bf7eaece7 100644 --- a/registry/coder/modules/kiro/main.tf +++ b/registry/coder/modules/kiro/main.tf @@ -50,11 +50,11 @@ module "vscode-desktop-core" { agent_id = var.agent_id - web_app_icon = "/icon/kiro.svg" - web_app_slug = "kiro" - web_app_display_name = "Kiro IDE" - web_app_order = var.order - web_app_group = var.group + 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 diff --git a/registry/coder/modules/vscode-desktop/main.tf b/registry/coder/modules/vscode-desktop/main.tf index 6ca2d4595..033451bc5 100644 --- a/registry/coder/modules/vscode-desktop/main.tf +++ b/registry/coder/modules/vscode-desktop/main.tf @@ -37,11 +37,11 @@ module "vscode-desktop-core" { agent_id = var.agent_id - 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 + 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 folder = var.folder open_recent = var.open_recent diff --git a/registry/coder/modules/windsurf/main.tf b/registry/coder/modules/windsurf/main.tf index 2e190c1a7..fbf65f640 100644 --- a/registry/coder/modules/windsurf/main.tf +++ b/registry/coder/modules/windsurf/main.tf @@ -62,11 +62,11 @@ module "vscode-desktop-core" { agent_id = var.agent_id - web_app_icon = "/icon/windsurf.svg" - web_app_slug = "windsurf" - web_app_display_name = "Windsurf Editor" - web_app_order = var.order - web_app_group = var.group + 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 From 1c9396aefa8341ba08db120cb971cddfaccc0c44 Mon Sep 17 00:00:00 2001 From: Phorcys Date: Wed, 26 Nov 2025 17:20:51 +0000 Subject: [PATCH 12/18] fix: add providers again --- registry/coder/modules/cursor/main.tf | 7 +++++++ registry/coder/modules/kiro/main.tf | 7 +++++++ registry/coder/modules/vscode-desktop/main.tf | 7 +++++++ registry/coder/modules/windsurf/main.tf | 7 +++++++ 4 files changed, 28 insertions(+) diff --git a/registry/coder/modules/cursor/main.tf b/registry/coder/modules/cursor/main.tf index defc7bc47..05030ed2e 100644 --- a/registry/coder/modules/cursor/main.tf +++ b/registry/coder/modules/cursor/main.tf @@ -1,5 +1,12 @@ terraform { required_version = ">= 1.0" + + required_providers { + coder = { + source = "coder/coder" + version = ">= 2.5" + } + } } variable "agent_id" { diff --git a/registry/coder/modules/kiro/main.tf b/registry/coder/modules/kiro/main.tf index bf7eaece7..0b5db7d37 100644 --- a/registry/coder/modules/kiro/main.tf +++ b/registry/coder/modules/kiro/main.tf @@ -1,5 +1,12 @@ terraform { required_version = ">= 1.0" + + required_providers { + coder = { + source = "coder/coder" + version = ">= 2.5" + } + } } variable "agent_id" { diff --git a/registry/coder/modules/vscode-desktop/main.tf b/registry/coder/modules/vscode-desktop/main.tf index 033451bc5..eefc03677 100644 --- a/registry/coder/modules/vscode-desktop/main.tf +++ b/registry/coder/modules/vscode-desktop/main.tf @@ -1,5 +1,12 @@ terraform { required_version = ">= 1.0" + + required_providers { + coder = { + source = "coder/coder" + version = ">= 2.5" + } + } } variable "agent_id" { diff --git a/registry/coder/modules/windsurf/main.tf b/registry/coder/modules/windsurf/main.tf index fbf65f640..ef2adde3a 100644 --- a/registry/coder/modules/windsurf/main.tf +++ b/registry/coder/modules/windsurf/main.tf @@ -1,5 +1,12 @@ terraform { required_version = ">= 1.0" + + required_providers { + coder = { + source = "coder/coder" + version = ">= 2.5" + } + } } variable "agent_id" { From e845c929b9bc21d3522bd710f3c30113aac97c08 Mon Sep 17 00:00:00 2001 From: Phorcys Date: Wed, 26 Nov 2025 17:33:30 +0000 Subject: [PATCH 13/18] chore: fix tests --- registry/coder/modules/cursor/main.test.ts | 4 ++-- registry/coder/modules/cursor/main.tf | 2 +- registry/coder/modules/kiro/main.test.ts | 8 ++++---- registry/coder/modules/kiro/main.tf | 6 +++--- registry/coder/modules/vscode-desktop/main.test.ts | 4 ++-- registry/coder/modules/vscode-desktop/main.tf | 2 +- registry/coder/modules/windsurf/main.test.ts | 4 ++-- registry/coder/modules/windsurf/main.tf | 2 +- test/test.ts | 2 ++ 9 files changed, 18 insertions(+), 16 deletions(-) diff --git a/registry/coder/modules/cursor/main.test.ts b/registry/coder/modules/cursor/main.test.ts index 618f987ee..ad63cd799 100644 --- a/registry/coder/modules/cursor/main.test.ts +++ b/registry/coder/modules/cursor/main.test.ts @@ -26,7 +26,7 @@ describe("cursor", async () => { ); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.name === "cursor", + (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", ); expect(coder_app).not.toBeNull(); @@ -83,7 +83,7 @@ describe("cursor", async () => { }); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.name === "cursor", + (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", ); expect(coder_app).not.toBeNull(); diff --git a/registry/coder/modules/cursor/main.tf b/registry/coder/modules/cursor/main.tf index 05030ed2e..0c0f8aa28 100644 --- a/registry/coder/modules/cursor/main.tf +++ b/registry/coder/modules/cursor/main.tf @@ -98,6 +98,6 @@ resource "coder_script" "cursor_mcp" { } output "cursor_url" { - value = module.cursor.ide_uri + value = module.vscode-desktop-core.ide_uri description = "Cursor IDE Desktop URL." } \ No newline at end of file diff --git a/registry/coder/modules/kiro/main.test.ts b/registry/coder/modules/kiro/main.test.ts index 2d268a844..25f28b6f0 100644 --- a/registry/coder/modules/kiro/main.test.ts +++ b/registry/coder/modules/kiro/main.test.ts @@ -26,7 +26,7 @@ describe("kiro", async () => { ); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.name === "kiro", + (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", ); expect(coder_app).not.toBeNull(); @@ -63,7 +63,7 @@ describe("kiro", async () => { }); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.name === "kiro", + (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", ); expect(coder_app?.instances[0].attributes.slug).toBe("kiro-ai"); @@ -77,7 +77,7 @@ describe("kiro", async () => { }); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.name === "kiro", + (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", ); expect(coder_app?.instances[0].attributes.order).toBe(5); @@ -90,7 +90,7 @@ describe("kiro", async () => { }); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.name === "kiro", + (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", ); expect(coder_app?.instances[0].attributes.group).toBe("AI IDEs"); diff --git a/registry/coder/modules/kiro/main.tf b/registry/coder/modules/kiro/main.tf index 0b5db7d37..c48364bc1 100644 --- a/registry/coder/modules/kiro/main.tf +++ b/registry/coder/modules/kiro/main.tf @@ -58,8 +58,8 @@ module "vscode-desktop-core" { agent_id = var.agent_id coder_app_icon = "/icon/kiro.svg" - coder_app_slug = "kiro" - coder_app_display_name = "Kiro IDE" + coder_app_slug = "kiro-ai" + coder_app_display_name = "Kiro AI IDE" coder_app_order = var.order coder_app_group = var.group @@ -85,6 +85,6 @@ resource "coder_script" "kiro_mcp" { } output "kiro_url" { - value = module.kiro.ide_uri + value = module.vscode-desktop-core.ide_uri description = "Kiro IDE URL." } \ No newline at end of file diff --git a/registry/coder/modules/vscode-desktop/main.test.ts b/registry/coder/modules/vscode-desktop/main.test.ts index b59ef5dc6..dbaaf25b4 100644 --- a/registry/coder/modules/vscode-desktop/main.test.ts +++ b/registry/coder/modules/vscode-desktop/main.test.ts @@ -22,7 +22,7 @@ describe("vscode-desktop", async () => { ); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.name === "vscode", + (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", ); expect(coder_app).not.toBeNull(); @@ -79,7 +79,7 @@ describe("vscode-desktop", async () => { }); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.name === "vscode", + (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", ); expect(coder_app).not.toBeNull(); diff --git a/registry/coder/modules/vscode-desktop/main.tf b/registry/coder/modules/vscode-desktop/main.tf index eefc03677..c9e6dd356 100644 --- a/registry/coder/modules/vscode-desktop/main.tf +++ b/registry/coder/modules/vscode-desktop/main.tf @@ -56,6 +56,6 @@ module "vscode-desktop-core" { } output "vscode_url" { - value = module.vscode.ide_uri + value = module.vscode-desktop-core.ide_uri description = "VS Code Desktop URL." } \ No newline at end of file diff --git a/registry/coder/modules/windsurf/main.test.ts b/registry/coder/modules/windsurf/main.test.ts index f5aa5e1f9..5970c226f 100644 --- a/registry/coder/modules/windsurf/main.test.ts +++ b/registry/coder/modules/windsurf/main.test.ts @@ -26,7 +26,7 @@ describe("windsurf", async () => { ); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.name === "windsurf", + (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", ); expect(coder_app).not.toBeNull(); @@ -83,7 +83,7 @@ describe("windsurf", async () => { }); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.name === "windsurf", + (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", ); expect(coder_app).not.toBeNull(); diff --git a/registry/coder/modules/windsurf/main.tf b/registry/coder/modules/windsurf/main.tf index ef2adde3a..3ec29d5b1 100644 --- a/registry/coder/modules/windsurf/main.tf +++ b/registry/coder/modules/windsurf/main.tf @@ -97,6 +97,6 @@ resource "coder_script" "windsurf_mcp" { } output "windsurf_url" { - value = module.windsurf.ide_uri + value = module.vscode-desktop-core.ide_uri description = "Windsurf Editor URL." } \ No newline at end of file diff --git a/test/test.ts b/test/test.ts index 6851f8de8..7a9562053 100644 --- a/test/test.ts +++ b/test/test.ts @@ -112,6 +112,8 @@ type JsonValue = | { [key: string]: JsonValue }; type TerraformStateResource = { + module: string; + mode: string; type: string; name: string; provider: string; From 418442bcae09e3d7c6c1ae2b495e9f67eb6c4361 Mon Sep 17 00:00:00 2001 From: Phorcys Date: Wed, 26 Nov 2025 17:38:40 +0000 Subject: [PATCH 14/18] chore: fmt --- registry/coder/modules/cursor/main.test.ts | 10 ++++++++-- registry/coder/modules/kiro/main.test.ts | 20 +++++++++++++++---- .../coder/modules/vscode-desktop/main.test.ts | 10 ++++++++-- registry/coder/modules/windsurf/main.test.ts | 10 ++++++++-- 4 files changed, 40 insertions(+), 10 deletions(-) diff --git a/registry/coder/modules/cursor/main.test.ts b/registry/coder/modules/cursor/main.test.ts index ad63cd799..498af29cc 100644 --- a/registry/coder/modules/cursor/main.test.ts +++ b/registry/coder/modules/cursor/main.test.ts @@ -26,7 +26,10 @@ describe("cursor", async () => { ); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", + (res) => + res.type === "coder_app" && + res.module === "module.vscode-desktop-core" && + res.name === "vscode-desktop", ); expect(coder_app).not.toBeNull(); @@ -83,7 +86,10 @@ describe("cursor", async () => { }); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", + (res) => + res.type === "coder_app" && + res.module === "module.vscode-desktop-core" && + res.name === "vscode-desktop", ); expect(coder_app).not.toBeNull(); diff --git a/registry/coder/modules/kiro/main.test.ts b/registry/coder/modules/kiro/main.test.ts index 25f28b6f0..8377224d5 100644 --- a/registry/coder/modules/kiro/main.test.ts +++ b/registry/coder/modules/kiro/main.test.ts @@ -26,7 +26,10 @@ describe("kiro", async () => { ); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", + (res) => + res.type === "coder_app" && + res.module === "module.vscode-desktop-core" && + res.name === "vscode-desktop", ); expect(coder_app).not.toBeNull(); @@ -63,7 +66,10 @@ describe("kiro", async () => { }); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", + (res) => + res.type === "coder_app" && + res.module === "module.vscode-desktop-core" && + res.name === "vscode-desktop", ); expect(coder_app?.instances[0].attributes.slug).toBe("kiro-ai"); @@ -77,7 +83,10 @@ describe("kiro", async () => { }); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", + (res) => + res.type === "coder_app" && + res.module === "module.vscode-desktop-core" && + res.name === "vscode-desktop", ); expect(coder_app?.instances[0].attributes.order).toBe(5); @@ -90,7 +99,10 @@ describe("kiro", async () => { }); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", + (res) => + res.type === "coder_app" && + res.module === "module.vscode-desktop-core" && + res.name === "vscode-desktop", ); expect(coder_app?.instances[0].attributes.group).toBe("AI IDEs"); diff --git a/registry/coder/modules/vscode-desktop/main.test.ts b/registry/coder/modules/vscode-desktop/main.test.ts index dbaaf25b4..67e9d9665 100644 --- a/registry/coder/modules/vscode-desktop/main.test.ts +++ b/registry/coder/modules/vscode-desktop/main.test.ts @@ -22,7 +22,10 @@ describe("vscode-desktop", async () => { ); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", + (res) => + res.type === "coder_app" && + res.module === "module.vscode-desktop-core" && + res.name === "vscode-desktop", ); expect(coder_app).not.toBeNull(); @@ -79,7 +82,10 @@ describe("vscode-desktop", async () => { }); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", + (res) => + res.type === "coder_app" && + res.module === "module.vscode-desktop-core" && + res.name === "vscode-desktop", ); expect(coder_app).not.toBeNull(); diff --git a/registry/coder/modules/windsurf/main.test.ts b/registry/coder/modules/windsurf/main.test.ts index 5970c226f..e2ba58b78 100644 --- a/registry/coder/modules/windsurf/main.test.ts +++ b/registry/coder/modules/windsurf/main.test.ts @@ -26,7 +26,10 @@ describe("windsurf", async () => { ); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", + (res) => + res.type === "coder_app" && + res.module === "module.vscode-desktop-core" && + res.name === "vscode-desktop", ); expect(coder_app).not.toBeNull(); @@ -83,7 +86,10 @@ describe("windsurf", async () => { }); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.module === "module.vscode-desktop-core" && res.name === "vscode-desktop", + (res) => + res.type === "coder_app" && + res.module === "module.vscode-desktop-core" && + res.name === "vscode-desktop", ); expect(coder_app).not.toBeNull(); From f9e1c5640cd5c4d359812d16b2e79fb2eb92d7c7 Mon Sep 17 00:00:00 2001 From: Phorcys Date: Wed, 26 Nov 2025 20:24:44 +0000 Subject: [PATCH 15/18] fix: remove duplicate tests --- registry/coder/modules/cursor/main.test.ts | 18 -- registry/coder/modules/kiro/kiro.tftest.hcl | 53 ------ registry/coder/modules/kiro/main.test.ts | 50 ------ .../modules/vscode-desktop-core/main.test.ts | 170 ++++++++++-------- .../coder/modules/vscode-desktop/main.test.ts | 18 -- registry/coder/modules/windsurf/main.test.ts | 18 -- 6 files changed, 100 insertions(+), 227 deletions(-) diff --git a/registry/coder/modules/cursor/main.test.ts b/registry/coder/modules/cursor/main.test.ts index 498af29cc..fdba8501a 100644 --- a/registry/coder/modules/cursor/main.test.ts +++ b/registry/coder/modules/cursor/main.test.ts @@ -79,24 +79,6 @@ describe("cursor", async () => { ); }); - it("expect order to be set", async () => { - const state = await runTerraformApply(import.meta.dir, { - agent_id: "foo", - order: "22", - }); - - const coder_app = state.resources.find( - (res) => - res.type === "coder_app" && - res.module === "module.vscode-desktop-core" && - res.name === "vscode-desktop", - ); - - expect(coder_app).not.toBeNull(); - expect(coder_app?.instances.length).toBe(1); - expect(coder_app?.instances[0].attributes.order).toBe(22); - }); - it("writes ~/.cursor/mcp.json when mcp provided", async () => { const id = await runContainer("alpine"); try { diff --git a/registry/coder/modules/kiro/kiro.tftest.hcl b/registry/coder/modules/kiro/kiro.tftest.hcl index b132551ae..5fb51311d 100644 --- a/registry/coder/modules/kiro/kiro.tftest.hcl +++ b/registry/coder/modules/kiro/kiro.tftest.hcl @@ -17,11 +17,6 @@ run "default_output" { condition = output.kiro_url == "kiro://coder.coder-remote/open?owner=default&workspace=default&url=https://mydeployment.coder.com&token=$SESSION_TOKEN" error_message = "Default kiro_url must match expected value" } - - assert { - condition = coder_app.kiro.order == null - error_message = "coder_app order must be null by default" - } } run "adds_folder" { @@ -53,54 +48,6 @@ run "folder_and_open_recent" { } } -run "custom_slug_display_name" { - command = plan - - variables { - agent_id = "foo" - slug = "kiro-ai" - display_name = "Kiro AI IDE" - } - - assert { - condition = coder_app.kiro.slug == "kiro-ai" - error_message = "coder_app slug must be set to kiro-ai" - } - - assert { - condition = coder_app.kiro.display_name == "Kiro AI IDE" - error_message = "coder_app display_name must be set to Kiro AI IDE" - } -} - -run "sets_order" { - command = plan - - variables { - agent_id = "foo" - order = 5 - } - - assert { - condition = coder_app.kiro.order == 5 - error_message = "coder_app order must be set to 5" - } -} - -run "sets_group" { - command = plan - - variables { - agent_id = "foo" - group = "AI IDEs" - } - - assert { - condition = coder_app.kiro.group == "AI IDEs" - error_message = "coder_app group must be set to AI IDEs" - } -} - run "writes_mcp_json" { command = plan diff --git a/registry/coder/modules/kiro/main.test.ts b/registry/coder/modules/kiro/main.test.ts index 8377224d5..608abf89c 100644 --- a/registry/coder/modules/kiro/main.test.ts +++ b/registry/coder/modules/kiro/main.test.ts @@ -58,56 +58,6 @@ describe("kiro", async () => { ); }); - it("custom slug and display_name", async () => { - const state = await runTerraformApply(import.meta.dir, { - agent_id: "foo", - slug: "kiro-ai", - display_name: "Kiro AI IDE", - }); - - const coder_app = state.resources.find( - (res) => - res.type === "coder_app" && - res.module === "module.vscode-desktop-core" && - res.name === "vscode-desktop", - ); - - expect(coder_app?.instances[0].attributes.slug).toBe("kiro-ai"); - expect(coder_app?.instances[0].attributes.display_name).toBe("Kiro AI IDE"); - }); - - it("sets order", async () => { - const state = await runTerraformApply(import.meta.dir, { - agent_id: "foo", - order: "5", - }); - - const coder_app = state.resources.find( - (res) => - res.type === "coder_app" && - res.module === "module.vscode-desktop-core" && - res.name === "vscode-desktop", - ); - - expect(coder_app?.instances[0].attributes.order).toBe(5); - }); - - it("sets group", async () => { - const state = await runTerraformApply(import.meta.dir, { - agent_id: "foo", - group: "AI IDEs", - }); - - const coder_app = state.resources.find( - (res) => - res.type === "coder_app" && - res.module === "module.vscode-desktop-core" && - res.name === "vscode-desktop", - ); - - expect(coder_app?.instances[0].attributes.group).toBe("AI IDEs"); - }); - it("writes ~/.kiro/settings/mcp.json when mcp provided", async () => { const id = await runContainer("alpine"); try { diff --git a/registry/coder/modules/vscode-desktop-core/main.test.ts b/registry/coder/modules/vscode-desktop-core/main.test.ts index 7b0178f65..7ae28b664 100644 --- a/registry/coder/modules/vscode-desktop-core/main.test.ts +++ b/registry/coder/modules/vscode-desktop-core/main.test.ts @@ -10,9 +10,11 @@ const appName = "vscode-desktop"; const defaultVariables = { agent_id: "foo", + web_app_icon: "/icon/code.svg", web_app_slug: "vscode", web_app_display_name: "VS Code Desktop", + protocol: "vscode", }; @@ -21,80 +23,108 @@ describe("vscode-desktop-core", async () => { testRequiredVariables(import.meta.dir, defaultVariables); - it("default output", async () => { - const state = await runTerraformApply(import.meta.dir, defaultVariables); - expect(state.outputs.ide_uri.value).toBe( - `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, - ); - - const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.name === appName, - ); - - expect(coder_app).not.toBeNull(); - expect(coder_app?.instances.length).toBe(1); - expect(coder_app?.instances[0].attributes.order).toBeNull(); - }); - - it("adds folder", async () => { - const state = await runTerraformApply(import.meta.dir, { - folder: "/foo/bar", - - ...defaultVariables, + describe("coder_app", () => { + describe("IDE URI attributes", () => { + it("default output", async () => { + const state = await runTerraformApply(import.meta.dir, defaultVariables); + expect(state.outputs.ide_uri.value).toBe( + `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, + ); + + const coder_app = state.resources.find( + (res) => res.type === "coder_app" && res.name === appName, + ); + + expect(coder_app).not.toBeNull(); + expect(coder_app?.instances.length).toBe(1); + expect(coder_app?.instances[0].attributes.order).toBeNull(); + }); + + it("adds folder", async () => { + const state = await runTerraformApply(import.meta.dir, { + folder: "/foo/bar", + + ...defaultVariables, + }); + + expect(state.outputs.ide_uri.value).toBe( + `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, + ); + }); + + it("adds folder and open_recent", async () => { + const state = await runTerraformApply(import.meta.dir, { + folder: "/foo/bar", + open_recent: "true", + + ...defaultVariables, + }); + expect(state.outputs.ide_uri.value).toBe( + `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&openRecent&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, + ); + }); + + it("adds folder but not open_recent", async () => { + const state = await runTerraformApply(import.meta.dir, { + folder: "/foo/bar", + openRecent: "false", + + ...defaultVariables, + }); + expect(state.outputs.ide_uri.value).toBe( + `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, + ); + }); + + it("adds open_recent", async () => { + const state = await runTerraformApply(import.meta.dir, { + open_recent: "true", + + ...defaultVariables, + }); + expect(state.outputs.ide_uri.value).toBe( + `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&openRecent&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, + ); + }); }); - expect(state.outputs.ide_uri.value).toBe( - `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, - ); - }); - - it("adds folder and open_recent", async () => { - const state = await runTerraformApply(import.meta.dir, { - folder: "/foo/bar", - open_recent: "true", - - ...defaultVariables, + it("sets custom slug and display_name", async () => { + const state = await runTerraformApply(import.meta.dir, defaultVariables); + + const coder_app = state.resources.find( + (res) => res.type === "coder_app" && res.name === appName, + ); + + expect(coder_app?.instances[0].attributes.slug).toBe(defaultVariables.web_app_slug); + expect(coder_app?.instances[0].attributes.display_name).toBe(defaultVariables.web_app_display_name); }); - expect(state.outputs.ide_uri.value).toBe( - `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&openRecent&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, - ); - }); - - it("adds folder but not open_recent", async () => { - const state = await runTerraformApply(import.meta.dir, { - folder: "/foo/bar", - openRecent: "false", - - ...defaultVariables, - }); - expect(state.outputs.ide_uri.value).toBe( - `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, - ); - }); - - it("adds open_recent", async () => { - const state = await runTerraformApply(import.meta.dir, { - open_recent: "true", - - ...defaultVariables, + + it("sets order", async () => { + const state = await runTerraformApply(import.meta.dir, { + web_app_order: "5", + + ...defaultVariables + }); + + const coder_app = state.resources.find( + (res) => res.type === "coder_app" && res.name === appName, + ); + + expect(coder_app?.instances[0].attributes.order).toBe(5); }); - expect(state.outputs.ide_uri.value).toBe( - `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&openRecent&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, - ); - }); - - it("expect order to be set", async () => { - const state = await runTerraformApply(import.meta.dir, { - web_app_order: "22", - ...defaultVariables, + + it("sets group", async () => { + const state = await runTerraformApply(import.meta.dir, { + web_app_group: "web-app-group", + + ...defaultVariables + }); + + const coder_app = state.resources.find( + (res) => res.type === "coder_app" && res.name === appName, + ); + + expect(coder_app?.instances[0].attributes.group).toBe("web-app-group"); }); - - const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.name === appName, - ); - - expect(coder_app).not.toBeNull(); - expect(coder_app?.instances.length).toBe(1); - expect(coder_app?.instances[0].attributes.order).toBe(22); }); }); diff --git a/registry/coder/modules/vscode-desktop/main.test.ts b/registry/coder/modules/vscode-desktop/main.test.ts index 67e9d9665..3c1321b99 100644 --- a/registry/coder/modules/vscode-desktop/main.test.ts +++ b/registry/coder/modules/vscode-desktop/main.test.ts @@ -74,22 +74,4 @@ describe("vscode-desktop", async () => { "vscode://coder.coder-remote/open?owner=default&workspace=default&openRecent&url=https://mydeployment.coder.com&token=$SESSION_TOKEN", ); }); - - it("expect order to be set", async () => { - const state = await runTerraformApply(import.meta.dir, { - agent_id: "foo", - order: "22", - }); - - const coder_app = state.resources.find( - (res) => - res.type === "coder_app" && - res.module === "module.vscode-desktop-core" && - res.name === "vscode-desktop", - ); - - expect(coder_app).not.toBeNull(); - expect(coder_app?.instances.length).toBe(1); - expect(coder_app?.instances[0].attributes.order).toBe(22); - }); }); diff --git a/registry/coder/modules/windsurf/main.test.ts b/registry/coder/modules/windsurf/main.test.ts index e2ba58b78..27e610392 100644 --- a/registry/coder/modules/windsurf/main.test.ts +++ b/registry/coder/modules/windsurf/main.test.ts @@ -79,24 +79,6 @@ describe("windsurf", async () => { ); }); - it("expect order to be set", async () => { - const state = await runTerraformApply(import.meta.dir, { - agent_id: "foo", - order: 22, - }); - - const coder_app = state.resources.find( - (res) => - res.type === "coder_app" && - res.module === "module.vscode-desktop-core" && - res.name === "vscode-desktop", - ); - - expect(coder_app).not.toBeNull(); - expect(coder_app?.instances.length).toBe(1); - expect(coder_app?.instances[0].attributes.order).toBe(22); - }); - it("writes ~/.codeium/windsurf/mcp_config.json when mcp provided", async () => { const id = await runContainer("alpine"); try { From 5de184f02f1a4c7bf20684ae8354b43c39e45cc8 Mon Sep 17 00:00:00 2001 From: Phorcys Date: Wed, 26 Nov 2025 20:26:21 +0000 Subject: [PATCH 16/18] chore: format --- .../modules/vscode-desktop-core/main.test.ts | 55 +++++++++++-------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/registry/coder/modules/vscode-desktop-core/main.test.ts b/registry/coder/modules/vscode-desktop-core/main.test.ts index 7ae28b664..46c512272 100644 --- a/registry/coder/modules/vscode-desktop-core/main.test.ts +++ b/registry/coder/modules/vscode-desktop-core/main.test.ts @@ -26,60 +26,63 @@ describe("vscode-desktop-core", async () => { describe("coder_app", () => { describe("IDE URI attributes", () => { it("default output", async () => { - const state = await runTerraformApply(import.meta.dir, defaultVariables); + const state = await runTerraformApply( + import.meta.dir, + defaultVariables, + ); expect(state.outputs.ide_uri.value).toBe( `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, ); - + const coder_app = state.resources.find( (res) => res.type === "coder_app" && res.name === appName, ); - + expect(coder_app).not.toBeNull(); expect(coder_app?.instances.length).toBe(1); expect(coder_app?.instances[0].attributes.order).toBeNull(); }); - + it("adds folder", async () => { const state = await runTerraformApply(import.meta.dir, { folder: "/foo/bar", - + ...defaultVariables, }); - + expect(state.outputs.ide_uri.value).toBe( `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, ); }); - + it("adds folder and open_recent", async () => { const state = await runTerraformApply(import.meta.dir, { folder: "/foo/bar", open_recent: "true", - + ...defaultVariables, }); expect(state.outputs.ide_uri.value).toBe( `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&openRecent&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, ); }); - + it("adds folder but not open_recent", async () => { const state = await runTerraformApply(import.meta.dir, { folder: "/foo/bar", openRecent: "false", - + ...defaultVariables, }); expect(state.outputs.ide_uri.value).toBe( `${defaultVariables.protocol}://coder.coder-remote/open?owner=default&workspace=default&folder=/foo/bar&url=https://mydeployment.coder.com&token=$SESSION_TOKEN`, ); }); - + it("adds open_recent", async () => { const state = await runTerraformApply(import.meta.dir, { open_recent: "true", - + ...defaultVariables, }); expect(state.outputs.ide_uri.value).toBe( @@ -90,40 +93,44 @@ describe("vscode-desktop-core", async () => { it("sets custom slug and display_name", async () => { const state = await runTerraformApply(import.meta.dir, defaultVariables); - + const coder_app = state.resources.find( (res) => res.type === "coder_app" && res.name === appName, ); - - expect(coder_app?.instances[0].attributes.slug).toBe(defaultVariables.web_app_slug); - expect(coder_app?.instances[0].attributes.display_name).toBe(defaultVariables.web_app_display_name); + + expect(coder_app?.instances[0].attributes.slug).toBe( + defaultVariables.web_app_slug, + ); + expect(coder_app?.instances[0].attributes.display_name).toBe( + defaultVariables.web_app_display_name, + ); }); - + it("sets order", async () => { const state = await runTerraformApply(import.meta.dir, { web_app_order: "5", - ...defaultVariables + ...defaultVariables, }); - + const coder_app = state.resources.find( (res) => res.type === "coder_app" && res.name === appName, ); - + expect(coder_app?.instances[0].attributes.order).toBe(5); }); - + it("sets group", async () => { const state = await runTerraformApply(import.meta.dir, { web_app_group: "web-app-group", - ...defaultVariables + ...defaultVariables, }); - + const coder_app = state.resources.find( (res) => res.type === "coder_app" && res.name === appName, ); - + expect(coder_app?.instances[0].attributes.group).toBe("web-app-group"); }); }); From 3b51575227abd6d3dfdd787e8cf6d81b4b174a66 Mon Sep 17 00:00:00 2001 From: Phorcys Date: Wed, 26 Nov 2025 20:29:05 +0000 Subject: [PATCH 17/18] chore: minor version bump --- registry/coder/modules/cursor/README.md | 7 ++++--- registry/coder/modules/kiro/README.md | 7 ++++--- registry/coder/modules/vscode-desktop/README.md | 4 ++-- registry/coder/modules/windsurf/README.md | 7 ++++--- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/registry/coder/modules/cursor/README.md b/registry/coder/modules/cursor/README.md index 4bb2f7190..7a870ac02 100644 --- a/registry/coder/modules/cursor/README.md +++ b/registry/coder/modules/cursor/README.md @@ -16,7 +16,7 @@ Uses the [Coder Remote VS Code Extension](https://github.com/coder/vscode-coder) module "cursor" { count = data.coder_workspace.me.start_count source = "registry.coder.com/coder/cursor/coder" - version = "1.3.3" + version = "1.4.0" agent_id = coder_agent.main.id } ``` @@ -29,7 +29,7 @@ module "cursor" { module "cursor" { count = data.coder_workspace.me.start_count source = "registry.coder.com/coder/cursor/coder" - version = "1.3.3" + version = "1.4.0" agent_id = coder_agent.main.id folder = "/home/coder/project" } @@ -45,7 +45,7 @@ The following example configures Cursor to use the GitHub MCP server with authen module "cursor" { count = data.coder_workspace.me.start_count source = "registry.coder.com/coder/cursor/coder" - version = "1.3.3" + version = "1.4.0" agent_id = coder_agent.main.id folder = "/home/coder/project" mcp = jsonencode({ @@ -58,6 +58,7 @@ module "cursor" { "type" : "http" } + } }) } diff --git a/registry/coder/modules/kiro/README.md b/registry/coder/modules/kiro/README.md index e7ecd1d70..23c17885f 100644 --- a/registry/coder/modules/kiro/README.md +++ b/registry/coder/modules/kiro/README.md @@ -18,7 +18,7 @@ Uses the [Coder Remote VS Code Extension](https://github.com/coder/vscode-coder) module "kiro" { count = data.coder_workspace.me.start_count source = "registry.coder.com/coder/kiro/coder" - version = "1.1.1" + version = "1.2.0" agent_id = coder_agent.main.id } ``` @@ -31,7 +31,7 @@ module "kiro" { module "kiro" { count = data.coder_workspace.me.start_count source = "registry.coder.com/coder/kiro/coder" - version = "1.1.1" + version = "1.2.0" agent_id = coder_agent.main.id folder = "/home/coder/project" } @@ -47,7 +47,7 @@ The following example configures Kiro to use the GitHub MCP server with authenti module "kiro" { count = data.coder_workspace.me.start_count source = "registry.coder.com/coder/kiro/coder" - version = "1.1.1" + version = "1.2.0" agent_id = coder_agent.main.id folder = "/home/coder/project" mcp = jsonencode({ @@ -60,6 +60,7 @@ module "kiro" { "type" : "http" } + } }) } diff --git a/registry/coder/modules/vscode-desktop/README.md b/registry/coder/modules/vscode-desktop/README.md index cb4585be3..56f39bf77 100644 --- a/registry/coder/modules/vscode-desktop/README.md +++ b/registry/coder/modules/vscode-desktop/README.md @@ -16,7 +16,7 @@ Uses the [Coder Remote VS Code Extension](https://github.com/coder/vscode-coder) module "vscode" { count = data.coder_workspace.me.start_count source = "registry.coder.com/coder/vscode-desktop/coder" - version = "1.1.2" + version = "1.2.0" agent_id = coder_agent.main.id } ``` @@ -29,7 +29,7 @@ module "vscode" { module "vscode" { count = data.coder_workspace.me.start_count source = "registry.coder.com/coder/vscode-desktop/coder" - version = "1.1.2" + version = "1.2.0" agent_id = coder_agent.main.id folder = "/home/coder/project" } diff --git a/registry/coder/modules/windsurf/README.md b/registry/coder/modules/windsurf/README.md index 926dae5af..77c57d408 100644 --- a/registry/coder/modules/windsurf/README.md +++ b/registry/coder/modules/windsurf/README.md @@ -16,7 +16,7 @@ Uses the [Coder Remote VS Code Extension](https://github.com/coder/vscode-coder) module "windsurf" { count = data.coder_workspace.me.start_count source = "registry.coder.com/coder/windsurf/coder" - version = "1.2.1" + version = "1.3.0" agent_id = coder_agent.main.id } ``` @@ -29,7 +29,7 @@ module "windsurf" { module "windsurf" { count = data.coder_workspace.me.start_count source = "registry.coder.com/coder/windsurf/coder" - version = "1.2.1" + version = "1.3.0" agent_id = coder_agent.main.id folder = "/home/coder/project" } @@ -45,7 +45,7 @@ The following example configures Windsurf to use the GitHub MCP server with auth module "windsurf" { count = data.coder_workspace.me.start_count source = "registry.coder.com/coder/windsurf/coder" - version = "1.2.1" + version = "1.3.0" agent_id = coder_agent.main.id folder = "/home/coder/project" mcp = jsonencode({ @@ -58,6 +58,7 @@ module "windsurf" { "type" : "http" } + } }) } From c53f4b6d1003a915c933a309db349663df45aa78 Mon Sep 17 00:00:00 2001 From: Phorcys Date: Thu, 27 Nov 2025 08:28:19 +0000 Subject: [PATCH 18/18] chore: update positron module and bring feature parity --- .../cytoshahar/modules/positron/main.test.ts | 20 ++----- registry/cytoshahar/modules/positron/main.tf | 52 ++++++++++--------- 2 files changed, 31 insertions(+), 41 deletions(-) diff --git a/registry/cytoshahar/modules/positron/main.test.ts b/registry/cytoshahar/modules/positron/main.test.ts index 8017b5951..fd1c58153 100644 --- a/registry/cytoshahar/modules/positron/main.test.ts +++ b/registry/cytoshahar/modules/positron/main.test.ts @@ -21,7 +21,10 @@ describe("positron-desktop", async () => { ); const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.name === "positron", + (res) => + res.type === "coder_app" && + res.module === "module.vscode-desktop-core" && + res.name === "vscode-desktop", ); expect(coder_app).not.toBeNull(); @@ -70,19 +73,4 @@ describe("positron-desktop", async () => { "positron://coder.coder-remote/open?owner=default&workspace=default&openRecent&url=https://mydeployment.coder.com&token=$SESSION_TOKEN", ); }); - - it("expect order to be set", async () => { - const state = await runTerraformApply(import.meta.dir, { - agent_id: "foo", - order: "22", - }); - - const coder_app = state.resources.find( - (res) => res.type === "coder_app" && res.name === "positron", - ); - - expect(coder_app).not.toBeNull(); - expect(coder_app?.instances.length).toBe(1); - expect(coder_app?.instances[0].attributes.order).toBe(22); - }); }); diff --git a/registry/cytoshahar/modules/positron/main.tf b/registry/cytoshahar/modules/positron/main.tf index c78265500..9365b4445 100644 --- a/registry/cytoshahar/modules/positron/main.tf +++ b/registry/cytoshahar/modules/positron/main.tf @@ -9,10 +9,6 @@ terraform { } } -locals { - icon_url = "/icon/positron.svg" -} - variable "agent_id" { type = string description = "The ID of a Coder agent." @@ -42,33 +38,39 @@ variable "group" { default = null } +variable "slug" { + type = string + description = "The slug of the app." + default = "cursor" +} + +variable "display_name" { + type = string + description = "The display name of the app." + default = "Cursor Desktop" +} + data "coder_workspace" "me" {} data "coder_workspace_owner" "me" {} -resource "coder_app" "positron" { - agent_id = var.agent_id - external = true - icon = local.icon_url - slug = "positron" - display_name = "Positron Desktop" - order = var.order - group = var.group +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/positron.svg" + coder_app_slug = var.slug + coder_app_display_name = var.display_name + coder_app_order = var.order + coder_app_group = var.group - url = join("", [ - "positron://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 = "positron" } output "positron_url" { - value = coder_app.positron.url + value = module.vscode-desktop-core.ide_uri description = "Positron Desktop URL." }