Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
176 commits
Select commit Hold shift + click to select a range
a2cac9c
feat(core): add system dependency install contracts
pallyoung May 23, 2026
69bb957
feat(server): add system dependency runtime diagnostics
pallyoung May 23, 2026
6ce4913
feat(server): add interactive system dependency installer
pallyoung May 23, 2026
f7a4688
feat(server): wire system dependency install commands
pallyoung May 23, 2026
6f0598a
feat(web): add diagnostics system dependency installer
pallyoung May 23, 2026
ee26303
fix(diagnostics): harden system dependency installs
pallyoung May 23, 2026
fdf37d7
fix(server): preserve install ownership across reconnects
pallyoung May 23, 2026
37e63fb
chore(web): clean installer hook state
pallyoung May 23, 2026
c9f88be
fix(diagnostics): harden dependency installer flows
pallyoung May 24, 2026
925e260
fix(web): avoid installer poll retry loops
pallyoung May 24, 2026
bf19059
test(web): cover non-retryable installer poll errors
pallyoung May 24, 2026
5b087ad
feat: add performance monitoring
pallyoung May 24, 2026
ecab325
docs: add vue editor and lsp support design
pallyoung May 25, 2026
50018ab
Add Vue LSP shared routing surface
pallyoung May 25, 2026
3b7c211
fix: prefer vue file routing in web lsp map
pallyoung May 25, 2026
ff25e88
feat: register vue monaco language
pallyoung May 25, 2026
fa96a6f
docs: add vue editor and lsp support design
pallyoung May 25, 2026
c1fd291
docs: add draft pane editor integration design
pallyoung May 25, 2026
b9ca967
fix: harden vue monaco registration guard
pallyoung May 25, 2026
c13fa03
feat: add managed vue lsp support
pallyoung May 25, 2026
5044a41
fix: harden managed vue lsp runtime
pallyoung May 25, 2026
45fa89c
feat: integrate editor panes into agent layout
pallyoung May 25, 2026
9b9d832
fix: enforce single editor pane routing
pallyoung May 25, 2026
2deac4c
fix: preserve active editor pane targeting
pallyoung May 25, 2026
aeb6e3e
fix: persist normalized pane layouts
pallyoung May 25, 2026
2763f2e
docs: add VS Code ecosystem evaluation
pallyoung May 26, 2026
f96fd8c
docs: add workspace panel editor unification plan
pallyoung May 26, 2026
b11de1f
Merge branch 'feat/system-dependency-installer' into merge/system-dep…
pallyoung May 26, 2026
af6272e
docs(plan): fix workspace panel unification execution flow
pallyoung May 26, 2026
3be2293
fix(web): align diagnostics install panel with semantic surfaces
pallyoung May 26, 2026
edeac5f
docs: add git history commit file diff design
pallyoung May 26, 2026
0f57d61
docs(plan): fix workspace panel unification execution flow
pallyoung May 26, 2026
7c27219
Merge branch 'feat/performance-monitoring' into merge/performance-mon…
pallyoung May 26, 2026
83ca748
Merge branch 'develop' into merge/performance-monitoring-into-develop
pallyoung May 26, 2026
0ba865f
refactor(web): add shared workspace panel primitives
pallyoung May 26, 2026
1ed0647
test: add history diff server contracts
pallyoung May 26, 2026
410b66d
test(web): restore deferred mobile selected-row assertion
pallyoung May 26, 2026
36bd023
fix(web): preserve mobile file-tree selection chrome
pallyoung May 26, 2026
a11e0cb
fix(web): stabilize workspace panel selection states
pallyoung May 26, 2026
ba568d9
test: assert git revision source contract
pallyoung May 26, 2026
86f8c14
docs: add settings monitoring subpage redesign spec
pallyoung May 26, 2026
143ab82
docs: add monitoring settings subpage implementation plan
pallyoung May 26, 2026
186a339
fix(web): finalize workspace panel row states
pallyoung May 26, 2026
7e1a02e
feat: move monitoring entrypoints into settings
pallyoung May 26, 2026
bd90c05
fix(web): reset desktop file-tree selected padding
pallyoung May 26, 2026
40edf44
feat: add structured git history diff commands
pallyoung May 26, 2026
d84b760
feat: allow commit sha image revisions
pallyoung May 26, 2026
4147f35
Fix settings monitoring review findings
pallyoung May 26, 2026
944a816
Fix structured history diff guards
pallyoung May 26, 2026
19e169a
fix(web): scope desktop file-tree row chrome
pallyoung May 26, 2026
789368b
feat: open commit history as file lists
pallyoung May 26, 2026
3d82fc4
test: make merge fixture branch-portable
pallyoung May 26, 2026
207bc0c
web: finish commit diff preview migration
pallyoung May 26, 2026
231b73e
refactor monitoring page into reusable primitives
pallyoung May 26, 2026
35f06a0
fix(web): restore shared file-tree selection contract
pallyoung May 26, 2026
29b4b35
feat: add settings monitoring subpage
pallyoung May 26, 2026
b85febe
fix: restore monitoring settings CTA state
pallyoung May 26, 2026
63077c2
feat(web): unify explorer panel chrome
pallyoung May 26, 2026
edc3590
fix: deep link monitoring settings from wrapper
pallyoung May 26, 2026
c130f66
fix(web): restore file tree shared search chrome
pallyoung May 26, 2026
e55478e
fix(web): preserve explorer selected hover states
pallyoung May 26, 2026
98308c6
Fix settings monitoring history and sync
pallyoung May 26, 2026
2a1936a
feat(web): unify workspace search panel selection
pallyoung May 26, 2026
f0801ae
fix(web): restore search group header chrome
pallyoung May 26, 2026
84eb7c4
fix(web): handle rapid search query reverts
pallyoung May 26, 2026
03397a0
fix: harden monitoring settings sync
pallyoung May 26, 2026
ae49b22
feat(web): unify git panel workbench chrome
pallyoung May 26, 2026
e313218
refactor: lift monitoring state into settings
pallyoung May 26, 2026
773040b
feat(web): map workspace panel system to mobile files
pallyoung May 26, 2026
7352ca9
test(web): remove stale mobile theme variable
pallyoung May 26, 2026
7aca1f1
fix(web): align mobile files shell surfaces
pallyoung May 26, 2026
72c7260
fix: guard monitoring refresh side effects
pallyoung May 26, 2026
0faec15
test(web): cover mobile search shell contract
pallyoung May 26, 2026
132f59e
Fix monitoring settings hydration gating
pallyoung May 26, 2026
1aa912b
fix settings monitoring reload hydration regression
pallyoung May 26, 2026
d009552
Redesign settings monitoring subpage
pallyoung May 26, 2026
81614fc
Fix monitoring settings mobile entry and remove standalone page wrapper
pallyoung May 26, 2026
7c9cf83
Fix monitoring settings stage parity
pallyoung May 26, 2026
e52e0df
feat: add commit history file diff previews
pallyoung May 27, 2026
d0bb30c
Fix monitoring mobile dock continuity
pallyoung May 27, 2026
8605610
docs: add skill library management design
pallyoung May 27, 2026
67b6623
docs: add diagnostics monitoring layout refinement spec
pallyoung May 27, 2026
c31ffaa
feat: add seasonal theme registry definitions
pallyoung May 24, 2026
ceeccdb
fix: preserve semantic state icons in seasonal themes
pallyoung May 24, 2026
74ded4e
refactor: normalize seasonal theme registry definitions
pallyoung May 24, 2026
1e6130a
Add seasonal web theme tokens
pallyoung May 24, 2026
032ad50
test: cover seasonal theme spec gaps
pallyoung May 24, 2026
1334a19
test: tighten seasonal theme coverage
pallyoung May 24, 2026
bf0f252
test: tighten seasonal theme quality checks
pallyoung May 24, 2026
1d4199d
test: anchor seasonal icon baseline to base theme
pallyoung May 24, 2026
17ef467
test: lock base seasonal status icon contract
pallyoung May 24, 2026
c9b9e95
feat: add seasonal themes to settings picker
pallyoung May 24, 2026
fcc74cc
test: harden seasonal theme picker ordering
pallyoung May 24, 2026
87a4a25
test: align preview coverage with seasonal themes
pallyoung May 24, 2026
cb4f6e5
test: restore seasonal semantic token coverage
pallyoung May 27, 2026
889f33e
fix(web): defer terminal recovery on activation_required instead of f…
pallyoung May 27, 2026
e1dcca9
refactor: unify monitoring control bar
pallyoung May 27, 2026
0be8949
style: refine monitoring layout and typography
pallyoung May 27, 2026
9aab854
docs: add diagnostics monitoring refinement plan
pallyoung May 27, 2026
d1e2427
Merge branch 'feat/diagnostics-monitoring-layout-refinement' into dev…
pallyoung May 27, 2026
9935a7e
fix: polish monitoring settings layout
pallyoung May 27, 2026
c2be6cb
Merge branch 'feat/diagnostics-monitoring-layout-polish' into develop
pallyoung May 27, 2026
d7ba0ff
style: soften monitoring settings chrome
pallyoung May 27, 2026
90d3a07
Merge branch 'feat/monitoring-settings-soften' into develop
pallyoung May 27, 2026
e9dcd5e
style: align monitoring settings desktop layout
pallyoung May 27, 2026
e15fb9a
Merge branch 'feat/workspace-panel-editor-unification' into develop
pallyoung May 27, 2026
d3358e8
fix(web): align mobile files surfaces with semantic tokens
pallyoung May 27, 2026
d5c28ec
docs: add workspace panel balanced workbench spec
pallyoung May 27, 2026
89cc138
refactor(web): remove duplicate workspace panel titles
pallyoung May 27, 2026
db1d2b2
refactor(web): flatten workspace panel section chrome
pallyoung May 27, 2026
a8865a5
refactor(web): align search panel with balanced workbench
pallyoung May 27, 2026
79f5bf5
refactor(web): tighten git panel into shared workbench grammar
pallyoung May 27, 2026
921832a
refactor(web): apply balanced workbench grammar to mobile files
pallyoung May 27, 2026
5b9b5ab
Refine workspace panel surfaces and audit captures
pallyoung May 28, 2026
b5286b5
Merge branch 'feat/draft-pane-editor-integration' into develop
pallyoung May 28, 2026
b3a53a4
fix editor pane toolbar regression
pallyoung May 28, 2026
317b255
Merge branch 'feat/vue-editor-lsp-support' into develop
pallyoung May 28, 2026
8bfc9a0
Merge branch 'feat/git-history-commit-file-diff' into develop
pallyoung May 28, 2026
276324a
docs: add file tree refresh stability design
pallyoung May 28, 2026
efff023
Fix mobile files sheet title regression
pallyoung May 28, 2026
be9d9a0
docs: add workspace launch new folder design
pallyoung May 28, 2026
1236424
Refine welcome page layout
pallyoung May 28, 2026
0b7897f
feat: stabilize file tree refresh and style gitignored entries
pallyoung May 28, 2026
2bd1915
feat: add workspace mkdir command
pallyoung May 28, 2026
2bdbb2b
fix(web): restore workspace explorer toggles
pallyoung May 28, 2026
d340ee5
fix workspace mkdir invalid path handling
pallyoung May 28, 2026
51311f0
feat(web): use IDE-style workspace activity icons
pallyoung May 28, 2026
84e2817
fix workspace mkdir trailing segment validation
pallyoung May 28, 2026
9c55602
fix(web): restore git commit section collapse toggle
pallyoung May 28, 2026
f3ec536
fix(web): left-align commit file preview rows
pallyoung May 28, 2026
b21bcf9
docs: add workspace search replace VS Code alignment design
pallyoung May 28, 2026
6aebe24
add workspace launch folder creation actions
pallyoung May 28, 2026
f6909df
fix workspace launch folder path normalization
pallyoung May 28, 2026
14cc9de
guard stale workspace folder create requests
pallyoung May 28, 2026
ebe7ffd
fix: restore draft pane file drops
pallyoung May 28, 2026
844f1f6
fix(web): make git changes section collapsible
pallyoung May 28, 2026
6cc95ea
cover workspace launch folder validation branches
pallyoung May 28, 2026
c5009c2
docs: specify monitoring visual hierarchy redesign
pallyoung May 28, 2026
dec96ae
fix workspace launch folder cancel invalidation
pallyoung May 28, 2026
0776f46
style: align editor pane with session layout
pallyoung May 28, 2026
35191bb
fix(web): restore staged and changes git sections
pallyoung May 28, 2026
ee1868b
feat: add inline folder creation to workspace launch modal
pallyoung May 28, 2026
c8e6ab3
chore: silence workspace launch action lint warning
pallyoung May 28, 2026
024acfe
Merge branch 'feat/workspace-launch-new-folder' into develop
pallyoung May 28, 2026
d10f7d7
fix(web): align source control nav icon semantics
pallyoung May 28, 2026
6465583
Redesign monitoring settings hierarchy
pallyoung May 28, 2026
96c856e
Merge branch 'feat/settings-monitoring-visual-hierarchy-redesign' int…
pallyoung May 28, 2026
8ed15c7
feat: align workspace search and replace with VS Code
pallyoung May 28, 2026
af81c33
Merge branch 'feat/workspace-search-replace-vscode-alignment' into de…
pallyoung May 28, 2026
216af46
test(web): align monitoring theme assertions
pallyoung May 28, 2026
a311b62
Merge branch 'fix/monitoring-theme-test-develop' into develop
pallyoung May 28, 2026
060186f
fix(utils): fall back to PATH-resolved node when shim node.exe is mis…
pallyoung May 29, 2026
74ae30e
refactor(web): align workspace search controls
pallyoung May 29, 2026
c6053ed
fix: align monitoring settings visuals
pallyoung May 29, 2026
02e16a6
chore: remove unused monitoring variables
pallyoung May 29, 2026
34c9289
feat(server): bring Vue 3 LSP online with a tsserver bridge
pallyoung May 30, 2026
55a3463
test(server): cover managed LSP verify across platforms and Vue compa…
pallyoung May 30, 2026
bac970c
fix(server): harden managed LSP probing and timeouts on Windows
pallyoung May 30, 2026
24024c9
refactor(web): redesign draft pane with agent and file editor split l…
pallyoung May 30, 2026
fe2ecd1
fix(web): align draft pane styles with design mockup
pallyoung May 30, 2026
0733f35
chore(web): prefix unused getProviderCta with underscore
pallyoung May 30, 2026
a388c2e
fix draft launcher narrow carousel
pallyoung May 30, 2026
d308cf9
feat: persist open editor state on server
pallyoung May 30, 2026
4e07374
fix monitoring settings layout spacing
pallyoung May 29, 2026
bb7e589
Polish editor dirty state and monitoring UI
pallyoung May 29, 2026
b5b3e13
Tighten terminal empty-state copy
pallyoung May 30, 2026
b784c91
fix(web): auto-rotate draft launcher on narrow panes
pallyoung May 30, 2026
4118ba2
fix(server): rewrite local preview resources
pallyoung May 30, 2026
5cd816b
fix(web): refine open files sidebar controls
pallyoung May 30, 2026
58cd376
Unify agent pane drag behavior
pallyoung May 30, 2026
a94842d
fix: restore semantic syntax highlighting
pallyoung May 30, 2026
a236997
chore: format semantic highlighting tests
pallyoung May 30, 2026
d1ef7aa
style: normalize workspace panel typography
pallyoung May 31, 2026
0c77f77
feat(web): translate remaining ui copy
pallyoung May 31, 2026
e245c93
fix: stabilize ci verification
pallyoung May 31, 2026
a4df948
chore(release): add patch changeset for develop
pallyoung May 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 7 additions & 0 deletions .changeset/bright-owls-merge.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@spencer-kit/coder-studio": patch
---

