Selected changesmerged 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,
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
events: fix weak listener retention overwriteJavaScript · 24 + / 3 −
Reworks 23 lines of existing logic in lib/internal/event_target.js.
Changes how existing runtime behaves. Tests changed with it, with code of their own.
lib/internal/event_target.js ↗ · 3 files
@@ -545,8 +555,19 @@ class Listener { if (this.next !== undefined) this.next.previous = this.previous; this.removed = true;- if (this.weak)+ if (this.weak) { weakListeners().registry.unregister(this);+ const weakKey = this.weakKeyRef?.deref();+ const listener = this.callback?.deref();+ if (weakKey !== undefined && listener !== undefined) {+ const retained = weakListeners().map.get(weakKey);+ if (retained !== undefined) {+ retained.delete(listener);+ if (retained.size === 0)+ weakListeners().map.delete(weakKey);+ }+ }+ } } }
fix(transpile): don't report diagnostics from bundled assets in declaration emitRust · 17 + / 1 −
Reworks 9 lines of existing logic in cli/type_checker.rs.
Changes how existing language design behaves. Tests changed with it, with code of their own.
cli/type_checker.rs ↗ · 7 files
@@ -225,8 +225,24 @@ impl TypeChecker { None, )?; + // Declaration emit type-checks with `TypeCheckMode::All`, which (unlike+ // `deno check`'s default `Local` mode) doesn't scope semantic diagnostics+ // to the user's own files. That widens the report to every file in the+ // program, including deno's bundled `asset:///` declarations. Those aren't+ // self-contained under a user-supplied `compilerOptions.lib`: with+ // `"lib": ["dom", "deno.ns"]`, `lib.deno.ns.d.ts`'s own `import("node:net")`+ // and `NodeJS.Timeout` references have nothing to resolve against, and+ // adding `"node"` instead collides the bundled node types with the web+ // ones. Either way the user gets errors in a file they can't edit.+ // `deno check` never surfaces these, so neither should declaration emit.+ let diagnostics = response.diagnostics.filter(|d| {+ !d.file_name+ .as_deref()+ .is_some_and(|f| f.starts_with("asset:///"))+ });+ Ok(EmitDeclarationsResult {- diagnostics: response.diagnostics,+ diagnostics, emitted_files: response.emitted_files, }) }