Studio developer intelligence
Review workspace search, developer tooling and AI controls.
The starting branch was studio/workspace-terminal at 256b2cf8119436af2dd8e48a1e056ab8690f9973. Development is isolated on studio/developer-intelligence. The QA installer has a separate app ID and per-user registration. Stable-preview distribution is a separate release decision.
Architecture
zbl-language-server speaks JSON-RPC over LSP stdio with Content-Length framing. The server negotiates UTF-16 source positions and accepts incremental document changes. Compiler analysis uses the same lexer, parser, project module linker, generic specialization and type checker as ZBLC. Unsaved text is an overlay. Project analysis reads the entry's reachable import graph, skips lockfile creation, and records source locations before lowering or mangling. A workspace symbol query searches graphs associated with open source documents. Studio and the standalone server opt into the compiler crate's ide feature. The default SDK binary stays within its existing 32 MiB debug bootstrap ceiling.
Studio invokes the shared compiler query engine through an allowlisted Tauri IPC command. Monaco supplies a scoped model identity, a snapshot of open source text in the same root, and an LSP-shaped request. The bridge canonicalizes paths, checks scope and maps returned locations to openable Studio paths. A serialized request queue drops cancelled or superseded Monaco results. Diagnostics are debounced. The CLI remains the execution path for Build, Run and Test.
The interpreter debugger uses a Tauri channel for stop, resume and state events. Its observer runs inside the real interpreter at source statement boundaries. Frames carry the current source token and current-frame locals come from the interpreter's environment. The adapter uses cooperative interruption and one active debug session. Runtime filesystem grants remain disabled for debug launches. The interpreter's limits still apply.
Capability matrix
| Area | Status | Behavior |
|---|---|---|
| LSP initialize, shutdown, exit and incremental open/change/save/close | IMPLEMENTED | Stdio framing, UTF-16 positions, version checks and compiler publishDiagnostics. |
| Diagnostics and Monaco navigation | IMPLEMENTED | Compiler squiggles, source/line/column, Problems navigation, definition, references, hover and signature help for resolved tasks. |
| Completion | PARTIAL | Local and visible imported tasks, declared parameters and explicitly typed outer bindings. Deeper lexical binding completion, general import path discovery, built-ins and context-aware snippets remain open. |
| Project graphs and multi-root | PARTIAL | Entry-linked modules and authorized local dependencies. Symbols from unopened, unreachable files require opening those files. Analysis reruns on requests. A persistent index, cross-request cache and filesystem watch service remain open. |
| Cancellation | PARTIAL | The Studio client drops obsolete work and results. The bounded synchronous stdio worker does not interrupt an active compiler call on $/cancelRequest. |
| Rename, format and refactoring | PARTIAL | Same-document private-task rename with a reviewable, undoable Monaco edit. Compiler-validated whitespace formatting. Exported symbols, dynamic task references, organize imports, extract function and range format remain open. |
| Semantic tokens, verified quick fixes and compiler warning pipeline | NOT IMPLEMENTED | Existing Monarch highlighting and editor bracket handling remain available. |
| Problems Panel | PARTIAL | Search, current-file filter and clickable compiler diagnostics. SDK failures have a separate text entry. Related locations and workspace-specific filter controls remain open. |
| Interpreter debug launch, stop, breakpoints, continue and stepping | IMPLEMENTED | Debug current entry or standalone source, or launch the project entry. Breakpoints are line-based and become active on the next launch. |
| Interpreter pause, inspection and console | PARTIAL | Cooperative pause at statement boundaries, call stack, top-frame local summaries and final output. Exception breakpoints, expression evaluation, parallel workers and caller-local inspection remain open. |
| Standard DAP, native and ZBVM debugging | NOT IMPLEMENTED | Studio uses its documented interpreter channel adapter. |
| Run, Build and Test configuration | PARTIAL | Manifest-derived working directory, restart with saved launch options, bounded argument array and per-root ZBL_RUN_ environment overrides. Zebvix accepts --no-opt; JS and Python run-file accept positional arguments. Overrides are in memory. |
| External language servers and future AI agent tooling APIs | NOT IMPLEMENTED | Existing Monaco language support, free manual mode, OS key vault and BYOK review remain available. |
| Linux acceptance | BLOCKED | No verified Linux build or runtime acceptance in this Windows session. |
Security and operations
- Editor analysis is read-only. Canonical paths are restricted to the selected root. External dependencies require an enclosing authorized workspace. The compiler and bridge enforce bounded source, overlay and module counts. Shells keep their existing OS-level permissions after trust approval.
- Analysis uses an isolated worker thread and a bounded request payload. A malformed framed message gets a protocol error. An invalid or oversized framing length ends the stdio process. A new process starts with fresh roots and overlays. Studio's in-process bridge shares compiler logic with the executable and has no stdio child to restart.
- The debug adapter redacts local names that look like credentials and summarizes containers. It exposes normal program output and does not guarantee redaction of arbitrary application data. It does not access the BYOK credential store.
- The verified installer is an unsigned internal candidate. GO for local Windows QA. NO-GO for public distribution and unsupported debugger targets.
Reproduce QA
Follow the Studio Windows build instructions. With Node 24, run node studio/scripts/verify-language-server.mjs <zbl-language-server.exe> <evidence.json> for the standalone protocol suite. Run the installed Windows harness against the separate Developer QA package to test the same executable after installation, along with real WebView and interpreter workflows.
The protocol definition is available from the Language Server Protocol 3.17 specification.
Windows regression and performance evidence
On Windows 11 25H2 x64, the baseline installed v0.1 suite passed all 24 checks. The v0.2 SDK regression suite passed 177 tests, including the bootstrap install, update and uninstall lifecycle and the interpreter observer test. The IDE-feature library suite passed 3 tests. The Studio Rust suite passed 3 tests. TypeScript checking and the Vite production build passed. The Windows GNU linker emitted its duplicate resource manifest warning, and Vite reported the existing large Monaco bundle.
The optimized standalone executable was measured for 25 sequential stdio hover requests per fixture. The two-file project measured 15.95 ms median and 16.13 ms p95. A generated project with 17 files and 192 exported tasks measured 27.52 ms median and 74.13 ms p95. These are end-to-end timings from the Node harness including transport and polling. They are specific to the Windows QA machine and fixtures.
The Windows QA setup SHA-256 is f6f1658ac513a73b542b05604f1756534021ab07ae5be5330b5d71bd4e3e4ce7. The existing Studio v0.1 executable still matched 305962d4d7fcf32caf71278736659365e26f484fb2ec23ffb5706086889f0ed1. The first final-artifact installation passed 33 checks and the reinstall passed 34, including six installed stdio protocol checks reported separately by the language-server harness. The desktop tests exercised real Monaco completion, hover and rename undo, plus breakpoint, call stack, locals, Step Into, Step Over, Step Out, Continue and Stop. A JavaScript program received its literal command argument and environment override. QA uninstall removed the registration and preserved the test projects.
Code map
crates/zbl/src/ide.rs,lsp.rsandlanguage_server.rsimplement compiler-backed analysis and stdio.project.rsshares the real linker,runtime.rsexposes interpreter hooks, andtests/ide.rsverifies runtime frames and bindings.studio/src-tauri/src/intelligence.rs,debugger.rs,launch.rsandterminal.rsconnect language, debug and run workflows to authorized workspaces. Windows staging adds the sidecar to the isolated installer.studio/src/intelligence.ts,App.tsx,EditorPane.tsx,editor.ts,TerminalPane.tsxandstyle.cssintegrate Monaco, the Problems and Debug panels, and run options. The Windows and stdio verification scripts exercise the installed desktop and standalone process.