Improve workspace, diagnostics, monitoring, and editor workflows with system
dependency installs, managed Vue LSP support, file history previews, and
refined settings and workspace surfaces.
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -68,3 +68,8 @@ tsconfig.tsbuildinfo

# Stitch design files
.stitch/

# Rust build artefacts (from lsp-test/ fixture or any ad-hoc cargo)
target/
Cargo.lock

66 changes: 66 additions & 0 deletions docs/issue/rust-analyzer-indexing-no-progress-feedback.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# rust-analyzer 启动期间 hover/definition 静默无响应,UI 无进度反馈

## 标题

`feat(web): surface rust-analyzer indexing progress in the LSP status notice`

## 问题描述

打开第一个 `.rs` 文件时,rust-analyzer 会进入 `PrimeCaches` 阶段对工作区做初始化索引。这个阶段在 coder-studio 仓库根(中等仓库 + 大量 `node_modules`)下实测**会持续 ~25 秒**。

期间:

- `initialize` LSP 请求几十毫秒就返回(rust-analyzer 设计上立刻确认 capabilities,workspace 加载是异步的)
- 我们的 `LspManager.ensureSession` 拿到 `summary.status === "ready"`,前端把 hover/definition provider 都注册好
- 但用户**任何** hover/definition 请求都会被 rust-analyzer **立刻返回 `null`**——不是 hang、不是 timeout,而是它故意在 indexing 期间不给语义答案
- Monaco 拿到 null 就什么都不显示
- 用户感受:开了 `.rs` 文件之后随便点点都"完全没反应",像 LSP 没起来

