Selected changesmerged Aug 28, 2026 – Sep 3, 2026
fix(ext/node): allow repeated child process signalsTypeScript · 68 + / 27 −
Introduces 3 new declarations in ext/node/polyfills/internal/child_process.ts.
Adds new language design rather than adjusting what was there. Tests changed with it, with code of their own.
ext/node/polyfills/internal/child_process.ts ↗ · 2 files
@@ -873,20 +890,19 @@ class ChildProcess extends EventEmitter { } } - /* Cancel any pending IPC I/O */- if (this[kCanDisconnect]) {- this.disconnect?.();+ if (isWindows) {+ // See the `#windowsSignalFallback` use in the status handler above.+ this.#windowsSignalFallback = signalName;+ }+ if (signalName === "SIGKILL") {+ this[kSigkillIssued] = true; }- this.killed = true;- this.signalCode = signalName; return true; } [SymbolDispose]() {- if (!this.killed) {- this.kill();- }+ this.kill(); } ref() {
[Fix] Sparse TikToken tokenizers silently failPython · 113 + / 70 −
Introduces 4 new declarations in src/transformers/tokenization_utils_tokenizers.py.
Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.
src/transformers/tokenization_utils_tokenizers.py ↗ · 3 files
@@ -325,6 +269,102 @@ def _iter_special_tokens(values: Iterable[Any]) -> list[str]: local_kwargs["merges"] = merges return local_kwargs + @classmethod+ def _convert_from_tiktoken(cls, vocab_file: str, local_kwargs: dict[str, Any]) -> dict[str, Any]:+ """Path to a vocab file and a list of extra special tokens."""+ from .convert_slow_tokenizer import TikTokenConverter++ # `added_tokens_decoder` is a (token_id -> token) dict of tokens that may not be contiguous+ added_tokens_decoder: dict[int, str] = {+ int(token_id): token["content"] if isinstance(token, dict) else str(token)+ for token_id, token in (local_kwargs.get("added_tokens_decoder") or {}).items()+ }+ # `extra_special_tokens` is a list of tokens to append to the base vocabulary+ extra_special_tokens: list[str] = local_kwargs.get("extra_special_tokens") or []+ if isinstance(extra_special_tokens, dict):+ extra_special_tokens = list(extra_special_tokens.keys())++ # Retrieve the vocab size from the vocab file+ base_vocab_size = len(TikTokenConverter.load_tiktoken_bpe(vocab_file))++ # If any of the tokens in `added_tokens_decoder` are not in the base vocabulary, they need to be added. To do so+ # we bake them in the `extra_special_tokens` list, with placeholder if `added_tokens_decoder` is not contiguous+ max_added_token_id = max(added_tokens_decoder.keys()) if added_tokens_decoder else 0+ if max_added_token_id >= base_vocab_size:+ new_extras = [+ added_tokens_decoder.get(index, f"<|reserved_token_{index}|>")+ for index in range(base_vocab_size, max_added_token_id + 1)+ ]+ set_new_extras = set(new_extras)+ for special_token in extra_special_tokens:+ if special_token not in set_new_extras:+ new_extras.append(special_token)
Activate Python environments in Agent Host shell commands with shell init scriptsTypeScript · 618 + / 16 −
Introduces 21 new declarations in src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostShellInitSynchronizer.ts.
Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.
src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostShellInitSynchronizer.ts ↗ · 28 files
@@ -0,0 +1,183 @@+/*---------------------------------------------------------------------------------------------+ * Copyright (c) Microsoft Corporation. All rights reserved.+ * Licensed under the MIT License. See License.txt in the project root for license information.+ *--------------------------------------------------------------------------------------------*/++import { RunOnceScheduler } from '../../../../../../base/common/async.js';+import { structuralEquals } from '../../../../../../base/common/equals.js';+import { Disposable, DisposableStore, IDisposable, toDisposable } from '../../../../../../base/common/lifecycle.js';+import { isWindows } from '../../../../../../base/common/platform.js';+import { URI } from '../../../../../../base/common/uri.js';+import { IAgentHostService } from '../../../../../../platform/agentHost/common/agentService.js';+import { AgentHostShellToolInitScriptEnabledSettingId } from '../../../../../../platform/agentHost/common/copilotCliConfig.js';+import { SessionConfigKey } from '../../../../../../platform/agentHost/common/sessionConfigKeys.js';+import { createShellInitScript, type IShellInitScript, type ShellInitScriptShell } from '../../../../../../platform/agentHost/common/shellInitScript.js';+import { IAgentSubscription } from '../../../../../../platform/agentHost/common/state/agentSubscription.js';+import { ActionType } from '../../../../../../platform/agentHost/common/state/protocol/actions.js';+import { SessionState } from '../../../../../../platform/agentHost/common/state/sessionState.js';+import { IConfigurationService } from '../../../../../../platform/configuration/common/configuration.js';+import { InstantiationType, registerSingleton } from '../../../../../../platform/instantiation/common/extensions.js';+import { createDecorator } from '../../../../../../platform/instantiation/common/instantiation.js';+import { IWorkspaceContextService, IWorkspaceFolder } from '../../../../../../platform/workspace/common/workspace.js';+import { IEnvironmentVariableService } from '../../../../terminal/common/environmentVariable.js';+import { IWorkbenchEnvironmentService } from '../../../../../services/environment/common/environmentService.js';++const PYTHON_ENV_EXTENSION_ID = 'ms-python.vscode-python-envs';+// Only the variable matching the tool shell: the extension publishes+// shell-specific activation, so no cross-shell fallback is read.+const PYTHON_ACTIVATION_VARIABLES: readonly string[] = isWindows+ ? ['VSCODE_PYTHON_PWSH_ACTIVATE']+ : ['VSCODE_PYTHON_BASH_ACTIVATE'];+const TOOL_SHELL: ShellInitScriptShell = isWindows ? 'powershell' : 'bash';++export const IAgentHostShellInitSynchronizer = createDecorator<IAgentHostShellInitSynchronizer>('agentHostShellInitSynchronizer');
mtmd: support DeepSeek-V4-Flash-Vision-ExpC++ · 396 + / 5 −
Introduces 4 new declarations in tools/mtmd/clip.cpp.
Adds new runtime rather than adjusting what was there. Read the linked PR for the surrounding test context.
tools/mtmd/clip.cpp ↗ · 13 files
@@ -5021,6 +5069,58 @@ bool clip_encode(struct clip_ctx * ctx, struct clip_encode_params * params) { } set_input_i32("pos_w", pos_data); } break;+ case PROJECTOR_TYPE_DEEPSEEK4V:+ {+ // set the 2D positions (mrope layout, only the first 2 channels are used)+ int n_patches_per_row = image_size_width / patch_size;+ std::vector<int32_t> positions(n_pos * 4, 0);+ for (int i = 0; i < n_pos; i++) {+ positions[i] = i / n_patches_per_row; // row+ positions[n_pos + i] = i % n_patches_per_row; // col+ }+ set_input_i32("positions", positions);++ // token block layout index (see clip_graph_deepseek4v::build)+ // rows [0, n_grid) are the aligner output, the sentinels follow+ const int n_merge = hparams.n_merge;+ const int n_llm_w = CLIP_ALIGN(pos_w, n_merge) / n_merge;+ const int n_llm_h = CLIP_ALIGN(pos_h, n_merge) / n_merge;+ const int n_grid = n_llm_w * n_llm_h;+ const int idx_start = n_grid;+ const int idx_end = n_grid + 1;+ const int idx_newline = n_grid + 2;+ const int idx_pad = n_grid + 3;++ const int lead_pad = imgs.entries[0].lead_pad;+ const auto bl = dsv4_get_block_layout(n_llm_w, n_llm_h, lead_pad);++ std::vector<int32_t> idx;+ idx.reserve(bl.n_out);+ for (int i = 0; i < lead_pad; i++) {+ idx.push_back(idx_pad);+ }
agentHost: classify inline chat telemetryTypeScript · 48 + / 21 −
Introduces 2 new declarations in src/vs/platform/agentHost/node/agentHostTelemetryReporter.ts.
Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.
src/vs/platform/agentHost/node/agentHostTelemetryReporter.ts ↗ · 7 files
@@ -24,16 +24,18 @@ import { AgentHostClientConnectionKind, AgentHostLaunchKind, AgentHostTransportK export type AgentHostUserMessageSentSource = 'direct' | 'queued'; /**- * Who produced the message that started a turn. Extends the protocol's- * {@link MessageKind} with `agentMerge`: Agent Merge drives its repair turns- * with a host-generated message that carries the `systemNotification` origin,- * and reporting those under their own value keeps automated merge work- * separable from turns a person or an agent asked for.+ * The message origin used for telemetry. Extends the protocol's+ * {@link MessageKind} with host-owned classifications for Agent Merge repair+ * turns and VS Code sessions marked ephemeral, which telemetry reports as+ * `inline`. */-export type AgentHostMessageOriginTelemetryKind = MessageKind | 'agentMerge';+export type AgentHostMessageOriginTelemetryKind = MessageKind | 'agentMerge' | 'inline'; -/** Classifies the actor that produced a turn's message for telemetry. */-export function getMessageOriginTelemetryKind(message: Message): AgentHostMessageOriginTelemetryKind {+/** Classifies a turn's message origin, including host-owned session classifications. */+export function getMessageOriginTelemetryKind(message: Message, isEphemeralSession: boolean): AgentHostMessageOriginTelemetryKind {+ if (isEphemeralSession) {+ return 'inline';+ } // The marker only counts on the origin the host stamps it with, so a client // cannot dress a user message up as automated merge work. if (message.origin.kind === MessageKind.SystemNotification && isAgentMergeMessage(message)) {
discovery: graduate declarative validation to stableGo · 25 + / 52 −
Reworks 25 lines of existing logic in pkg/apis/discovery/validation/validation.go.
Changes how existing systems design behaves. Tests changed with it, with code of their own.
pkg/apis/discovery/validation/validation.go ↗ · 9 files
@@ -202,18 +187,6 @@ func validatePorts(endpointPorts []discovery.EndpointPort, fldPath *field.Path) return allErrs } -func validateAddressType(addressType discovery.AddressType) field.ErrorList {- allErrs := field.ErrorList{}-- if addressType == "" {- allErrs = append(allErrs, field.Required(field.NewPath("addressType"), "").MarkCoveredByDeclarative())- } else if !supportedAddressTypes.Has(addressType) {- allErrs = append(allErrs, field.NotSupported(field.NewPath("addressType"), addressType, sets.List(supportedAddressTypes)).MarkCoveredByDeclarative())- }-- return allErrs-}- func validateHints(endpointHints *discovery.EndpointHints, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{}
[rust-compiler] Propagate block lowering errorsRust · 38 + / 27 −
Introduces 1 new declaration in compiler/crates/react_compiler_lowering/src/build_hir.rs.
Adds new language design rather than adjusting what was there. Read the linked PR for the surrounding test context.
compiler/crates/react_compiler_lowering/src/build_hir.rs ↗ · 2 files
@@ -2589,17 +2588,25 @@ fn lower_block_statement( block: &react_compiler_ast::statements::BlockStatement, parent_scope: Option<react_compiler_ast::scope::ScopeId>, ) -> Result<(), CompilerError> {- let _ = lower_block_statement_inner(builder, block, None, parent_scope);- Ok(())+ Ok(lower_block_statement_inner(+ builder,+ block,+ None,+ parent_scope,+ )?) } fn lower_block_statement_with_scope( builder: &mut HirBuilder, block: &react_compiler_ast::statements::BlockStatement, scope_override: react_compiler_ast::scope::ScopeId, ) -> Result<(), CompilerError> {- let _ = lower_block_statement_inner(builder, block, Some(scope_override), None);- Ok(())+ Ok(lower_block_statement_inner(+ builder,+ block,+ Some(scope_override),+ None,+ )?) } fn lower_block_statement_inner(