Selected changesmerged Aug 27, 2026 – Sep 2, 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)
cri-streaming: define exit error contractGo · 56 + / 11 −
Introduces 3 new declarations in staging/src/k8s.io/cri-streaming/pkg/streaming/remotecommand/exec.go.
Adds new systems design rather than adjusting what was there. Tests changed with it, with code of their own.
staging/src/k8s.io/cri-streaming/pkg/streaming/remotecommand/exec.go ↗ · 4 files
@@ -18,22 +18,61 @@ package remotecommand import ( "context"+ "errors" "fmt" "io" "net/http"+ "strconv" "time" "k8s.io/streaming/pkg/runtime"- utilexec "k8s.io/utils/exec" ) +// ExitError is returned by [Executor.ExecInContainer] when the command+// terminates with a non-zero exit code.+//+// ExitCode returns the command's exit code, or -1 if no exit code is+// available, for example if the process was terminated by a signal.+//+// [*os/exec.ExitError] satisfies this interface.+type ExitError interface {+ error+ ExitCode() int+}+ // Executor knows how to execute a command in a container in a pod. type Executor interface { // ExecInContainer executes a command in a container in the pod, copying data // between in/out/err and the container's stdin/stdout/stderr.+ //+ // If the command terminates with a non-zero exit code,+ // ExecInContainer should return an [ExitError].
POC: Chat session state framesTypeScript · 86 + / 1 −
Introduces 2 new declarations in src/vs/workbench/contrib/chat/browser/widget/chatWidget.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/widget/chatWidget.ts ↗ · 7 files
@@ -947,13 +974,52 @@ export class ChatWidget extends Disposable implements IChatWidget { } const enabled = this.configurationService.getValue<boolean>(ChatConfiguration.ProgressBorder) === true && !this.accessibilityService.isMotionReduced()- && !isInlineChat(this);+ && !isInlineChat(this)+ && !this.isSessionStateIndicatorEnabled(); const inProgress = !!this.viewModel?.model.requestInProgress.get(); const working = enabled && inProgress; inputContainer.classList.toggle('working', working); setChatInputStackInputWorking(inputContainer, working); } + private isSessionStateIndicatorEnabled(): boolean {+ if (isInlineChat(this) || isQuickChat(this) || this.viewOptions.enableSessionStateIndicator !== true) {+ return false;+ }++ return this.configurationService.getValue<boolean>(ChatConfiguration.SessionStateIndicatorEnabled) === true;+ }++ /** Updates the whole-widget session state indicator. */+ private updateSessionStateIndicator(): void {+ if (!this.container) {+ return;+ }++ const enabled = this.isSessionStateIndicatorEnabled();+ const modelNeedsInput = !!this.viewModel?.model.requestNeedsInput.get();+ const indicatorState = computeChatSessionStateIndicatorState({+ requestNeedsInput: modelNeedsInput,+ requestInProgress: !!this.viewModel?.model.requestInProgress.get(),+ containsFocus: dom.isAncestorOfActiveElement(this.container),+ requestWasActive: this._requestActiveForStateIndicator,
Reduce Turbopack cache size with per-family compressionRust · 479 + / 135 −
Introduces 25 new declarations in turbopack/crates/turbo-persistence/src/compression.rs.
Adds new framework internals rather than adjusting what was there. Read the linked PR for the surrounding test context.
turbopack/crates/turbo-persistence/src/compression.rs ↗ · 19 files
@@ -57,8 +99,62 @@ pub fn checksum_block(data: &[u8]) -> u32 { crc32fast::hash(data) } -#[tracing::instrument(level = "trace", skip_all)]-pub fn compress_into_buffer(block: &[u8], buffer: &mut Vec<u8>) -> Result<()> {- lz4::compress_to_vec(block, buffer, lz4::ACC_LEVEL_DEFAULT).context("Compression failed")?;- Ok(())+/// Reusable compressor for a stream of blocks using the same family configuration.+pub(crate) struct Compressor {+ compression: Compression,+ zstd: Option<zstd::bulk::Compressor<'static>>,+}++impl Compressor {+ pub(crate) fn new(compression: Compression) -> Result<Self> {+ let zstd = match compression {+ Compression::Zstd3 => {+ Some(zstd::bulk::Compressor::new(3).context("Failed to create zstd compressor")?)+ }+ Compression::Lz4 => None,+ };+ Ok(Self { compression, zstd })+ }++ #[tracing::instrument(level = "trace", skip_all)]+ pub(crate) fn compress_into_buffer(+ &mut self,+ block: &[u8],+ buffer: &mut Vec<u8>,+ ) -> Result<()> {+ match self.compression {+ Compression::Lz4 => {+ lz4::compress_to_vec(block, buffer, lz4::ACC_LEVEL_DEFAULT)
mtmd: fix idefics3 preprocC++ · 50 + / 0 −
Reworks 39 lines of existing logic in tools/mtmd/mtmd-image.cpp.
Changes how existing runtime behaves. Read the linked PR for the surrounding test context.
tools/mtmd/mtmd-image.cpp ↗ · 1 files
@@ -980,6 +980,56 @@ mtmd_image_preproc_out mtmd_image_preprocessor_idefics3::preprocess(const clip_i // // CITE: https://github.com/huggingface/transformers/blob/main/src/transformers/models/idefics3/image_processing_idefics3.py#L737 const clip_image_size original_size = img.get_size();++ // old gguf files have no preprocessor longest size, custom token limits also need the generic size below+ if (hparams.image_longest_edge > 0 && hparams.image_min_pixels <= 0 && hparams.image_max_pixels <= 0) {+ const int tile_size = hparams.image_size;+ const int longest_edge = hparams.image_longest_edge;+ const double aspect_ratio = (double) original_size.width / original_size.height;++ clip_image_size resized_size;+ if (original_size.width >= original_size.height) {+ resized_size.width = longest_edge;+ resized_size.height = (int) (longest_edge / aspect_ratio);+ resized_size.height += resized_size.height % 2;+ } else {+ resized_size.height = longest_edge;+ resized_size.width = (int) (longest_edge * aspect_ratio);+ resized_size.width += resized_size.width % 2;+ }++ const int grid_x = (resized_size.width + tile_size - 1) / tile_size;+ const int grid_y = (resized_size.height + tile_size - 1) / tile_size;+ const clip_image_size refined_size = clip_image_size{grid_x * tile_size, grid_y * tile_size};++ clip_image_u8 resized_img;+ img_tool::resize(img, resized_img, resized_size, hparams.image_resize_algo, PAD_NONE);++ clip_image_u8 refined_img;+ img_tool::resize(resized_img, refined_img, refined_size, hparams.image_resize_algo, PAD_NONE);++ clip_image_u8 overview;+ img_tool::resize(refined_img, overview, {tile_size, tile_size}, hparams.image_resize_algo, PAD_NONE);
Surface sandbox model fallbacks and honour confirmation editabilityTypeScript · 135 + / 113 −
Reworks 48 lines of existing logic in src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostLanguageModelProvider.ts.
Changes how existing core implementation behaves. Tests changed with it, with code of their own.
src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostLanguageModelProvider.ts ↗ · 11 files
@@ -203,45 +192,17 @@ export class AgentHostLanguageModelProvider extends Disposable implements ILangu } /**- * The distinct context-window sizes a catalogue entry offers, ascending, or `undefined` when it- * offers no real choice. Sourced from the numeric `contextSize` picker the Copilot catalogue- * synthesizes from CAPI billing, which is the only place these token counts exist.- */- private static _contextWindowTiers(metadata: ILanguageModelChatMetadata | undefined): number[] | undefined {- const values = metadata?.configurationSchema?.properties?.[CONTEXT_SIZE_CONFIG_KEY]?.enum;- if (!values?.length) {- return undefined;- }- const sizes = [...new Set(values.filter((value): value is number => typeof value === 'number'))].sort((a, b) => a - b);- return sizes.length > 1 ? sizes : undefined;- }-- /**- * Labels for a host's `contextTier` enum, as token counts rather than tier names.+ * Translate a host's model {@link ConfigSchema} into the picker's schema shape. *- * The host names the tiers (`default` / `long_context`) because the SDK exposes no per-model- * windows, but the picker is far more useful showing "264K" / "1M" — what the GitHub desktop- * app displays for the same session. The wire value stays the tier name the host accepts; only- * the label changes.+ * Values and display text belong to the producer; the workbench only picks the group+ * ({@link _groupForConfigKey}). The one exception is a reasoning-effort enum with no display+ * text at all, labelled locally rather than rendering raw values like `xhigh`. *- * Returns `undefined` when the catalogue offers no distinct long-context tier (or does not know- * the model), which drops the property and hides the picker rather than offering a choice that- * has no effect — matching how the desktop app suppresses it.+ * A property is never dropped for want of local enrichment: a host advertises one because it+ * will honour it, and a new model, a staged rollout and an unresolved catalogue all look
[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(
Make the LLVM version mismatch ICE a fatal errorRust · 19 + / 9 −
Introduces 1 new declaration in compiler/rustc_codegen_llvm/src/diagnostics.rs.
Adds new language design rather than adjusting what was there. Read the linked PR for the surrounding test context.
compiler/rustc_codegen_llvm/src/diagnostics.rs ↗ · 3 files
@@ -265,3 +265,15 @@ pub(crate) struct IntrinsicWrongArch<'a> { pub(crate) struct UnknownLlvmTargetFeaturePrefix<'a> { pub feature: &'a str, }++#[derive(Diagnostic)]+#[diag(+ "LLVM version mismatch: this compiler was built for LLVM {$expected_version}, but LLVM {$llvm_major}.{$llvm_minor}.{$llvm_patch} was found{$dll_loc}"+)]+pub(crate) struct LlvmVersionMismatch<'a> {+ pub expected_version: c_uint,+ pub llvm_major: c_uint,+ pub llvm_minor: c_uint,+ pub llvm_patch: c_uint,+ pub dll_loc: &'a str,+}