25 秒后 rust-analyzer 发 `$/progress { kind: "end" }` 通知,从此 hover 正常工作。但**这中间的等待期对用户完全不可见**。

## 复现步骤

1. 干净环境,无 rust-analyzer 缓存。
2. 在 coder-studio 仓库根新建 `Cargo.toml` + `probe.rs`(最小 bin 项目即可)。
3. 重启 dev server,让 LSP 会话从干净状态启动。
4. 浏览器中打开 `probe.rs`,立刻 hover 任一标识符。
5. 观察前 ~25 秒所有 hover/definition/references 都没反应。

可以用 `scripts/probe-rust.mjs probe.rs` 直接复现 ——
它会同时记录 initialize 用时、首次 hover 响应、`$/progress end` 用时。

## 实际行为

- 前 25 秒:hover 返回 null,UI 安静
- 之后:hover 工作,但用户多半已经放弃尝试了

## 桌面终端对比

VS Code 的官方 rust-analyzer 扩展会在 status bar 上显示
`rust-analyzer: indexing X/Y` 进度条;Helix 会在底部状态栏显示同样信息。两者都监听 rust-analyzer
的 `$/progress` LSP 通知。

我们目前没监听任何 LSP 进度通知。

## 已确认事实

- `initialize` 响应快(~70ms 量级,与 indexing 解耦)
- rust-analyzer 通过标准 LSP `$/progress`
notification 通报进度,token 是 `"rustAnalyzer/Indexing"` 或类似
- `LspSession`(`packages/server/src/lsp/session.ts`)目前没有 `connection.onNotification("$/progress", ...)`
处理器
- 前端 `LspStatusNotice` 目前只有 ready / installing / failed / disabled 四种状态显示

