Selected changesmerged Aug 22, 2026 – Aug 28, 2026
automations: add context menu actions for automation cardsTypeScript · 224 + / 33 −
Introduces 3 new declarations in src/vs/sessions/contrib/sessions/browser/views/automationsView.ts.
Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.
src/vs/sessions/contrib/sessions/browser/views/automationsView.ts ↗ · 6 files
@@ -1362,4 +1411,143 @@ registerAction2(class NewAutomationAction extends Action2 { } }); +registerAction2(class DuplicateAutomationAction extends Action2 {+ constructor() {+ super({+ id: 'sessions.automations.duplicate',+ title: localize2('duplicateAutomation', "Duplicate"),+ precondition: ChatAutomationsEnabledContext,+ menu: [{ id: Menus.AutomationCardContext, group: 'navigation', order: 1, when: ChatAutomationsEnabledContext }],+ });+ }++ override async run(accessor: ServicesAccessor, automation: IAutomationDescriptor): Promise<void> {+ const automationDialogService = accessor.get(IAutomationDialogService);+ const automationService = accessor.get(IAutomationService);+ const configurationService = accessor.get(IConfigurationService);+ const dialogService = accessor.get(IDialogService);+ const logService = accessor.get(ILogService);+ const isEnabled = () => configurationService.getValue<boolean>(CHAT_AUTOMATIONS_ENABLED_SETTING) === true;+ if (!isEnabled()) {+ await showAutomationsDisabled(dialogService);+ return;+ }++ try {+ const name = getDuplicateAutomationName(automation.name, automationService.automations.get());+ const result = await automationDialogService.showAutomationDialog({+ initialValues: {+ name,+ prompt: automation.prompt,+ schedule: automation.schedule,+ target: automation.target,
fix(ext/node): do not resume client TLS sessions unless requestedRust · 150 + / 31 −
Introduces 10 new declarations in ext/node/ops/tls_wrap.rs.
Adds new language design rather than adjusting what was there. Tests changed with it, with code of their own.
ext/node/ops/tls_wrap.rs ↗ · 4 files
@@ -4053,11 +4067,80 @@ fn normalize_pem_headers(pem: &[u8]) -> std::borrow::Cow<'_, [u8]> { std::borrow::Cow::Owned(s.into_bytes()) } +#[derive(Debug)]+struct NodeClientSessionStoreWrapper {+ inner: Arc<dyn rustls::client::ClientSessionStore>,+ allow_resumption: Arc<AtomicBool>,+}++impl rustls::client::ClientSessionStore for NodeClientSessionStoreWrapper {+ fn set_kx_hint(+ &self,+ server_name: rustls::pki_types::ServerName<'static>,+ group: rustls::NamedGroup,+ ) {+ self.inner.set_kx_hint(server_name, group);+ }++ fn kx_hint(+ &self,+ server_name: &rustls::pki_types::ServerName<'_>,+ ) -> Option<rustls::NamedGroup> {+ self.inner.kx_hint(server_name)+ }++ fn set_tls12_session(+ &self,+ server_name: rustls::pki_types::ServerName<'static>,+ value: rustls::client::Tls12ClientSessionValue,+ ) {+ self.inner.set_tls12_session(server_name, value);+ }+
apiserver/cacher: interface refactor prep for lazy iteration of watch cache snapshotsGo · 89 + / 9 −
Introduces 7 new declarations in staging/src/k8s.io/apiserver/pkg/storage/cacher/store/watch_cache_storage.go.
Adds new framework internals rather than adjusting what was there. Tests changed with it, with code of their own.
staging/src/k8s.io/apiserver/pkg/storage/cacher/store/watch_cache_storage.go ↗ · 9 files
@@ -179,6 +200,42 @@ func (l listSnapshot) OrderedListPrefix(prefix string, continueKey string) ([]in return result, nil } +func (l listSnapshot) RangePrefix(prefix, continueKey string) iter.Seq2[*Element, error] {+ return func(yield func(*Element, error) bool) {+ items, err := l.OrderedListPrefix(prefix, continueKey)+ if err != nil {+ yield(nil, err)+ return+ }+ for _, item := range items {+ // OrderedListPrefix has already checked every item is an *Element.+ if !yield(item.(*Element), nil) {+ return+ }+ }+ }+}++// Count returns the number of items RangePrefix(prefix, continueKey) would+// yield, by applying its filter without allocating or sorting.+func (l listSnapshot) Count(prefix, continueKey string) int {+ count := 0+ for _, item := range l.Items {+ elem, ok := item.(*Element)+ if !ok {+ continue+ }+ if len(continueKey) > 0 && continueKey > elem.Key {+ continue+ }+ if !key.HasPathPrefix(elem.Key, prefix) {+ continue
Add an opt-in per-frame pixel cap (cap_pixels_per_frame) to the Qwen3-VL video processorPython · 381 + / 63 −
Introduces 8 new declarations in src/transformers/models/cohere_compass/video_processing_cohere_compass.py.
Adds new core implementation rather than adjusting what was there. Tests changed with it, with code of their own.
src/transformers/models/cohere_compass/video_processing_cohere_compass.py ↗ · 8 files
@@ -296,12 +331,55 @@ def _preprocess( processed_grids = reorder_videos(processed_grids, grouped_videos_index) pixel_values_videos = torch.cat(processed_videos, dim=0) video_grid_thw = torch.tensor(processed_grids)- data = {- "pixel_values_videos": pixel_values_videos,- "video_grid_thw": video_grid_thw,- } - return BatchFeature(data=data, tensor_type=return_tensors)+ return BatchFeature(+ data={"pixel_values_videos": pixel_values_videos, "video_grid_thw": video_grid_thw},+ tensor_type=return_tensors,+ )++ def get_num_of_video_patches(self, num_frames: int, height: int, width: int, videos_kwargs=None):+ """+ A utility that returns number of video patches a given video size.++ Args:+ num_frames (`int`):+ Number of frames in the input video.+ height (`int`):+ Height of the input video.+ width (`int`):+ Width of the input video.+ videos_kwargs (`dict`, *optional*)+ Any kwargs to override defaults of the video processor.+ Returns:+ `Tuple(int, int)`: Number of placeholder tokens required and number of patches per image.+ """+ videos_kwargs = videos_kwargs if videos_kwargs is not None else {}+ min_pixels = videos_kwargs.get("min_pixels", None) or self.size["shortest_edge"]+ max_pixels = videos_kwargs.get("max_pixels", None) or self.size["longest_edge"]
Upgrade Turbopack to hashbrown 0.15Rust · 268 + / 324 −
Introduces 8 new declarations in turbopack/crates/turbo-tasks-backend/src/backend/mod.rs.
Adds new framework internals rather than adjusting what was there. Read the linked PR for the surrounding test context.
turbopack/crates/turbo-tasks-backend/src/backend/mod.rs ↗ · 11 files
@@ -1569,76 +1570,88 @@ impl TurboTasksBackend { self.track_cache_hit_by_fn(native_fn); // Step 3a: Insert into in-memory cache using the pre-located shard. // Use the existing Arc from storage to avoid a duplicate allocation.- match raw_entry_in_shard(shard, self.storage.task_cache.hasher(), hash, |k| {- k.eq_components(native_fn, this, arg_ref)- }) {- RawEntry::Occupied(_) => {}- RawEntry::Vacant(e) => {- e.insert(stored_type, task_id);- }- };+ with_entry_in_shard(+ shard,+ self.storage.task_cache.hasher(),+ hash,+ arg,+ |k, arg| k.eq_components(native_fn, this, arg.as_ref()),+ |entry, _arg| {+ if let Entry::Vacant(entry) = entry {+ entry.insert((stored_type, task_id));+ }+ },+ ); task_id } else {- match raw_entry_in_shard(shard, self.storage.task_cache.hasher(), hash, |k| {- k.eq_components(native_fn, this, arg_ref)- }) {- RawEntry::Occupied(e) => {- // Another thread beat us to creating this task — use their task_id.- // They will handle logging the new task as modified.- let task_id = *e.get();- drop(e);
model: add DSpark support for Nemotron3.5C++ · 52 + / 25 −
Introduces 1 new declaration in src/models/dflash.cpp.
Adds new runtime rather than adjusting what was there. Read the linked PR for the surrounding test context.
src/models/dflash.cpp ↗ · 6 files
@@ -354,17 +360,21 @@ static void build_dspark_markov_head(llm_graph_context & g, const llama_model & cat = cat ? ggml_concat(ctx0, cat, col, 1) : col; - // conf(i) = sigmoid(conf_proj . [conf_inp(i); markov_w1[prev(i)]] + b) -- [1, n_blocks]- ggml_tensor * conf_inp_i = ggml_view_2d(ctx0, conf_inp, conf_inp->ne[0], n_blocks,- (size_t) block_drafts * conf_inp->nb[1], i*conf_inp->nb[1]);- ggml_tensor * feat = ggml_concat(ctx0, ggml_cont(ctx0, conf_inp_i), w1_prev, 0);- ggml_tensor * conf = ggml_mul_mat(ctx0, model.dspark_conf_proj, feat);- if (model.dspark_conf_proj_b) {- conf = ggml_add(ctx0, conf, model.dspark_conf_proj_b);- }- conf = ggml_sigmoid(ctx0, conf);+ if (has_conf) {+ // confidence head input: predicts per-position acceptance+ ggml_tensor * conf_inp = res->t_embd; // [n_embd, n_tok]+ // conf(i) = sigmoid(conf_proj . [conf_inp(i); markov_w1[prev(i)]] + b) -- [1, n_blocks]+ ggml_tensor * conf_inp_i = ggml_view_2d(ctx0, conf_inp, conf_inp->ne[0], n_blocks,+ (size_t) block_drafts * conf_inp->nb[1], i*conf_inp->nb[1]);+ ggml_tensor * feat = ggml_concat(ctx0, ggml_cont(ctx0, conf_inp_i), w1_prev, 0);+ ggml_tensor * conf = ggml_mul_mat(ctx0, model.dspark_conf_proj, feat);+ if (model.dspark_conf_proj_b) {+ conf = ggml_add(ctx0, conf, model.dspark_conf_proj_b);+ }+ conf = ggml_sigmoid(ctx0, conf); - cat_conf = cat_conf ? ggml_concat(ctx0, cat_conf, conf, 1) : conf;+ cat_conf = cat_conf ? ggml_concat(ctx0, cat_conf, conf, 1) : conf;+ } if (i + 1 < block_drafts) { prev = ggml_argmax(ctx0, col);
llama: add token ID tracking to KV cellC++ · 133 + / 14 −
Reworks 75 lines of existing logic in src/llama-kv-cache.cpp.
Changes how existing runtime behaves. Read the linked PR for the surrounding test context.
src/llama-kv-cache.cpp ↗ · 4 files
@@ -1805,6 +1813,69 @@ void llama_kv_cache::set_input_v_rot(ggml_tensor * dst) const { memcpy(dst->data, attn_rot_hadamard.at(n_rot).data(), ggml_nbytes(dst)); } +bool llama_kv_cache::has_cell_ext() const {+ return hparams.n_pos_per_embd() > 1;+}++void llama_kv_cache::get_prev_tokens(const llama_ubatch & ubatch, uint32_t n, std::vector<llama_token> & res) const {+ const uint32_t n_tokens = ubatch.n_tokens;++ res.clear();+ res.resize(n_tokens*n, LLAMA_TOKEN_NULL);++ if (n == 0) {+ return;+ }++ // note: apply_ubatch() has already stored the current ubatch+ // the window below thus covers tokens of this very ubatch as well, which is what we want+ llama_pos p_min = std::numeric_limits<llama_pos>::max();+ llama_pos p_max = std::numeric_limits<llama_pos>::min();++ std::bitset<LLAMA_MAX_SEQ> seqs;++ for (uint32_t i = 0; i < n_tokens; ++i) {+ p_min = std::min(p_min, ubatch.pos[i]);+ p_max = std::max(p_max, ubatch.pos[i]);+ }++ for (uint32_t s = 0; s < ubatch.n_seqs_unq; ++s) {+ seqs.set(ubatch.seq_id_unq[s]);+ }+
apiextensions: report why the test server's healthz wait failedGo · 21 + / 7 −
Reworks 22 lines of existing logic in staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/testing/testserver.go.
Changes how existing runtime behaves. Read the linked PR for the surrounding test context.
staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/testing/testserver.go ↗ · 1 files
@@ -216,23 +216,37 @@ func StartTestServer(t Logger, _ *TestServerInstanceOptions, customFlags []strin if err != nil { return result, fmt.Errorf("failed to create a client: %v", err) }- err = wait.Poll(100*time.Millisecond, time.Minute, func() (bool, error) {+ // Keep the outcome of the last probe around: on timeout it is the only+ // clue about what the server was still waiting for, and /healthz names+ // the checks that did not pass in its body.+ var lastStatus int+ var lastBody []byte+ var lastErr error+ err = wait.PollUntilContextTimeout(ctx, 100*time.Millisecond, time.Minute, false, func(ctx context.Context) (bool, error) { select { case err := <-errCh: return false, err default: } - result := client.CoreV1().RESTClient().Get().AbsPath("/healthz").Do(context.TODO())+ res := client.CoreV1().RESTClient().Get().AbsPath("/healthz").Do(ctx) status := 0- result.StatusCode(&status)- if status == 200 {- return true, nil+ res.StatusCode(&status)+ body, rerr := res.Raw()+ // The probe that runs into the poll deadline is aborted mid-flight and+ // carries no useful outcome; keep the last one that actually completed.+ if ctx.Err() == nil {+ lastStatus, lastBody, lastErr = status, body, rerr }- return false, nil+ return status == 200, nil })
sqlite: keep sessions alive across SQLite callbacksC++ · 26 + / 2 −
Reworks 10 lines of existing logic in src/node_sqlite.cc.
Changes how existing runtime behaves. Tests changed with it, with code of their own.
src/node_sqlite.cc ↗ · 3 files
@@ -1024,6 +1024,15 @@ void DatabaseSync::RemoveBackup(BackupJob* job) { backups_.erase(job); } +std::vector<BaseObjectPtr<Session>> DatabaseSync::PinSessions() const {+ std::vector<BaseObjectPtr<Session>> pinned;+ pinned.reserve(sessions_.size());+ for (Session* session : sessions_) {+ pinned.emplace_back(session);+ }+ return pinned;+}+ void DatabaseSync::DeleteSessions() { // all attached sessions need to be deleted before the database is closed // https://www.sqlite.org/session/sqlite3session_create.html
Revert "[rust-compiler] Bail out on nested TypeScript `this` parameters (#37232)"Rust · 4 + / 12 −
Reworks 16 lines of existing logic in compiler/crates/react_compiler_lowering/src/build_hir.rs.
Changes how existing language design behaves. Read the linked PR for the surrounding test context.
compiler/crates/react_compiler_lowering/src/build_hir.rs ↗ · 1 files
@@ -2589,25 +2589,17 @@ fn lower_block_statement( block: &react_compiler_ast::statements::BlockStatement, parent_scope: Option<react_compiler_ast::scope::ScopeId>, ) -> Result<(), CompilerError> {- Ok(lower_block_statement_inner(- builder,- block,- None,- parent_scope,- )?)+ let _ = lower_block_statement_inner(builder, block, None, parent_scope);+ Ok(()) } fn lower_block_statement_with_scope( builder: &mut HirBuilder, block: &react_compiler_ast::statements::BlockStatement, scope_override: react_compiler_ast::scope::ScopeId, ) -> Result<(), CompilerError> {- Ok(lower_block_statement_inner(- builder,- block,- Some(scope_override),- None,- )?)+ let _ = lower_block_statement_inner(builder, block, Some(scope_override), None);+ Ok(()) } fn lower_block_statement_inner(