From d2a07127bfd4933d67b5a822d3d1e99ccd2df0d5 Mon Sep 17 00:00:00 2001 From: "Anthony Fu (via agent)" Date: Fri, 19 Jun 2026 03:30:37 +0000 Subject: [PATCH 1/5] feat(plugins): add @devframes/plugin-code-server Embed code-server (VS Code in the browser) as a devframe panel: detect a local install (with install guidance when missing), launch it on demand, and render the editor in an auto-authenticated iframe. code-server runs with password auth; the plugin hands the matching session cookie to the already-authorized devframe client so the editor loads signed in. Ships standalone (CLI), Vite, and embedded host integrations. --- alias.ts | 9 + plugins/code-server/.gitignore | 3 + plugins/code-server/README.md | 66 +++ plugins/code-server/bin.mjs | 13 + plugins/code-server/package.json | 71 +++ plugins/code-server/src/cli.ts | 16 + plugins/code-server/src/client/index.ts | 419 ++++++++++++++++++ plugins/code-server/src/constants.ts | 33 ++ plugins/code-server/src/index.ts | 63 +++ plugins/code-server/src/node/context.ts | 16 + plugins/code-server/src/node/detect.ts | 64 +++ plugins/code-server/src/node/diagnostics.ts | 48 ++ plugins/code-server/src/node/index.ts | 33 ++ plugins/code-server/src/node/supervisor.ts | 321 ++++++++++++++ .../code-server/src/rpc/functions/detect.ts | 16 + .../code-server/src/rpc/functions/start.ts | 17 + .../code-server/src/rpc/functions/status.ts | 12 + plugins/code-server/src/rpc/functions/stop.ts | 16 + plugins/code-server/src/rpc/index.ts | 21 + plugins/code-server/src/spa/index.html | 19 + plugins/code-server/src/spa/main.ts | 9 + plugins/code-server/src/spa/vite.config.ts | 26 ++ plugins/code-server/src/types.ts | 100 +++++ plugins/code-server/src/vite.ts | 25 ++ plugins/code-server/test/_utils.ts | 63 +++ plugins/code-server/test/code-server.test.ts | 91 ++++ plugins/code-server/tsconfig.json | 7 + plugins/code-server/tsdown.config.ts | 65 +++ pnpm-lock.yaml | 47 +- .../plugin-code-server/cli.snapshot.d.ts | 6 + .../plugin-code-server/cli.snapshot.js | 6 + .../plugin-code-server/client.snapshot.d.ts | 23 + .../plugin-code-server/client.snapshot.js | 10 + .../constants.snapshot.d.ts | 12 + .../plugin-code-server/constants.snapshot.js | 15 + .../plugin-code-server/index.snapshot.d.ts | 28 ++ .../plugin-code-server/index.snapshot.js | 19 + .../plugin-code-server/node.snapshot.d.ts | 75 ++++ .../plugin-code-server/node.snapshot.js | 49 ++ .../plugin-code-server/rpc.snapshot.d.ts | 62 +++ .../plugin-code-server/rpc.snapshot.js | 6 + .../plugin-code-server/types.snapshot.d.ts | 51 +++ .../plugin-code-server/types.snapshot.js | 4 + .../plugin-code-server/vite.snapshot.d.ts | 12 + .../plugin-code-server/vite.snapshot.js | 6 + tsconfig.base.json | 24 + turbo.json | 5 + vitest.config.ts | 1 + 48 files changed, 2108 insertions(+), 15 deletions(-) create mode 100644 plugins/code-server/.gitignore create mode 100644 plugins/code-server/README.md create mode 100755 plugins/code-server/bin.mjs create mode 100644 plugins/code-server/package.json create mode 100644 plugins/code-server/src/cli.ts create mode 100644 plugins/code-server/src/client/index.ts create mode 100644 plugins/code-server/src/constants.ts create mode 100644 plugins/code-server/src/index.ts create mode 100644 plugins/code-server/src/node/context.ts create mode 100644 plugins/code-server/src/node/detect.ts create mode 100644 plugins/code-server/src/node/diagnostics.ts create mode 100644 plugins/code-server/src/node/index.ts create mode 100644 plugins/code-server/src/node/supervisor.ts create mode 100644 plugins/code-server/src/rpc/functions/detect.ts create mode 100644 plugins/code-server/src/rpc/functions/start.ts create mode 100644 plugins/code-server/src/rpc/functions/status.ts create mode 100644 plugins/code-server/src/rpc/functions/stop.ts create mode 100644 plugins/code-server/src/rpc/index.ts create mode 100644 plugins/code-server/src/spa/index.html create mode 100644 plugins/code-server/src/spa/main.ts create mode 100644 plugins/code-server/src/spa/vite.config.ts create mode 100644 plugins/code-server/src/types.ts create mode 100644 plugins/code-server/src/vite.ts create mode 100644 plugins/code-server/test/_utils.ts create mode 100644 plugins/code-server/test/code-server.test.ts create mode 100644 plugins/code-server/tsconfig.json create mode 100644 plugins/code-server/tsdown.config.ts create mode 100644 tests/__snapshots__/tsnapi/@devframes/plugin-code-server/cli.snapshot.d.ts create mode 100644 tests/__snapshots__/tsnapi/@devframes/plugin-code-server/cli.snapshot.js create mode 100644 tests/__snapshots__/tsnapi/@devframes/plugin-code-server/client.snapshot.d.ts create mode 100644 tests/__snapshots__/tsnapi/@devframes/plugin-code-server/client.snapshot.js create mode 100644 tests/__snapshots__/tsnapi/@devframes/plugin-code-server/constants.snapshot.d.ts create mode 100644 tests/__snapshots__/tsnapi/@devframes/plugin-code-server/constants.snapshot.js create mode 100644 tests/__snapshots__/tsnapi/@devframes/plugin-code-server/index.snapshot.d.ts create mode 100644 tests/__snapshots__/tsnapi/@devframes/plugin-code-server/index.snapshot.js create mode 100644 tests/__snapshots__/tsnapi/@devframes/plugin-code-server/node.snapshot.d.ts create mode 100644 tests/__snapshots__/tsnapi/@devframes/plugin-code-server/node.snapshot.js create mode 100644 tests/__snapshots__/tsnapi/@devframes/plugin-code-server/rpc.snapshot.d.ts create mode 100644 tests/__snapshots__/tsnapi/@devframes/plugin-code-server/rpc.snapshot.js create mode 100644 tests/__snapshots__/tsnapi/@devframes/plugin-code-server/types.snapshot.d.ts create mode 100644 tests/__snapshots__/tsnapi/@devframes/plugin-code-server/types.snapshot.js create mode 100644 tests/__snapshots__/tsnapi/@devframes/plugin-code-server/vite.snapshot.d.ts create mode 100644 tests/__snapshots__/tsnapi/@devframes/plugin-code-server/vite.snapshot.js diff --git a/alias.ts b/alias.ts index a47ae93..a0e951a 100644 --- a/alias.ts +++ b/alias.ts @@ -4,6 +4,7 @@ import { join, relative } from 'pathe' const root = fileURLToPath(new URL('.', import.meta.url)) const r = (path: string) => fileURLToPath(new URL(`./packages/${path}`, import.meta.url)) +const p = (path: string) => fileURLToPath(new URL(`./plugins/${path}`, import.meta.url)) export const alias = { 'devframe/rpc/transports/ws-server': r('devframe/src/rpc/transports/ws-server.ts'), @@ -44,6 +45,14 @@ export const alias = { '@devframes/hub': r('hub/src/index.ts'), '@devframes/nuxt/runtime/plugin.client': r('nuxt/src/runtime/plugin.client.ts'), '@devframes/nuxt': r('nuxt/src/index.ts'), + '@devframes/plugin-code-server/client': p('code-server/src/client/index.ts'), + '@devframes/plugin-code-server/node': p('code-server/src/node/index.ts'), + '@devframes/plugin-code-server/constants': p('code-server/src/constants.ts'), + '@devframes/plugin-code-server/types': p('code-server/src/types.ts'), + '@devframes/plugin-code-server/rpc': p('code-server/src/rpc/index.ts'), + '@devframes/plugin-code-server/cli': p('code-server/src/cli.ts'), + '@devframes/plugin-code-server/vite': p('code-server/src/vite.ts'), + '@devframes/plugin-code-server': p('code-server/src/index.ts'), 'devframe/recipes/open-helpers': r('devframe/src/recipes/open-helpers.ts'), 'devframe/client': r('devframe/src/client/index.ts'), 'devframe': r('devframe/src'), diff --git a/plugins/code-server/.gitignore b/plugins/code-server/.gitignore new file mode 100644 index 0000000..415e0c0 --- /dev/null +++ b/plugins/code-server/.gitignore @@ -0,0 +1,3 @@ +dist +.turbo +*.tsbuildinfo diff --git a/plugins/code-server/README.md b/plugins/code-server/README.md new file mode 100644 index 0000000..76904d8 --- /dev/null +++ b/plugins/code-server/README.md @@ -0,0 +1,66 @@ +# @devframes/plugin-code-server + +Run [code-server](https://github.com/coder/code-server) (VS Code in the +browser) as a devframe panel. The plugin detects a local `code-server` +install, launches it on demand, and embeds the editor in an +auto-authenticated `