## 后续排查方向

- **server**:`LspSession` 监听 `$/progress` 通知,把 `WorkDoneProgressBegin` /
`WorkDoneProgressReport` / `WorkDoneProgressEnd` 转成 `lsp.progress.updated` 事件
via `eventBus`
- **core / shared**:在 `LspEnsureSessionResult` 或独立 `LspProgress` 类型里加一个 "indexing" 状态
- **web**:`LspStatusNotice` 渲染 "Indexing 12 / 47 …" 或简单的 spinner + percentage
- 范围只对 rust-analyzer + 任何主动发 `$/progress` 的 server(pylsp、gopls 通常不发)

## 临时缓解

- 文档里告诉用户:"首次打开 `.rs` 文件需要等 ~30s 完成索引"
- 或检测 rust-analyzer 没回有效 hover 时,在编辑器里给一个 transient toast 提示
248 changes: 248 additions & 0 deletions docs/research/2026-05-26-vscode-ecosystem-evaluation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,248 @@
# VS Code Plugin Ecosystem Evaluation

> Status: Research
> Date: 2026-05-26
> Scope: VS Code plugin ecosystem adoption, UI freedom trade-offs, and Theia fit for Coder Studio

## Goal

Record the current product and architecture conclusions for a future decision on whether Coder Studio should move toward the VS Code plugin ecosystem.

