Open
Conversation
…lint layering) This commit begins a large refactor and platform migration of Void chat/LLM infrastructure. Key changes: - Integrated Agent Control Protocol (ACP) in electron-main: builtin agent, main service, IPC wiring, log sanitization, loop guard, and supporting utilities. - Relocated shared Void code from workbench-contrib into src/vs/platform/void to satisfy eslint module-boundary rules and eliminate layering violations. - Extracted common and electron-main components (types, helpers, services) so they can be safely reused across workbench and main-process code. - Removed the static modelCapabilities layer; model configuration is now request-driven and propagated through the LLM pipeline (provider, model, parameters, limits). - Rewrote sendLLMMessage.impl: unified streaming send/receive pipeline, robust handling of text and tool calls (including correction of invalid XML tool-call output), tool schema conversion (OpenAI / Anthropic / Gemini), output budgeting, and token usage collection. - Completely reworked the system prompt for the existing execution model; added a separate prompt for the internal ACP agent responsible for generating an execution plan. - Improved edit_file workflow: unified-diff previews for the UI and removal of brittle exact-match behavior. - Added support for disabling/skipping tools (static Void tools and dynamic/MCP tools) via UI settings and JSON configuration. - Expanded Settings UI (void-settings-tsx/Settings.tsx): tool approval controls, unified Tools section, per-tool enable/disable toggles with source attribution. - File reading and terminal tools now return chunked output and surface results in the UI. Notes: - WIP: first part of a larger change-set.
Add ACP workbench/browser services for host callbacks (fs/terminal/permission) used by ACP sessions Wire callback routing through the ACP workbench service, including thread/window guards Keep builtin-only extMethod handling separate from common host callbacks Update related Void workbench integration so the build compiles
…tion Why: - Resolve eslint module-boundary violations by separating editor language APIs under `src/vs/editor/common/language/*`. - Eliminate manual steps around ACP vendor artifacts by wiring their generation into the regular build lifecycle. - Remove lifecycle-related disposable leak risks in extension-host restart/status paths. What changed: - Added `editor/common/language/*` modules and switched runtime/build/workbench/api imports + worker entrypoints to this namespace. - This directly addresses `local/code-import-patterns` and `local/code-layering` constraints. - Added `scripts/build-acp-vendor.mjs` and integrated ACP vendor generation into `postinstall`, `compile`, and `watch`. - Updated build/package resource flow for Void assets (JetBrains Mono fonts, `woff/woff2` loaders, resource copy steps). - Added targeted robustness fixes: URI-safe `deepClone`, and proper disposable tracking/guards in extension-host output+status paths. - Expanded ACP/Void regression coverage (ACP args, `read_file` normalization/pagination, model-config switching, tool safety/search behavior, LLM grammar/reasoning propagation). - Tightened validation flow: precommit now runs hygiene + node tests + quick Void/ACP browser suite. MSG
Delete obsolete src/vs/editor/common/model and src/vs/editor/common/services after migrating imports to src/vs/editor/common/language/*.
Add build/npm/run-gulp.js and route the root gulp script through it to apply configurable Node heap limits from CLI/env with a safe default. Update mangler worker handling: support VSCODE_MANGLE_MAX_WORKERS and VSCODE_MANGLE_WORKER_MAX_OLD_SPACE_SIZE, run workers as processes, and skip rename edits for .d.ts and out-of-project files. Remove hardcoded VSCODE_TSC_IGNORE_UNUSED toggling from build/gulpfile.vscode.js so unused-check behavior is controlled explicitly by environment config. Document local build tuning (VSCODE_MANGLE_MAX_WORKERS, VSCODE_TSC_IGNORE_UNUSED) and add notes for building the vscode-reh-linux-x64 component in HOW_TO_CONTRIBUTE.md. Fix promptSyntax declaration typings by replacing removed ResolveError imports with a structural IPromptResolveError interface and by switching to IRange/IModelDecorationOptions. Update extensions to reduce Buffer() deprecation sources: replace tunnel with https-proxy-agent in configuration-editing/github, remove byline in git in favor of readline, and sync related lockfiles. Add tslib to remote production dependencies and lockfile to satisfy dependency resolution.
- Preserve vscode-remote URIs during ACP/tool path normalization and checkpoint restore. - Fix read_file path click behavior and unify URI resolution in sidebar tool previews. - Align read/edit preview path display for relative paths. - Allow command bar and selection helper on vscode-remote files. - Add regression tests for remote workspace path handling.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Hi.
In this commit, I tried to address:
An architectural issue — the ESLint rules in the project were configured in a way that prevented importing module A from module B. This is now fixed.
Switch to dynamic configuration. Now you don’t need to manually update the codebase every time a new LLM is released. Configuration retrieval is tied to OpenRouter endpoints. If their endpoint goes down, we’ll have to save their JSON and host our own.
Various options like
max_tokens,top_p, etc. are now passed to the UI from the configuration and can be changed if desired.Prompts have been completely rewritten.
Integrated the ACP protocol — in Void this can work as:
vibe-acpfrom Mistral. So there’s a 99% chance that if you connect something else, it will break. There’s no real universality yet; I haven’t figured out whether it can be made fully universal — most likely not. So we’ll need to refactor the codebase and movevibe-acpinto a separate layer.In ACP mode, the agent sends a plan when executing a task.
Tools like
edit_file/read_file(and some others — I don’t remember which ones) were updated.Running Apply (from chat) now works differently — it doesn’t send the model’s code anymore. It simply applies the changes (if it works, then OK). If not, it sends a notification.
Non-native tools are also parsed from the reasoning stream (in case the model sends nonsense). In that case, it gets a short message explaining how it should do it.
You can now disable static and dynamic tools individually (one by one).
Support for sending images from chat (if the model supports it).
Tested on Linux with an OpenAI-compatible endpoint.