Selected changesmerged Aug 26, 2026
feat(desktop): clipboard apiRust · 332 + / 3 −
335 source lines changed in cli/rt/desktop.rs.
A reviewable change in a preferred language design path. Focused tests changed with it.
cli/rt/desktop.rs ↗ · 7 files
@@ -696,6 +698,75 @@ pub const DESKTOP_JS: &str = r#" console.error("[deno desktop] failed to install navigator.permissions:", e); } + // --- navigator.clipboard (text only) ---+ //+ // Spec surface: `navigator.clipboard` is a `Clipboard` (extends EventTarget)+ // exposing async `readText()` / `writeText()`. The ops behind them are+ // genuinely async: laufey's clipboard calls block their calling thread, and+ // on X11/Wayland a read is serviced by whichever app owns the selection, so+ // an unresponsive owner would otherwise freeze the whole runtime behind a+ // Promise that looks like it couldn't. They reject rather than resolve if+ // that owner never answers — `""` is indistinguishable from an empty+ // clipboard, and a resolved `writeText()` has to mean the write happened.+ //+ // The richer `read()` / `write()` (`ClipboardItem` / arbitrary MIME types)+ // aren't backed by laufey, so they're omitted rather than stubbed. Per spec+ // the read/write are gated on the `clipboard-read` / `clipboard-write`+ // permissions, but laufey has no clipboard permission model, so access+ // isn't gated here (mirroring how the desktop Notification surface+ // degrades).+ const webidl = internals.webidl;+ class Clipboard extends EventTarget {+ constructor() {+ super();+ webidl.illegalConstructor();+ }++ async readText() {+ webidl.assertBranded(this, ClipboardPrototype);+ return (await op_desktop_read_clipboard_text()) ?? "";+ }++ async writeText(data) {
DRA: Fix ExtendedResourceCache handling of DeviceClass collisionsGo · 170 + / 78 −
248 source lines changed in staging/src/k8s.io/dynamic-resource-allocation/deviceclass/extendedresourcecache/extendedresourcecache.go.
A reviewable change in a preferred framework internals path. Focused tests changed with it.
staging/src/k8s.io/dynamic-resource-allocation/deviceclass/extendedresourcecache/extendedresourcecache.go ↗ · 2 files
@@ -134,86 +150,150 @@ func (c *ExtendedResourceCache) OnUpdate(oldObj, newObj interface{}) { // OnDelete handles deletion of a device class. func (c *ExtendedResourceCache) OnDelete(obj interface{}) {- if tombstone, ok := obj.(cache.DeletedFinalStateUnknown); ok {- obj = tombstone.Obj- }- deviceClass, ok := obj.(*resourceapi.DeviceClass)- if !ok {+ // DeltaFIFO.Replace can emit a key-only tombstone with a nil Obj when+ // the key is no longer available from knownObjects.+ // DeletionHandlingObjectToName falls back to the tombstone key in that+ // case, which is enough because DeviceClass is cluster-scoped and all+ // mappings are keyed by class name.+ objName, err := cache.DeletionHandlingObjectToName(obj)+ if err != nil { utilruntime.HandleErrorWithLogger(c.logger, nil, "Expected DeviceClass", "actual", fmt.Sprintf("%T", obj)) return }- c.logger.V(5).Info("DeviceClass deleted", "deviceClass", klog.KObj(deviceClass))- c.removeResourceName2class(deviceClass)- c.removeClass2ResourceName(deviceClass)+ className := objName.Name+ c.logger.V(5).Info("DeviceClass deleted", "deviceClass", className)+ c.removeMappings(className) for _, handler := range c.handlers { handler.OnDelete(obj) } } -// updateResourceName2class updates the cache with the device class mapping.-// It first removes any existing mappings for this device class to handle-// ExtendedResourceName changes, then adds the new mappings.
llama: add token ID tracking to KV cellC++ · 133 + / 14 −
147 source lines changed in src/llama-kv-cache.cpp.
A reviewable change in a preferred runtime path. 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]);+ }+