This document is a research memo, not an implementation spec.

## Current Product Baseline

Coder Studio currently behaves as a custom browser workspace rather than a VS Code-derived workbench.

Relevant local references:

- Browser workspace positioning: [README.zh-CN.md](../../../README.zh-CN.md)
- Product shell and route model: [docs/PRD.zh-CN.md](../PRD.zh-CN.md)
- Desktop shell: [packages/web/src/shells/desktop-shell.tsx](../../../packages/web/src/shells/desktop-shell.tsx)
- Mobile shell: [packages/web/src/shells/mobile-shell/index.tsx](../../../packages/web/src/shells/mobile-shell/index.tsx)
- Desktop workspace composition: [packages/web/src/features/workspace/views/desktop/workspace-desktop-view.tsx](../../../packages/web/src/features/workspace/views/desktop/workspace-desktop-view.tsx)
- Mobile workspace composition: [packages/web/src/features/workspace/views/mobile/workspace-mobile-view.tsx](../../../packages/web/src/features/workspace/views/mobile/workspace-mobile-view.tsx)

Current product traits that matter for this evaluation:

- custom desktop shell
- custom mobile shell
- route-driven pages such as welcome, login, workspace, settings, diagnostics
- mobile-first `Dock + Sheet` workspace flow
- agent/session/supervisor/review workflow integrated into a custom app shell

## Core Conclusion

Two goals conflict with each other:

1. maximize VS Code plugin compatibility
2. preserve the current Coder Studio UI freedom

They cannot both be optimized at the same time.

The practical decision boundary is:

- If plugin compatibility is the highest priority, the workbench shell must move closer to VS Code or a VS Code-compatible platform.
- If current UI freedom is the highest priority, Coder Studio can only reuse VS Code-adjacent protocol and editor capabilities, not the full plugin ecosystem.

## What "Highest Plugin Compatibility" Implies

If Coder Studio wants the strongest possible compatibility with the VS Code extension ecosystem, the product shell must largely yield to a VS Code-style workbench model.

Implications:

- main shell follows workbench conventions instead of a custom page shell
- extension lifecycle and contribution points become host-driven
- files/search/scm/terminal/commands/preferences should use workbench-native surfaces
- custom product features should live inside views, widgets, panels, commands, and webviews instead of owning the whole page layout

This direction improves extension compatibility, but reduces control over:

- overall shell layout
- global DOM and CSS ownership
- fully custom page routing as the main experience
- the current independent mobile `Dock + Sheet` interaction model

## What "Keep Current UI Freedom" Implies

If Coder Studio keeps its current UI freedom, it can still adopt selected VS Code-adjacent capabilities:

- Monaco editor services
- LSP-backed language intelligence
- DAP-backed debugger plumbing
- syntax themes, snippets, and editor-level enhancements
- selected VS Code-like services via `monaco-vscode-api`

But it cannot honestly promise:

- broad compatibility with existing VS Code extensions
- full workbench contribution support
- strong compatibility for extensions that need a full extension host, Node runtime, terminal integration, SCM integration, or workbench UI contracts

In short:

- preserve UI freedom -> reuse protocols and editor services
- maximize extension compatibility -> adopt a workbench platform

## Option Comparison

### Option A: OpenVSCode Server / code-server style foundation

Strengths:

- highest extension compatibility
- closest to real VS Code workbench behavior
- least ambiguity about extension host expectations

Costs:

- current Coder Studio shell must largely give way to the workbench shell
- mobile-first interaction model is heavily reduced
- custom product UI becomes embedded features inside the workbench, not the main shell

Best fit when:

- extension compatibility is more important than product shell freedom

### Option B: Theia

Strengths:

- meaningful VS Code extension compatibility
- more shell and layout customization than a strict VS Code workbench route
- supports custom frontend/backend extensions in addition to VS Code-style plugins
- better fit for a hybrid product that still wants a distinct identity

Costs:

- current route-driven shell still needs major refactoring
- desktop can be adapted, but mobile-specific shell patterns should not be assumed to map cleanly
- compatibility is good but not equal to official VS Code

Best fit when:

- the product wants a serious extension ecosystem story without fully surrendering product-level customization

### Option C: Keep current architecture + `monaco-vscode-api`

Strengths:

- highest UI freedom
- lowest shell disruption
- best preservation of the current mobile and cross-device product language

Costs:

- extension compatibility remains limited
- many workbench responsibilities become self-owned platform work
- long-term maintenance cost is high because Coder Studio would be building a partial compatibility layer itself

Best fit when:

- product UI freedom is more important than extension ecosystem breadth

## Recommended Position

Based on the current discussion:

- OpenVSCode-style foundation is the right answer only if extension compatibility clearly outweighs UI freedom.
- Theia is the best compromise if the product wants both some VS Code extension compatibility and some product-level UI control.
- Staying self-built is only the right answer if the team explicitly chooses product shell freedom over extension compatibility.

For the current priority ordering discussed in research:

- `plugin compatibility first`
- `do not fully lose all product customization`

The best-fit direction is **Theia**, with the explicit understanding that this is still a compromise and not full VS Code equivalence.

## Theia-Specific UI Impact

If Coder Studio moves to Theia, the product should not plan on lifting the current UI into Theia unchanged.

### UI areas that must be restructured

- The current page shell model should be replaced by a Theia `ApplicationShell + widgets` model.
- `DesktopShell` and `MobileShell` should no longer be treated as peer top-level app shells.
- `/workspace` should stop being the dominant page abstraction.
- `/settings` should split into standard preferences plus one or more custom product widgets.
- `QuickOpen` and `CommandPalette` should stop competing with workbench-native command surfaces.

### Desktop changes likely required

- `TopBar` should shrink dramatically or disappear as a product-owned global shell.
- custom workspace tabs should likely move to commands, switchers, or a dedicated widget
- files/search/source control should prefer workbench-native views where possible
- status strip should be decomposed into status bar items
- custom panels should be repackaged as Theia widgets, not page regions

### Mobile changes likely required

This is the largest UI loss area.

Current mobile behavior is a dedicated product model:

- top bar
- single active session surface
- bottom dock
- fullscreen sheets for files, terminal, supervisor, and agent session selection

This model should not be assumed to transfer cleanly to Theia.

Research conclusion:

- desktop workbench migration and mobile-shell preservation should be treated as separate concerns
- if mobile is strategically important, keep a separate mobile-optimized frontend rather than forcing Theia to become the mobile shell

This mobile conclusion is an engineering judgment based on Theia's documented workbench and layout model, not a direct vendor promise.

## Practical Mapping of Current UI to Theia

Likely mapping:

- welcome/start flow -> startup widget or launch dialog
- diagnostics -> dedicated widget or command-driven surface
- settings page -> preferences plus custom settings widget
- left activity/sidebar -> Theia view container(s)
- agent/session/supervisor/review -> custom Theia widgets
- bottom terminal panel -> Theia terminal integration or a wrapped custom terminal widget
- footer status strip -> status bar items

Should not be treated as first-class Theia shell concepts:

- current route-driven workspace page
- custom top-level desktop/mobile shell split
- mobile `Dock + Sheet` shell as the primary workbench model

## Decision Triggers For Later

Use this memo to revisit the decision when the team can answer these questions:

1. Is extension compatibility more important than keeping the current mobile-first product shell?
2. Is partial extension compatibility sufficient, or does the team need as much real-world VS Code extension coverage as possible?
3. Is the product willing to split desktop and mobile into different frontend strategies?
4. Does the team want to own a partial compatibility platform over time?

## Research Sources

Official and primary references used in this evaluation:

- VS Code Extension Host: https://code.visualstudio.com/api/advanced-topics/extension-host
- VS Code Extension Capabilities: https://code.visualstudio.com/api/extension-capabilities/overview
- VS Code Web Extensions: https://code.visualstudio.com/api/extension-guides/web-extensions
- VS Code Language Server Extension Guide: https://code.visualstudio.com/api/language-extensions/language-server-extension-guide
- VS Code Debugger Extension Guide: https://code.visualstudio.com/api/extension-guides/debugger-extension
- Theia Extensions: https://theia-ide.org/docs/extensions/
- Theia Frontend Application Contributions: https://theia-ide.org/docs/frontend_application_contribution/
- Theia Architecture: https://theia-ide.org/docs/architecture/
- `monaco-vscode-api`: https://github.com/CodinGame/monaco-vscode-api

## Final Summary

The current research position is:

- full UI freedom and highest extension compatibility are mutually competing goals
- VS Code-compatible workbench routes favor compatibility over shell freedom
- self-built routes favor shell freedom over compatibility
- Theia is the strongest compromise for Coder Studio if the team wants a serious plugin story without fully collapsing into a pure VS Code shell
- a future Theia path should treat desktop and mobile as different product surfaces rather than assuming one shell serves both equally well
Loading
Loading