Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package spicetify-cli for openSUSE:Factory checked in at 2026-09-11 18:02:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/spicetify-cli (Old) and /work/SRC/openSUSE:Factory/.spicetify-cli.new.1265 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "spicetify-cli" Fri Sep 11 18:02:31 2026 rev:20 rq:1377013 version:2.45.0 Changes: -------- --- /work/SRC/openSUSE:Factory/spicetify-cli/spicetify-cli.changes 2026-07-06 12:35:02.601062833 +0200 +++ /work/SRC/openSUSE:Factory/.spicetify-cli.new.1265/spicetify-cli.changes 2026-09-11 18:06:24.430570247 +0200 @@ -1,0 +2,20 @@ +Thu Sep 10 07:07:20 UTC 2026 - Khang Lê <[email protected]> + +- Update to version 2.45.0: + * feat: spotify `1.3.0` support & alpha fix + * chore(vscode): use oxc formatter instead of biome (#3919) + * fix(wrapper): make PopupModal styling self-contained (#3917) + * fix(wrapper): update `Color.CSSFormat` module check (#3907) + * feat(config): allow editing spotify launch flags (#3905) + * docs(install): explain shell PATH activation (#3903) + * feat(lyrics-plus): implement pinyin romanization for Chinese lyrics (#3893) + * feat(lyrics-plus): optimize musixmatch API calls (#3909) + * feat: added new css mappings for right sidebar (#3898) + * chore(deps): bump golang.org/x/net from 0.56.0 to 0.57.0 (#3900) + * chore(deps): bump actions/setup-node from 6 to 7 (#3901) + * chore(deps): bump actions/setup-go from 6 to 7 (#3902) + * fix(css-map): add progress bar container class for 1.2.94 (#3897) + * fix(css): artist profile picture fix affecting all images (#3887) + * fix(css): incorrect shape for artist profile picture (#3885) + +------------------------------------------------------------------- Old: ---- cli-2.44.0.obscpio New: ---- cli-2.45.0.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ spicetify-cli.spec ++++++ --- /var/tmp/diff_new_pack.QOqGDX/_old 2026-09-11 18:06:25.493614894 +0200 +++ /var/tmp/diff_new_pack.QOqGDX/_new 2026-09-11 18:06:25.496615020 +0200 @@ -20,7 +20,7 @@ %define binname spicetify Name: spicetify-cli -Version: 2.44.0 +Version: 2.45.0 Release: 0 Summary: Command-line tool to customize Spotify client License: LGPL-2.1-or-later ++++++ _service ++++++ --- /var/tmp/diff_new_pack.QOqGDX/_old 2026-09-11 18:06:25.526616280 +0200 +++ /var/tmp/diff_new_pack.QOqGDX/_new 2026-09-11 18:06:25.529616406 +0200 @@ -3,7 +3,7 @@ <param name="url">https://github.com/spicetify/cli</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">@PARENT_TAG@</param> + <param name="revision">v2.45.0</param> <param name="versionformat">@PARENT_TAG@</param> <param name="changesgenerate">enable</param> <param name="versionrewrite-pattern">v(.*)</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.QOqGDX/_old 2026-09-11 18:06:25.550617288 +0200 +++ /var/tmp/diff_new_pack.QOqGDX/_new 2026-09-11 18:06:25.552617372 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/spicetify/cli</param> - <param name="changesrevision">e1f66811a635557cabbd8726cf0bcc5c3ce2b084</param></service></servicedata> + <param name="changesrevision">0eb878e0ef981623f86fa3252dd830a5990847fb</param></service></servicedata> (No newline at EOF) ++++++ cli-2.44.0.obscpio -> cli-2.45.0.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/.vscode/extensions.json new/cli-2.45.0/.vscode/extensions.json --- old/cli-2.44.0/.vscode/extensions.json 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/.vscode/extensions.json 2026-09-10 01:21:38.000000000 +0200 @@ -1,3 +1,3 @@ { - "recommendations": ["timonwong.shellcheck", "biomejs.biome", "golang.go", "ms-vscode.powershell"] + "recommendations": ["timonwong.shellcheck", "oxc.oxc-vscode", "golang.go", "ms-vscode.powershell"] } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/.vscode/settings.json new/cli-2.45.0/.vscode/settings.json --- old/cli-2.44.0/.vscode/settings.json 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/.vscode/settings.json 2026-09-10 01:21:38.000000000 +0200 @@ -6,7 +6,16 @@ "[powershell]": { "editor.defaultFormatter": "ms-vscode.powershell" }, - "[javascript][typescript][json]": { - "editor.defaultFormatter": "biomejs.biome" + "[javascript]": { + "editor.defaultFormatter": "oxc.oxc-vscode" + }, + "[typescript]": { + "editor.defaultFormatter": "oxc.oxc-vscode" + }, + "[json]": { + "editor.defaultFormatter": "oxc.oxc-vscode" + }, + "[jsonc]": { + "editor.defaultFormatter": "oxc.oxc-vscode" } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/CustomApps/lyrics-plus/OptionsMenu.js new/cli-2.45.0/CustomApps/lyrics-plus/OptionsMenu.js --- old/cli-2.44.0/CustomApps/lyrics-plus/OptionsMenu.js 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/CustomApps/lyrics-plus/OptionsMenu.js 2026-09-10 01:21:38.000000000 +0200 @@ -142,6 +142,8 @@ none: "None", }; + let romanizationOptions = {}; + const musixmatchDisplay = new Intl.DisplayNames(["en"], { type: "language" }); const availableMusixmatchLanguages = Array.isArray(musixmatchLanguages) ? [...new Set(musixmatchLanguages.filter(Boolean))] : []; const activeMusixmatchLanguage = musixmatchSelectedLanguage && musixmatchSelectedLanguage !== "none" ? musixmatchSelectedLanguage : null; @@ -205,6 +207,10 @@ hk: "Traditional Chinese (Hong Kong)", tw: "Traditional Chinese (Taiwan)", }; + romanizationOptions = { + none: "None", + pinyin: "Pinyin (拼音)", + }; break; } } @@ -243,6 +249,15 @@ when: () => friendlyLanguage, }, { + desc: "Romanization", + key: "romanization", + type: ConfigSelection, + options: romanizationOptions, + renderInline: true, + // only Chinese has a romanization option (Pinyin) for now. + when: () => friendlyLanguage === "chinese", + }, + { desc: "Convert", key: "translate", type: ConfigSlider, @@ -377,6 +392,14 @@ type: ConfigAdjust, min: fontSizeLimit.min, max: fontSizeLimit.max, + step: fontSizeLimit.step, + }, + { + desc: "Romanization font size", + key: "romanization-font-size", + type: ConfigAdjust, + min: fontSizeLimit.min, + max: fontSizeLimit.max, step: fontSizeLimit.step, }, { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/CustomApps/lyrics-plus/Pages.js new/cli-2.45.0/CustomApps/lyrics-plus/Pages.js --- old/cli-2.44.0/CustomApps/lyrics-plus/Pages.js 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/CustomApps/lyrics-plus/Pages.js 2026-09-10 01:21:38.000000000 +0200 @@ -170,7 +170,7 @@ }); }; -const SyncedLyricsPage = react.memo(({ lyrics = [], provider, copyright, isKara }) => { +const SyncedLyricsPage = react.memo(({ lyrics = [], provider, copyright, isKara, romanization }) => { const [position, setPosition] = useState(0); const activeLineEle = useRef(); const lyricContainerEle = useRef(); @@ -183,6 +183,17 @@ } }); + const romanizationByTime = useMemo(() => { + if (!romanization) return null; + const map = {}; + for (const line of romanization) { + if (line.startTime != null) { + map[line.startTime] = line.text; + } + } + return map; + }, [romanization]); + const lyricWithEmptyLines = useMemo( () => [emptyLine, emptyLine, ...processPauseLines(lyrics)].map((line, i) => ({ @@ -319,6 +330,10 @@ const belowMode = showTranslatedBelow && originalText && belowOrigin !== belowTxt; + const romanizedText = CONFIG.visual["romanization"] !== "none" && !isPause ? romanizationByTime?.[startTime] : null; + const lineTextStr = (typeof lineText === "object" ? lineText?.props?.children?.[0] : lineText) ?? ""; + const showRomanizedLine = romanizedText && romanizedText.replace(/\s+/g, "") !== String(lineTextStr).replace(/\s+/g, ""); + return react.createElement( "div", { @@ -368,6 +383,17 @@ }, }, text + ), + showRomanizedLine && + react.createElement( + "p", + { + style: { + opacity: 0.5, + fontSize: "var(--lyrics-romanization-font-size)", + }, + }, + romanizedText ) ); }) @@ -536,11 +562,22 @@ ); } -const SyncedExpandedLyricsPage = react.memo(({ lyrics, provider, copyright, isKara }) => { +const SyncedExpandedLyricsPage = react.memo(({ lyrics, provider, copyright, isKara, romanization }) => { const [position, setPosition] = useState(() => Spicetify.Player.getProgress() + CONFIG.visual["global-delay"] + CONFIG.visual.delay); const activeLineRef = useRef(null); const pageRef = useRef(null); + const romanizationByTime = useMemo(() => { + if (!romanization) return null; + const map = {}; + for (const line of romanization) { + if (line.startTime != null) { + map[line.startTime] = line.text; + } + } + return map; + }, [romanization]); + useTrackPosition(() => { if (!Spicetify.Player.data.is_paused) { setPosition(Spicetify.Player.getProgress() + CONFIG.visual["global-delay"] + CONFIG.visual.delay); @@ -648,6 +685,10 @@ const belowMode = showTranslatedBelow && originalText && belowOrigin !== belowTxt; + const romanizedText = CONFIG.visual["romanization"] !== "none" && !isPause ? romanizationByTime?.[startTime] : null; + const lineTextStr = (typeof lineText === "object" ? lineText?.props?.children?.[0] : lineText) ?? ""; + const showRomanizedLine = romanizedText && romanizedText.replace(/\s+/g, "") !== String(lineTextStr).replace(/\s+/g, ""); + return react.createElement( "div", { @@ -692,6 +733,14 @@ }, }, text + ), + showRomanizedLine && + react.createElement( + "p", + { + style: { opacity: 0.5, fontSize: "var(--lyrics-romanization-font-size)" }, + }, + romanizedText ) ); }), @@ -706,7 +755,7 @@ ); }); -const UnsyncedLyricsPage = react.memo(({ lyrics, provider, copyright }) => { +const UnsyncedLyricsPage = react.memo(({ lyrics, provider, copyright, romanization }) => { return react.createElement( "div", { @@ -732,6 +781,10 @@ const belowMode = showTranslatedBelow && originalText && belowOrigin !== belowTxt; + const romanizedText = CONFIG.visual["romanization"] !== "none" ? romanization?.[index]?.text : null; + const lineTextStr = (typeof lineText === "object" ? lineText?.props?.children?.[0] : lineText) ?? ""; + const showRomanizedLine = romanizedText && romanizedText.replace(/\s+/g, "") !== String(lineTextStr).replace(/\s+/g, ""); + return react.createElement( "div", { @@ -765,6 +818,14 @@ }, }, text + ), + showRomanizedLine && + react.createElement( + "p", + { + style: { opacity: 0.5, fontSize: "var(--lyrics-romanization-font-size)" }, + }, + romanizedText ) ); }), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/CustomApps/lyrics-plus/ProviderMusixmatch.js new/cli-2.45.0/CustomApps/lyrics-plus/ProviderMusixmatch.js --- old/cli-2.44.0/CustomApps/lyrics-plus/ProviderMusixmatch.js 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/CustomApps/lyrics-plus/ProviderMusixmatch.js 2026-09-10 01:21:38.000000000 +0200 @@ -55,6 +55,8 @@ q_duration: durr, f_subtitle_length: Math.floor(durr), usertoken: CONFIG.providers.musixmatch.token, + optional_calls: "track.richsync", + richsync_compact_type: "words", part: "track_lyrics_translation_status,track_structure,track_performer_tagging", }; @@ -231,28 +233,12 @@ return null; } - const baseURL = "https://apic-appmobile.musixmatch.com/ws/1.1/track.richsync.get?format=json&subtitle_format=mxm&app_id=mac-ios-v2.0&"; - - const params = { - f_subtitle_length: meta.track.track_length, - q_duration: meta.track.track_length, - commontrack_id: meta.track.commontrack_id, - usertoken: CONFIG.providers.musixmatch.token, - }; - - const finalURL = - baseURL + - Object.keys(params) - .map((key) => `${key}=${encodeURIComponent(params[key])}`) - .join("&"); - - let result = await Spicetify.CosmosAsync.get(finalURL, null, headers); - - if (result.message.header.status_code !== 200) { + const richsyncCall = body?.["track.richsync.get"]; + if (!richsyncCall || richsyncCall.message.header.status_code !== 200 || !richsyncCall.message.body.richsync) { return null; } - result = result.message.body; + const result = richsyncCall.message.body; const snippetQueue = parsePerformerData(meta); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/CustomApps/lyrics-plus/Translator.js new/cli-2.45.0/CustomApps/lyrics-plus/Translator.js --- old/cli-2.44.0/CustomApps/lyrics-plus/Translator.js 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/CustomApps/lyrics-plus/Translator.js 2026-09-10 01:21:38.000000000 +0200 @@ -2,6 +2,7 @@ const kuromojiPath = "https://cdn.jsdelivr.net/npm/[email protected]/dist/kuroshiro-analyzer-kuromoji.min.js"; const aromanize = "https://cdn.jsdelivr.net/npm/[email protected]/aromanize.min.js"; const openCCPath = "https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/full.min.js"; +const pinyinProPath = "https://cdn.jsdelivr.net/npm/[email protected]/dist/index.min.js"; const dictPath = "https:/cdn.jsdelivr.net/npm/[email protected]/dict"; @@ -19,8 +20,8 @@ this.createTranslator(lang); } - includeExternal(url) { - if ((CONFIG.visual.translate || this.isUsingNetease) && !document.querySelector(`script[src="${url}"]`)) { + includeExternal(url, forceInclude = false) { + if ((forceInclude || CONFIG.visual.translate || this.isUsingNetease) && !document.querySelector(`script[src="${url}"]`)) { const script = document.createElement("script"); script.setAttribute("type", "text/javascript"); script.setAttribute("src", url); @@ -28,6 +29,10 @@ } } + isUsingRomanization() { + return CONFIG.visual["romanization"] && CONFIG.visual["romanization"] !== "none"; + } + injectExternals(lang) { switch (lang?.slice(0, 2)) { case "ja": @@ -39,6 +44,7 @@ break; case "zh": this.includeExternal(openCCPath); + this.includeExternal(pinyinProPath, this.isUsingRomanization()); break; } } @@ -101,16 +107,23 @@ this.Aromanize = Aromanize; this.finished.ko = true; break; - case "zh": - if (this.OpenCC) return; - if (typeof OpenCC === "undefined") { + case "zh": { + const needsOpenCC = CONFIG.visual.translate || this.isUsingNetease; + const needsPinyin = this.isUsingRomanization(); + if (needsOpenCC && typeof OpenCC === "undefined") { + await Translator.#sleep(50); + return this.createTranslator(lang); + } + if (needsPinyin && typeof pinyinPro === "undefined") { await Translator.#sleep(50); return this.createTranslator(lang); } - this.OpenCC = OpenCC; + if (needsOpenCC && !this.OpenCC) this.OpenCC = OpenCC; + if (needsPinyin && !this.pinyinPro) this.pinyinPro = pinyinPro; this.finished.zh = true; break; + } } } @@ -150,6 +163,15 @@ return converter(text); } + async convertToPinyin(text) { + if (!this.finished.zh || !this.pinyinPro) { + await Translator.#sleep(100); + return this.convertToPinyin(text); + } + + return this.pinyinPro.pinyin(text, { toneType: "symbol", nonZh: "consecutive" }); + } + /** * Async wrapper of `setTimeout`. * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/CustomApps/lyrics-plus/index.js new/cli-2.45.0/CustomApps/lyrics-plus/index.js --- old/cli-2.44.0/CustomApps/lyrics-plus/index.js 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/CustomApps/lyrics-plus/index.js 2026-09-10 01:21:38.000000000 +0200 @@ -51,12 +51,14 @@ "lines-before": localStorage.getItem("lyrics-plus:visual:lines-before") || "0", "lines-after": localStorage.getItem("lyrics-plus:visual:lines-after") || "2", "font-size": localStorage.getItem("lyrics-plus:visual:font-size") || "32", + "romanization-font-size": localStorage.getItem("lyrics-plus:visual:romanization-font-size") || "16", "translate:translated-lyrics-source": localStorage.getItem("lyrics-plus:visual:translate:translated-lyrics-source") || "none", "translate:display-mode": localStorage.getItem("lyrics-plus:visual:translate:display-mode") || "replace", "translate:detect-language-override": localStorage.getItem("lyrics-plus:visual:translate:detect-language-override") || "off", "translation-mode:japanese": localStorage.getItem("lyrics-plus:visual:translation-mode:japanese") || "furigana", "translation-mode:korean": localStorage.getItem("lyrics-plus:visual:translation-mode:korean") || "romaja", "translation-mode:chinese": localStorage.getItem("lyrics-plus:visual:translation-mode:chinese") || "cn", + romanization: localStorage.getItem("lyrics-plus:visual:romanization") || "none", translate: getConfig("lyrics-plus:visual:translate", false), "ja-detect-threshold": localStorage.getItem("lyrics-plus:visual:ja-detect-threshold") || "40", "hans-detect-threshold": localStorage.getItem("lyrics-plus:visual:hans-detect-threshold") || "40", @@ -121,6 +123,7 @@ CONFIG.visual["lines-before"] = Number.parseInt(CONFIG.visual["lines-before"]); CONFIG.visual["lines-after"] = Number.parseInt(CONFIG.visual["lines-after"]); CONFIG.visual["font-size"] = Number.parseInt(CONFIG.visual["font-size"]); +CONFIG.visual["romanization-font-size"] = Number.parseInt(CONFIG.visual["romanization-font-size"]); CONFIG.visual["ja-detect-threshold"] = Number.parseInt(CONFIG.visual["ja-detect-threshold"]); CONFIG.visual["hans-detect-threshold"] = Number.parseInt(CONFIG.visual["hans-detect-threshold"]); @@ -206,6 +209,7 @@ cn: null, hk: null, tw: null, + pinyin: null, musixmatchTranslation: null, musixmatchTranslationLanguage: null, musixmatchAvailableTranslations: [], @@ -246,6 +250,7 @@ this.displayMode = null; this.currentMusixmatchLanguage = CONFIG.visual["musixmatch-translation-language"]; this._musixmatchTranslationRequestId = null; + this._romanizing = false; } infoFromTrack(track) { @@ -505,6 +510,7 @@ this.fetchTempo(info.uri); this.resetDelay(); + this._romanizing = false; let tempState; // if lyrics are cached @@ -612,6 +618,7 @@ cn: null, hk: null, tw: null, + pinyin: null, neteaseTranslation: null, ...tempState, ...translationOverrides, @@ -695,6 +702,28 @@ CACHE[lyricsState.uri] = { ...CACHE[lyricsState.uri], ...resetCache }; } } + + const canRomanize = + CONFIG.visual["romanization"] !== "none" && + (lang === "zh-hans" || lang === "zh-hant") && + (mode === SYNCED || mode === UNSYNCED) && + Array.isArray(lyrics) && + lyrics.length; + + if (canRomanize) { + if ((!this.state.pinyin || this.state.pinyin.mode !== mode) && !this._romanizing) { + this._romanizing = true; + const uri = lyricsState.uri; + this.romanizeLyrics(lyrics).then((lines) => { + this._romanizing = false; + if (uri === this.state.uri) { + this.setState({ pinyin: { mode, lines: lines || null } }); + } + }); + } + } else if (this.state.pinyin) { + this.state.pinyin = null; + } } provideLanguageCode(lyrics) { @@ -780,6 +809,31 @@ } } + async romanizeLyrics(lyrics) { + if (!lyrics) return null; + + Spicetify.showNotification("Converting...", false, 1000); + if (!this.translator) { + this.translator = new Translator("zh"); + } + await this.translator.awaitFinished("zh"); + + try { + const result = await Promise.all( + lyrics.map(async (lyric) => ({ + startTime: lyric.startTime, + text: await this.translator.convertToPinyin(lyric.text), + })) + ); + Spicetify.showNotification("Converting...", false, 0); + return result; + } catch (error) { + Spicetify.showNotification("Convert Error!", true); + console.error(error); + return null; + } + } + resetDelay() { CONFIG.visual.delay = Number(localStorage.getItem(`lyrics-delay:${Spicetify.Player.data.item.uri}`)) || 0; } @@ -1011,6 +1065,7 @@ ...this.styleVariables, "--lyrics-align-text": CONFIG.visual.alignment, "--lyrics-font-size": `${CONFIG.visual["font-size"]}px`, + "--lyrics-romanization-font-size": `${CONFIG.visual["romanization-font-size"]}px`, "--animation-tempo": this.state.tempo, }; @@ -1039,6 +1094,7 @@ ...this.styleVariables, "--lyrics-align-text": CONFIG.visual.alignment, "--lyrics-font-size": `${CONFIG.visual["font-size"]}px`, + "--lyrics-romanization-font-size": `${CONFIG.visual["romanization-font-size"]}px`, "--animation-tempo": this.state.tempo, }; @@ -1069,6 +1125,7 @@ const hasMusixmatchLanguages = Array.isArray(this.state.musixmatchAvailableTranslations) && this.state.musixmatchAvailableTranslations.length > 0; const hasTranslation = this.state.neteaseTranslation !== null || this.state.musixmatchTranslation !== null || hasMusixmatchLanguages; const hasPerformer = !!this.state.currentLyrics?.some((line) => line.performer); + const romanizationLines = this.state.pinyin?.mode === mode ? this.state.pinyin.lines : null; if (mode !== -1) { showTranslationButton = (friendlyLanguage || hasTranslation) && (mode === SYNCED || mode === UNSYNCED); @@ -1089,6 +1146,7 @@ provider: this.state.provider, copyright: this.state.copyright, reRenderLyricsPage: this.reRenderLyricsPage, + romanization: romanizationLines, }); } else if (mode === UNSYNCED && this.state.unsynced) { activeItem = react.createElement(UnsyncedLyricsPage, { @@ -1097,6 +1155,7 @@ provider: this.state.provider, copyright: this.state.copyright, reRenderLyricsPage: this.reRenderLyricsPage, + romanization: romanizationLines, }); } else if (mode === GENIUS && this.state.genius) { activeItem = react.createElement(GeniusPage, { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/css-map.json new/cli-2.45.0/css-map.json --- old/cli-2.44.0/css-map.json 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/css-map.json 2026-09-10 01:21:38.000000000 +0200 @@ -268,9 +268,11 @@ "NPvLJSRWfv1Joo8dF0D8": "main-actionButtons", "GTAFfOA_w5vh_bDaGJAG": "main-actionButtons", "x2zIrx9Juns9lNvs": "main-actionButtons", + "qqJ1JBO6dCOkJRS9_98s": "main-actionButtons", "WIGgdAaAzrXm7f_loaXi": "main-actionButtons-button", "YaU17q8G6eTc2eoKRwnL": "main-actionButtons-spacer", "NA8gTZ4nPFEEcDYv": "main-actionButtons-spacer", + "MtYp_qNgYodAxs42_Z7u": "main-actionButtons-spacer", "SPC4uzYXJmknkCGKpxHw": "main-addButton-active", "rRF_r7EyCHjZv058JACi": "main-addButton-active", "RbsCNNM9a0WkFCM2UzBA": "main-addButton-button", @@ -347,55 +349,74 @@ "P7j2kCLc27vLybuzy5XB": "main-buddyFeed-usernameAndTimestamp", "LunqxlFIupJw_Dkx6mNx": "main-card-card", "_hPU2Qo7dicv7cnikDRl": "main-card-card", + "kfFBBaT99t8M9PjcuwWQ": "main-card-card", "aAYpzGljXQv1_zfopxaH": "main-card-cardContainer", "RKstfK7T5nPbsDOYT6sT": "main-card-cardContainer", "RPV24T758a0OhKtZ": "main-card-cardContainer", + "CNfQfoOojaDifUh0yxzp": "main-card-cardContainer", "tsv7E_RBBw6v0XTQlcRo": "main-card-cardLink", "oboNtEJNVzUoiaCWZRti": "main-card-cardLink", + "yRq_zm8vZWGDCDtHCXMy": "main-card-cardLink", "ocMpUIgUOBeGMwNIiEDv": "main-card-cardMetadata", "LISrKvt3ohgYQtg_": "main-card-cardMetadata", "K2GmhKpSMGL9aDJbOJrD": "main-card-cardMetadata", "E1N1ByPFWo4AJLHovIBQ": "main-card-cardMetadata", + "on2LaRqwqHOyZIZ6d8Vg": "main-card-cardMetadata", "qIa0uoOuauQH5s99": "main-card-cardMetadataWrapper", "rDjuTujS6qfRKt4apIMQ": "main-card-cardMetadataWrapper", "mGpHyHUUZ0wzRQEv": "main-card-cardTitle", "xHz124sSHSCYHecLCTfi": "main-card-cardTitle", "sq_3oR2TTWUK3HEVWaxx": "main-card-cardTitle", + "kbHOXvQULqT5z2vTDD1P": "main-card-cardTitle", "UTAdrJMU_kwRYbxi": "main-card-cardTitleLink", "Szfh3AX4vGXxz0BQw5Uw": "main-card-cardTitleLink", "w9Tpa4Y111UM5u1WMkEl": "main-card-DownloadStatusIndicator", "vCaVlmqbg5B36V6PzUsm": "main-card-DownloadStatusIndicator", + "V0fxSnuFvgrpYggGF0Ad": "main-card-DownloadStatusIndicator", "XiVwj5uoqqSFpS4cYOC6": "main-card-draggable", "kpO5z7v_Nr22lge440TY": "main-card-hero", + "GYdE4NEvdYo_jXXbHChY": "main-card-hero", "YR9YVGItxfIgAZje": "main-card-imageContainer", "YnehZkoE2hpA5Tniju8J": "main-card-imageContainer", "xBV4XgMq0gC5lQICFWY_": "main-card-imageContainer", + "AGngVgYSd6na70ghQCdE": "main-card-imageContainer", "xxLDW4qlPuNbzB9jIJKc": "main-card-imageContainerOld", "NH6UaoYYe47eIHA2Rmal": "main-card-imageContainerOld", + "T009qZwFm5PtBByCd30U": "main-card-imageContainerOld", "DcLEXCfwMp91VNH5R4m9": "main-card-imageContainerSkeleton", "AYwATC_zEPwCkmO1yc8R": "main-card-imageContainerSkeleton", + "aM80N0fS7fx9uhLxFXwG": "main-card-imageContainerSkeleton", "UB3cP9wsqoAMAHaeBGDt": "main-card-imagePlaceholder", + "KxJOZ3er5tGUxZNYsakR": "main-card-imagePlaceholder", "XpvI6Yl46lYYdMY6SnvK": "main-card-newEpisodeIndicator", "r9Oj1LabijReMkOyeUxw": "main-card-newEpisodeIndicator", + "CD_VxTNKrT5ItUEm9pho": "main-card-newEpisodeIndicator", "woJQ5t2YiaJhjTv_KE7p": "main-card-PlayButtonContainer", "qpns1iHTAt8rMNnK": "main-card-PlayButtonContainer", "EFrqkoAHdmfRItUj8H8H": "main-card-PlayButtonContainer", + "Lfmlz1SNgfjwWukLZU5x": "main-card-PlayButtonContainer", "khD_dnfwxwd4HF20": "main-card-PlayButtonContainerVisible", "zuKTW9yEI9rToECOcWG3": "main-card-PlayButtonContainerVisible", "_0rtnZ9bGhwcfS5kspzw": "main-card-PlayButtonContainerVisible", + "SKbmros6MNnv2vIbyHb3": "main-card-PlayButtonContainerVisible", "iwsv8i7rNxA2c_VvC4CO": "main-card-type", + "WhJ6ZtpkIDou9qa66e_c": "main-card-type", "c6FJaCManaNcchyUwvoL": "main-card-withWaves", "MxnDSnm9KnJu4xcsinKh": "main-card-withWavesWrapper", "QO_OHdGt6X6luPH6_Lfg": "main-cardHeader-hasNewEpisodeIndicator", "Nqa6Cw3RkDMV8QnYreTr": "main-cardHeader-link", "nk6UgB4GUYNoAcPtAQaG": "main-cardHeader-text", "yYflTYbufy7rATGQiZfq": "main-cardImage-circular", + "_vYcJu3HJyUaRgOu": "main-cardImage-circular", + "VVCqZmc7EVyg_FF1lVM2": "main-cardImage-circular", "SKJSok3LfyedjZjujmFt": "main-cardImage-image", "whMS0fh9Ar4I_GaP": "main-cardImage-image", "Z3N2sU3PRuY4NgvdEz55": "main-cardImage-image", + "LwhcudULaBeptw_Hhqql": "main-cardImage-image", "P0DCrcBH45YVGZwP": "main-cardImage-imageWrapper", "mKWCDBYvel1BrZvMNY09": "main-cardImage-imageWrapper", "g4PZpjkqEh5g7xDpCr2K": "main-cardImage-imageWrapper", + "HEr4cRXbsVPWqTwTerei": "main-cardImage-imageWrapper", "qucSNjx66ofSGZDzCuEk": "main-cardSubHeader-isHero", "Za_uNH8nTZ0qCuIqbPLZ": "main-cardSubHeader-root", "RArlOXg8S6l3NgRKrGsO": "main-cardSubHeader-text", @@ -822,66 +843,88 @@ "EHxL6K_6WWDlTCZP6x5w": "main-genericButton-buttonActiveDot", "S0nU7XTXYMOBcASz": "main-globalNav-browseButtonWrapper", "Ckze8wMFNiDXk_f1IqjJ": "main-globalNav-browseButtonWrapper", + "WOA7FPCjtFzDZ3kt_prW": "main-globalNav-browseButtonWrapper", "OomFKn3bsxs5JfNUoWhz": "main-globalNav-buddyFeed", + "nR3ekhH3c1IU7dX9smcR": "main-globalNav-buddyFeed", "zKQSfRjzvD8_Imog": "main-globalNav-contentRight", "vRrKblnUUQV5eMbvUdv8": "main-globalNav-contentRight", + "YaxaG7RXncXi6VCTEukV": "main-globalNav-contentRight", "IEulmRakQT_FgH43ov2a": "main-globalNav-contentRightSpacer", + "gI9IyY8kv9SR9nOJQhgk": "main-globalNav-contentRightSpacer", "VizXsWMIuNfKGN5pMyox": "main-globalNav-historyButtons", "KkJlQWSJM6Cu2GJJSBQ7": "main-globalNav-historyButtons", "K1Ve0b6y28X7myMURsKS": "main-globalNav-historyButtons", "Jh8hR_VCPJ4cpwDm": "main-globalNav-historyButtons", + "Hr6zqFXipVeZnpT0jVAQ": "main-globalNav-historyButtons", "Z6t_8rA6LOBrX3huqRJG": "main-globalNav-historyButtonsContainer", "VphhNp8Q7R2U552LryhP": "main-globalNav-historyButtonsContainer", "pIM9jg__39NIpOvXG89b": "main-globalNav-historyButtonsContainer", "AYUEkKOEqksuTXmh": "main-globalNav-historyButtonsContainer", + "azTGVyS_7WuUbhEDoCgH": "main-globalNav-historyButtonsContainer", "Il1Yz_P2hpTeJyNf9mi_": "main-globalNav-historyButtonsSpacer", "ErjO4cqRWhY9rFZf": "main-globalNav-historyButtonsSpacer", + "GCNvWhUGp84HhAuncKQ1": "main-globalNav-historyButtonsSpacer", + "bjRw1FNwvXxSrC054Bus": "main-globalNav-historyButtonsSpacer", "ppjvheuqvs8mmcHwKkK5": "main-globalNav-historyButtonsWrapper", "MvzElcNve78O4Oo8": "main-globalNav-historyButtonsWrapper", + "nqqkID2Vj36sqqr4GPmw": "main-globalNav-historyButtonsWrapper", "rBX1EWVZ2EaPwP4y1Gkd": "main-globalNav-icon", "jdlOKroADlFeZZQeTdp8": "main-globalNav-link-icon", "dIfr5oVr5kotAi0HsIsW": "main-globalNav-link-icon", "_Bg_zSvFrEutyacG": "main-globalNav-link-icon", + "xlH6FJnBzFT4l3TgUBre": "main-globalNav-link-icon", "YEAFPNm87XbzS4sF5dDe": "main-globalNav-navLink", "obd_bH64Snp1npdw29XM": "main-globalNav-navLink", "kUHE42xvQVzWqabl": "main-globalNav-navLink", "bWBqSiXEceAj1SnzqusU": "main-globalNav-navLink", + "RTmbDc5S8vYrrQIJpPXv": "main-globalNav-navLink", "voA9ZoTTlPFyLpckNw3S": "main-globalNav-navLinkActive", "Ufz621LN174DTRDis7EY": "main-globalNav-navLinkActive", "kxv3By32Og8yDEXy": "main-globalNav-navLinkActive", "ETjtwGvAB4lRVqSzm8nA": "main-globalNav-navLinkActive", "AonZ39aVKATRTjY28Uww": "main-globalNav-navLinkActive", + "ajKYUZPcNmFVzcAzzlwe": "main-globalNav-navLinkActive", "YsP3Gj4aJDYsaOC5": "main-globalNav-searchContainer", "v8JHoFMumOgbCn8vsTvC": "main-globalNav-searchContainer", "QrpHSphgBSqzODEHqr_t": "main-globalNav-searchContainer", "lj0eGI6WEtfxFX7irC03": "main-globalNav-searchContainer", + "mlx0CgXAnGz0dADVsCdS": "main-globalNav-searchContainer", "W9VXOkC43GP_7ULClgxQ": "main-globalNav-searchInputContainer", "T0ufQRqPgIE3BmjD": "main-globalNav-searchInputContainer", "RpMCAf8TjF6HpQSI7hdx": "main-globalNav-searchInputContainer", "fksI89zEXwqKWm1O6sJm": "main-globalNav-searchInputContainer", "b7r2WRiu5f9Q99qmyreh": "main-globalNav-searchInputContainer", + "f0G3CvZVXIxBqmSarCt9": "main-globalNav-searchInputContainer", "SrfZ87xJMiJ7OYEB4Ziz": "main-globalNav-searchInputKBDWrapper", + "rxYHNa7qp7GadJDDckeX": "main-globalNav-searchInputKBDWrapper", "tDFP1X98EgqQIPaumxRt": "main-globalNav-searchInputSection", "PvsV2JgJRDME1vDn6IJL": "main-globalNav-searchInputSection", "NykkfCmZVlyRYNAqZg35": "main-globalNav-searchInputSection", "eu6ObgEHE5owtzi_": "main-globalNav-searchInputSection", "_b3hhmbWtOY8_1M1mM1H": "main-globalNav-searchInputSection", + "vi4HnZvSILknLijjZ590": "main-globalNav-searchInputSection", "Upg3TU2JcLoODwAs": "main-globalNav-searchInputText", + "f3zxlcazetW7hEgJi6ac": "main-globalNav-searchInputText", "zIEAwziaGLAsvE5h": "main-globalNav-searchInputTextWrapper", "al8f6ds34QJ4LZ74vbVP": "main-globalNav-searchInputTextWrapper", + "bRRJlkldFGQjaL5FAFze": "main-globalNav-searchInputTextWrapper", "eoACZlxIIdCS_g00hynp": "main-globalNav-searchInputWrapper", "DW2tFcaSSAWw9twn": "main-globalNav-searchInputWrapper", + "HYAdp74EPSxNXv5y43K2": "main-globalNav-searchInputWrapper", "W02pQCvfy5Bin7z4EAzo": "main-globalNav-searchSection", "jGghIqFVK6VrBUP9FLIq": "main-globalNav-searchSection", "gj5VcIUC9oD2p4BsxzGE": "main-globalNav-searchSection", "CJFYJUHifjAise1k": "main-globalNav-searchSection", + "yrgY7D0BQvaB82DAjMa1": "main-globalNav-searchSection", "soGhxDX6VjS7dBxX9Hbd": "main-gridContainer-fixedWidth", "YR7WOlf_lck48w4l": "main-gridContainer-gridContainer", "iKwGKEfAfW7Rkx2_Ba4E": "main-gridContainer-gridContainer", "dZZDxz44v5EOD33wbCZ3": "main-gridContainer-gridContainer", + "LloRxwm7PwmJO9a8psUg": "main-gridContainer-gridContainer", "iOYHTG9ncL3GLrdb": "main-gridContainer-gridContainerMargin", "jTlip_2p9QBKtt5Po88H": "main-gridContainer-gridContainerMargin", "PmW2UCL9vlTcNPD7J0KJ": "main-gridContainer-uniformRowHeight", + "FoEw3ym29wXY2KSsVOKn": "main-gridContainer-uniformRowHeight", "HkbHLcqgUfXruL5xVi28": "main-heroCard-card", "_gB1lxCfXeR8_Wze5Cx9": "main-heroCard-cardLink", "sm7ZnbOO1Zfg9cupYgPN": "main-heroCard-cardMetadata", @@ -916,10 +959,13 @@ "obD7rdENNc2n3fC0": "main-image-image", "mMx2LUixlnN_Fu45JpFB": "main-image-image", "LBM25IAoFtd0wh7k3EGM": "main-image-image", + "FwkSRC8nZx0oFeY2HJi2": "main-image-image", "Yn2Ei5QZn19gria6LjZj": "main-image-loaded", "qIwhHcbG780QDz68": "main-image-loaded", "PgTMmU2Gn7AESFMYhw4i": "main-image-loaded", + "xMLEqLC2MvHjIHuD0xxf": "main-image-loaded", "yOKoknIYYzAE90pe7_SE": "main-image-loading", + "tulkrakGcFm4fc23e1Lc": "main-image-loading", "E1Cm2thXvhsxyhom": "main-image-rounded", "AZXSqigfbEKLSnNVm1g7": "main-image-rounded", "wcftliF4QjZKB1CYgEON": "main-imagePicker-fileInput", @@ -1356,6 +1402,7 @@ "N1BHSZD2BszRAq4J": "main-topBar-background", "T1xI1RTSFU7Wu94UuvE6": "main-topBar-background", "PfgTAe4hVhuNFZRuuKQG": "main-topBar-background", + "VF3uvIAJTYAgTCYhK9Hc": "main-topBar-background", "WtC1lGbmQRplD6JBhNFU": "main-topBar-buddyFeed", "pefa1_ZALRn90eYLANvw": "main-topBar-buddyFeed", "IAyWaeDamLJLjxuPeVKw": "main-topBar-buddyFeed", @@ -1364,19 +1411,25 @@ "CE17OcVsW2svuK7ebBcx": "main-topBar-buddyFeedIcon", "ql0zZd7giPXSnPg75NR0": "main-topBar-button", "J6VTd7VdGN2PM_oXCAyH": "main-topBar-button", + "YCQudASYII9oSA3VRAJv": "main-topBar-button", "qvXMfQh1CjESoKKX49Bl": "main-topBar-buttonActive", "bTx8oDVa08kc2tDc": "main-topBar-container", "VCH3TJP5s27cQwnxWKnA": "main-topBar-container", "facDIsOQo9q7kiWc4jSg": "main-topBar-container", + "k0uNGIIWcXreTlFxJLQE": "main-topBar-container", "MIX_wd0K1tVHme_pwV2F": "main-topBar-contentArea", "BkpKedcdaMGbvgXMlmcg": "main-topBar-contentArea", + "pYTZtB41EdPEHJORkp4m": "main-topBar-contentArea", "OOsg_GCQDERDXc1d0EmC": "main-topBar-entryPoints", "pfMoD1MbelMuF1m8QeMc": "main-topBar-forward", + "DZrn0sdiVhJrXNOIIwgJ": "main-topBar-forward", "Oq5wiHCwgjjMg_VYy068": "main-topBar-fullscreenHistoryButtons", "VgSbatGBB9XwTH2_dsxg": "main-topBar-historyButtons", "fWwn9sakqBBjgiNti7LD": "main-topBar-historyButtons", + "_ehvtNb15IxmxomR0T9E": "main-topBar-historyButtons", "ou0osOf3R1ZRWQ1xzFd9": "main-topBar-icon", "IYDlXmBmmUKHveMzIPCF": "main-topBar-icon", + "XnDQ91Oe6pIqmTIBV3kf": "main-topBar-icon", "cqO5c3gPyN6tXIddpWfr": "main-topBar-left", "qxbaGYC8rgMLfyOuYRCM": "main-topBar-loggedOut", "LKFFk88SIRC9QKKUWR5u": "main-topBar-loginButtons", @@ -1384,9 +1437,11 @@ "AGRpGUcmqIgVZ5Nh": "main-topBar-overlay", "fKbzlgPXfvClLUUKYLxj": "main-topBar-overlay", "EvIR4O7jOSbNmxtMdIQ0": "main-topBar-overlay", + "rhgad0KCkY7pC3Jjdt9T": "main-topBar-overlay", "DWIabsKiPzMNV7HphphB": "main-topBar-playButtonWrapper", "EcY_T1Upcf0BwniO": "main-topBar-playButtonWrapper", "CWFTCu03cdDALodezHmA": "main-topBar-responsiveForward", + "vGxcYBngtOYchloEXel_": "main-topBar-responsiveForward", "fl1Ov5aB9YCKnMkJYpEu": "main-topBar-right", "VGKBvschhennrwdTibUE": "main-topBar-rightSidebarVisible", "oyLHDDA5CuA84lzZ": "main-topBar-searchBar", @@ -1399,6 +1454,7 @@ "SgtTbe7qcK0Rae6rXLWm": "main-topBar-topbarContent", "NXttmW3KPwE1r4Am": "main-topBar-topbarContent", "qHWqOt_TYlFxiF0Dm2fD": "main-topBar-topbarContent", + "VSCYZSO7dit4MeBttlqI": "main-topBar-topbarContent", "ZoyIPzfLrJUqGdBV": "main-topBar-topbarContentContainer", "dF0K0jaEfxecrAYyZnVY": "main-topBar-topbarContentContainer", "VHvOWFJZz7l5Py6Vud3A": "main-topBar-topbarContentRight", @@ -1409,6 +1465,7 @@ "rovbQsmAS_mwvpKHaVhQ": "main-topBar-topbarContentWrapper", "FdWkUygeG4YIau9k": "main-topBar-topbarContentWrapper", "QoAE5SWKbvYt9ogonr6e": "main-topBar-topbarContentWrapper", + "h7p8IPUBTz82rN27_RIE": "main-topBar-topbarContentWrapper", "sNde2kloCY28V4GB9AvP": "main-topBar-topNavBarLinks", "k0vXhOdr0XE83lAQaJ1O": "main-topBar-topNavBarSeparator", "Upqw01TOXETOmR5Td7Dj": "main-topBar-UpgradeButton", @@ -1420,6 +1477,7 @@ "kwTbLplLLsW6T_LrtR7_": "main-topBar-whatsNewFeedNotificationDot", "dmF7or26BvPJs5kQtYVH": "main-topBar-whatsNewFeedNotificationTitle", "coBkWVskipFo8KxLKief": "main-topBar-withBackgroundBlur", + "POdOqEdsK4cpUcw1vsUz": "main-topBar-withBackgroundBlur", "g_OLJCea3ISA_OEZXMld": "main-topBarStatusIndicator-enter", "eUtkhxZmvSKe4G9vJbvG": "main-topBarStatusIndicator-enterActive", "y0CwI5JkA0h0OyLFf53Q": "main-topBarStatusIndicator-exitActive", @@ -1987,6 +2045,7 @@ "fDGGPFmD54w05ut8Ns4S": "playback-progressbar", "tNhfHQhWhj9RoA1rfwY5": "playback-progressbar-container", "B1vgcMXBqOxgMxXh5j1f": "playback-progressbar-container", + "PuvORL_2IYHBmI6V": "playback-progressbar-container", "ihE8PJvbefgJmRhO": "playback-progressbar-isInteractive", "WFFDxnFUICVFNvvNU1IE": "playback-progressbar-isInteractive", "OEbZDzXdU1OUQactz3ZA": "playback-progressbar-isInteractive", @@ -2160,6 +2219,15 @@ "LtqMCWXd5Nkemkym": "Root__right-sidebar", "OTfMDdomT5S7B5dbYTT8": "Root__right-sidebar", "lAtoMFm8vg4yAlGztUxI": "Root__right-sidebar", + "eWU4JoxyECcwnSf_": "Root__right-sidebar-peek", + "SC_eWQl28srvyLED": "Root__right-sidebar-fauxMainViewEnd", + "vH8s0xuGZZAqkkUl": "Root__right-sidebar-overlayWrapper", + "a_fKt7xvd8od_kEb": "Root__right-sidebar-peekContent", + "wJiY1vDfuci2a4db": "Root__right-sidebar-overlay", + "Q3fgyBaNgcu34CP1": "Root__right-sidebar-overlayButton", + "Vmaq2JjgsQ0qt9VG": "Root__right-sidebar-expanded", + "fEThIghNSPAx5Xs3": "Root__right-sidebar-collapsed", + "WXUVXy433Xk07S0H": "Root__right-sidebar-deferredCollapsed", "PHgyArRLVFknlaOm31ID": "Root__top-bar", "ZQftYELq0aOsg6tPbVbV": "Root__top-container", "POZtIm1wHFiwlxZY5i0a": "Root__top-container", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/go.mod new/cli-2.45.0/go.mod --- old/cli-2.44.0/go.mod 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/go.mod 2026-09-10 01:21:38.000000000 +0200 @@ -6,8 +6,8 @@ github.com/go-ini/ini v1.67.0 github.com/mattn/go-colorable v0.1.15 github.com/pterm/pterm v0.12.82 - golang.org/x/net v0.56.0 - golang.org/x/sys v0.46.0 + golang.org/x/net v0.57.0 + golang.org/x/sys v0.47.0 ) require ( @@ -22,6 +22,6 @@ github.com/rivo/uniseg v0.4.7 // indirect github.com/stretchr/testify v1.9.0 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect - golang.org/x/term v0.44.0 // indirect - golang.org/x/text v0.38.0 // indirect + golang.org/x/term v0.45.0 // indirect + golang.org/x/text v0.40.0 // indirect ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/go.sum new/cli-2.45.0/go.sum --- old/cli-2.44.0/go.sum 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/go.sum 2026-09-10 01:21:38.000000000 +0200 @@ -81,8 +81,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= -golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec= +golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= +golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -98,22 +98,22 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= -golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc= -golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y= +golang.org/x/term v0.45.0 h1:NwWyBmoJCbfTHpxrWoZ9C6/VxOf7ic219I8xZZFdrf0= +golang.org/x/term v0.45.0/go.mod h1:9aqxs0blBcrm/n0L9QW0aRVD+ktan8ssZromtqJC43w= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE= -golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4= +golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs= +golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/install.sh new/cli-2.45.0/install.sh --- old/cli-2.44.0/install.sh 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/install.sh 2026-09-10 01:21:38.000000000 +0200 @@ -146,7 +146,13 @@ echo log "spicetify v$tag was installed successfully to $spicetify_install" -log "Run 'spicetify --help' to get started" +if [ -n "${shellrc:-}" ] && [ -f "$shellrc" ]; then + log "Open a new terminal or reload your shell profile to use spicetify:" + log " source \"$shellrc\"" + log "Then run 'spicetify --help' to get started" +else + log "After adding spicetify to your PATH, run 'spicetify --help' to get started" +fi echo "Do you want to install spicetify Marketplace? (Y/n)" read -r choice < /dev/tty diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/spicetify.go new/cli-2.45.0/spicetify.go --- old/cli-2.44.0/spicetify.go 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/spicetify.go 2026-09-10 01:21:38.000000000 +0200 @@ -52,8 +52,14 @@ log.SetOutput(colorable.NewColorableStdout()) // Separates flags and commands + parseFlags := true for _, v := range os.Args[1:] { - if len(v) > 0 && v[0] == '-' { + if parseFlags && v == "--" { + parseFlags = false + continue + } + + if parseFlags && len(v) > 0 && v[0] == '-' { if len(v) > 2 && v[1] != '-' { for _, char := range v[1:] { flags = append(flags, "-"+string(char)) @@ -494,6 +500,8 @@ --bypass-admin Bypass admin or root (sudo) check. NOT RECOMMENDED +-- Stop parsing flags; treat remaining arguments as command values + -c, --config Print config file path and quit -h, --help Print this help text and quit @@ -532,6 +540,8 @@ spotify_launch_flags <string> Command-line flags used when launching/restarting Spotify. Separate each flag with "|". + To set flags from the CLI, place "--" before the value. + Example: spicetify config spotify_launch_flags -- "--flag-1|--flag-2" List of valid flags: https://spicetify.app/docs/development/spotify-cli-flags always_enable_devtools <0 | 1> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/src/apply/apply.go new/cli-2.45.0/src/apply/apply.go --- old/cli-2.44.0/src/apply/apply.go 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/src/apply/apply.go 2026-09-10 01:21:38.000000000 +0200 @@ -360,7 +360,7 @@ utils.ReplaceOnce( &content, - `(\.f\.miniCss=function\(\w+,\w+\).*?\(\{)([0-9:,]+)(\}\)\[\w+\])`, + `(\.f\.miniCss=function\(\w+,\w+(?:,\w+)?\).*?\(\{)([0-9:,]+)(\}\)\[\w+\])`, func(submatches ...string) string { return fmt.Sprintf("%s%s%s%s", submatches[1], submatches[2], cssEnableMap, submatches[3]) }) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/src/cmd/apply.go new/cli-2.45.0/src/cmd/apply.go --- old/cli-2.44.0/src/cmd/apply.go 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/src/cmd/apply.go 2026-09-10 01:21:38.000000000 +0200 @@ -367,8 +367,7 @@ } jsTemplate := fmt.Sprintf( - `((globalScope)=>((globalScope.rspackChunkclient_web=globalScope.rspackChunkclient_web||globalScope.webpackChunkclient_web||[]),(globalScope.webpackChunkclient_web=globalScope.webpackChunkclient_web||globalScope.rspackChunkclient_web))) -("undefined"!=typeof self?self:global).push([["%s"],{"%s":(e,t,n)=>{ + `((e)=>{const t=e.rspackChunk||e.rspackChunkclient_web||e.webpackChunkclient_web||[];return e.rspackChunk=e.rspackChunk||t,e.rspackChunkclient_web=e.rspackChunkclient_web||t,e.webpackChunkclient_web=e.webpackChunkclient_web||t,t})("undefined"!=typeof self?self:globalThis).push([["%s"],{"%s":(e,t,n)=>{ "use strict";n.r(t),n.d(t,{default:()=>render}); %s }}]);`, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/src/cmd/config.go new/cli-2.45.0/src/cmd/config.go --- old/cli-2.44.0/src/cmd/config.go 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/src/cmd/config.go 2026-09-10 01:21:38.000000000 +0200 @@ -20,9 +20,7 @@ switch field { case "extensions", "custom_apps": arrayType(featureSection, field, value) - case "spotify_launch_flags": - // not editable via config command - case "prefs_path", "spotify_path", "current_theme", "color_scheme": + case "prefs_path", "spotify_path", "current_theme", "color_scheme", "spotify_launch_flags": stringType(settingSection, field, value) default: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/src/jsHelper/spicetifyWrapper/popup.js new/cli-2.45.0/src/jsHelper/spicetifyWrapper/popup.js --- old/cli-2.44.0/src/jsHelper/spicetifyWrapper/popup.js 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/src/jsHelper/spicetifyWrapper/popup.js 2026-09-10 01:21:38.000000000 +0200 @@ -1,3 +1,22 @@ +function injectStyles() { + if (document.querySelector("style.spicetify-popup-modal")) return; + + const style = document.createElement("style"); + style.className = "spicetify-popup-modal"; + style.textContent = ` +generic-modal :where(.spicetify-popup) { display: flex; max-height: calc(100vh - 64px); border-radius: 8px; overflow: hidden; } +generic-modal :where(.spicetify-popup-container) { display: flex; flex-direction: column; width: 524px; max-width: 100%; min-height: 0; border-radius: 8px; color: var(--spice-text, var(--text-base, #fff)); background-color: var(--spice-player, var(--background-elevated-base, #121212)); } +generic-modal :where(.spicetify-popup-container-large) { width: 664px; } +generic-modal :where(.spicetify-popup-header) { display: flex; flex: 0 0 auto; align-items: center; justify-content: space-between; gap: 16px; padding: 24px; } +generic-modal :where(.spicetify-popup-title) { margin: 0; font-size: 1.5rem; font-weight: 700; line-height: 1.3; } +generic-modal :where(.spicetify-popup-closeBtn) { display: flex; flex: 0 0 auto; align-items: center; justify-content: center; width: 32px; height: 32px; padding: 0; margin-block-start: -8px; margin-inline-end: -8px; border: 0; border-radius: 50%; background-color: transparent; color: var(--spice-subtext, var(--text-subdued, #b3b3b3)); cursor: pointer; } +generic-modal :where(.spicetify-popup-closeBtn:hover) { color: var(--spice-text, var(--text-base, #fff)); } +generic-modal :where(.spicetify-popup-closeBtn:focus-visible) { outline: 2px solid currentColor; outline-offset: 2px; } +generic-modal :where(.spicetify-popup-content) { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 0 24px 24px; } +`; + document.head.append(style); +} + class _HTMLGenericModal extends HTMLElement { hide() { Spicetify.ReactDOM.unmountComponentAtNode(this.querySelector("main")); @@ -5,15 +24,21 @@ } display({ title, content, isLarge = false }) { + injectStyles(); + + const containerClass = isLarge + ? "spicetify-popup-container spicetify-popup-container-large main-embedWidgetGenerator-container" + : "spicetify-popup-container main-trackCreditsModal-container"; + this.innerHTML = ` <div class="GenericModal__overlay" style="z-index: 100;"> - <div class="GenericModal" tabindex="-1" role="dialog" aria-label="${title}" aria-modal="true"> - <div class="${isLarge ? "main-embedWidgetGenerator-container" : "main-trackCreditsModal-container"}"> - <div class="main-trackCreditsModal-header"> - <h1 class="main-type-alto" as="h1">${title}</h1> - <button aria-label="Close" class="main-trackCreditsModal-closeBtn"><svg width="18" height="18" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><title>Close</title><path d="M31.098 29.794L16.955 15.65 31.097 1.51 29.683.093 15.54 14.237 1.4.094-.016 1.508 14.126 15.65-.016 29.795l1.414 1.414L15.54 17.065l14.144 14.143" fill="currentColor" fill-rule="evenodd"></path></svg></button> + <div class="GenericModal spicetify-popup" tabindex="-1" role="dialog" aria-label="${title}" aria-modal="true"> + <div class="${containerClass}"> + <div class="spicetify-popup-header main-trackCreditsModal-header"> + <h1 class="spicetify-popup-title main-type-alto" as="h1">${title}</h1> + <button aria-label="Close" class="spicetify-popup-closeBtn main-trackCreditsModal-closeBtn"><svg width="18" height="18" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><title>Close</title><path d="M31.098 29.794L16.955 15.65 31.097 1.51 29.683.093 15.54 14.237 1.4.094-.016 1.508 14.126 15.65-.016 29.795l1.414 1.414L15.54 17.065l14.144 14.143" fill="currentColor" fill-rule="evenodd"></path></svg></button> </div> - <div class="main-trackCreditsModal-mainSection"> + <div class="spicetify-popup-content main-trackCreditsModal-mainSection"> <main class="main-trackCreditsModal-originalCredits"></main> </div> </div> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/src/jsHelper/spicetifyWrapper/webpack/runtime-resolvers.js new/cli-2.45.0/src/jsHelper/spicetifyWrapper/webpack/runtime-resolvers.js --- old/cli-2.44.0/src/jsHelper/spicetifyWrapper/webpack/runtime-resolvers.js 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/src/jsHelper/spicetifyWrapper/webpack/runtime-resolvers.js 2026-09-10 01:21:38.000000000 +0200 @@ -127,7 +127,7 @@ Spicetify.ReactQuery.useInfiniteQuery = Object.values(require(infiniteQueryChunk[0])).find((m) => typeof m === "function"); } - if (Spicetify.Color) Spicetify.Color.CSSFormat = modules.find((m) => m?.RGBA); + if (Spicetify.Color) Spicetify.Color.CSSFormat = modules.find((m) => typeof m?.RGBA === "number"); // Combine snackbar and notification (function bindShowNotification(attempt = 0) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/src/jsHelper/spicetifyWrapper/webpack.js new/cli-2.45.0/src/jsHelper/spicetifyWrapper/webpack.js --- old/cli-2.44.0/src/jsHelper/spicetifyWrapper/webpack.js 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/src/jsHelper/spicetifyWrapper/webpack.js 2026-09-10 01:21:38.000000000 +0200 @@ -9,7 +9,7 @@ import { waitForURI } from "./webpack/uri.js"; void (async function hotloadWebpackModules() { - const getChunkQueue = () => window?.webpackChunkclient_web || window?.rspackChunkclient_web; + const getChunkQueue = () => window?.rspackChunk || window?.rspackChunkclient_web || window?.webpackChunkclient_web; const chunkQueue = await waitFor(getChunkQueue, 50); // Force all webpack modules to load diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cli-2.44.0/src/preprocess/preprocess.go new/cli-2.45.0/src/preprocess/preprocess.go --- old/cli-2.44.0/src/preprocess/preprocess.go 2026-07-05 00:54:22.000000000 +0200 +++ new/cli-2.45.0/src/preprocess/preprocess.go 2026-09-10 01:21:38.000000000 +0200 @@ -252,7 +252,7 @@ } // to avoid syntaxerror on Spotify 1.2.78 and above - if spotifyMajor >= 1 && spotifyMinor >= 2 && spotifyPatch < 78 { + if spotifyMajor == 1 && spotifyMinor == 2 && spotifyPatch < 78 { utils.ReplaceOnce(&content, `\(\({[^}]*,\s*imageSrc`, func(submatches ...string) string { return fmt.Sprintf("Spicetify.Snackbar.enqueueImageSnackbar=%s", submatches[0]) }) @@ -296,7 +296,7 @@ } if fileName == "xpui.css" || fileName == "xpui-snapshot.css" { content = content + ` -.main-gridContainer-fixedWidth{grid-template-columns:repeat(auto-fill,var(--column-width));width:calc((var(--column-count) - 1) * var(--grid-gap)) + var(--column-count) * var(--column-width) )}.main-cardImage-imageWrapper{background-color:var(--card-color,#333);border-radius:6px;-webkit-box-shadow:0 8px 24px rgba(0,0,0,.5);box-shadow:0 8px 24px rgba(0,0,0,.5);padding-bottom:100%;position:relative;width:100%}.main-card-imagePlaceholder,.main-cardImage-image{height:100%;left:0;position:absolute;top:0;width:100%}.main-card-card{border-radius:8px;-webkit-box-flex:1;background:var(--spice-player);-ms-flex:1;flex:1;isolation:isolate;padding:16px;position:relative;-webkit-transition:background-color .3s;transition:background-color .3s;width:100%}.main-card-card:hover,.main-card-card[data-context-menu-open=true]{background:var(--spice-card)}.main-card-card:focus-within{background:var(--spice-card)}.main-card-card .main-card-cardLink{position:absolute;z-index:0}.RjYPjR7FsVf42b3a5Efm:before,. Z78JmW4GUvvxLXSFjb7R:not(:last-child):after{content:"•";margin:0 4px}.main-card-card a,.main-card-card button{position:relative;z-index:1}.main-card-cardLink{bottom:0;content:"";cursor:pointer;left:0;overflow:hidden;right:0;text-indent:100%;top:0;white-space:nowrap;z-index:0}.main-card-cardTitle{z-index:1}.main-card-cardTitleLink:focus,.main-card-cardTitleLink:hover{text-decoration:none}.Wmr5qZ5jui6X37XCrChA{opacity:0}.main-card-newEpisodeIndicator{margin-top:3px}.main-card-imageContainer{pointer-events:none;position:relative}.main-card-imageContainerOld,.main-card-imageContainerSkeleton{margin-bottom:16px}.main-card-cardMetadata{min-height:62px;-webkit-line-clamp:2}.main-card-DownloadStatusIndicator{bottom:12px;inset-inline-end:12px;position:absolute}.main-card-PlayButtonContainer{border-radius:500px;bottom:8px;-webkit-box-shadow:0 8px 8px rgba(var(--spice-rgb-shadow),.3);box-shadow:0 8px 8px rgba(var(--spice-rgb-shadow),.3);inset-inline-end:8px;opacity:0;pointer-events:none; position:absolute;-webkit-transform:translateY(8px);transform:translateY(8px);z-index:2}@media(pointer:coarse){.main-card-PlayButtonContainer{display:none}}@media(prefers-reduced-motion:no-preference){.main-card-PlayButtonContainer{-webkit-transition:opacity .2s ease-out,-webkit-transform .2s ease-out;transition:transform .2s ease-out,opacity .2s ease-out,-webkit-transform .2s ease-out}}.main-card-PlayButtonContainerVisible{opacity:1;pointer-events:auto;position:absolute;-webkit-transform:translateY(0);transform:translateY(0)}.main-card-cardContainer{--animation-speed:0.2s!important;white-space:normal}.main-card-card:hover .main-card-PlayButtonContainer,.main-card-cardContainer:hover .main-card-PlayButtonContainer{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}.main-card-card:focus-within .main-card-PlayButtonContainer,.main-card-cardContainer:focus-within{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}@media(pointer:fine){.main-card-card .main- card-cardLink:hover{cursor:pointer}.main-card-card:hover .main-card-PlayButtonContainer,.main-card-cardContainer:hover .main-card-PlayButtonContainer{opacity:1;pointer-events:auto;position:absolute}.main-card-card:focus-within .main-card-PlayButtonContainer,.main-card-cardContainer:focus-within .main-card-PlayButtonContainer{opacity:1;pointer-events:auto;position:absolute}}.main-card-cardMetadata,.v3isO2phyJAoZRkmme0G{display:-webkit-box;-webkit-box-orient:vertical} + .main-gridContainer-fixedWidth{grid-template-columns:repeat(auto-fill,var(--column-width));width:calc((var(--column-count) - 1) * var(--grid-gap) + var(--column-count) * var(--column-width))}.main-cardImage-imageWrapper{background-color:var(--card-color,#333);border-radius:var(--card-image-radius,6px);box-shadow:0 8px 24px rgba(0,0,0,.5);padding-bottom:100%;position:relative;width:100%}.main-cardImage-circular{--card-image-radius:50%}.main-card-imagePlaceholder,.main-cardImage-image{height:100%;left:0;position:absolute;top:0;width:100%}.main-card-card{border-radius:8px;-webkit-box-flex:1;background:var(--spice-player);-ms-flex:1;flex:1;isolation:isolate;padding:16px;position:relative;-webkit-transition:background-color .3s;transition:background-color .3s;width:100%}.main-card-card:hover,.main-card-card[data-context-menu-open=true]{background:var(--spice-card)}.main-card-card:focus-within{background:var(--spice-card)}.main-card-card .main-card-cardLink{position:absolute;z-index :0}.RjYPjR7FsVf42b3a5Efm:before,.Z78JmW4GUvvxLXSFjb7R:not(:last-child):after{content:"\2022";margin:0 4px}.main-card-card a,.main-card-card button{position:relative;z-index:1}.main-card-cardLink{bottom:0;content:"";cursor:pointer;left:0;overflow:hidden;right:0;text-indent:100%;top:0;white-space:nowrap;z-index:0}.main-card-cardTitle{z-index:1}.main-card-cardTitleLink:focus,.main-card-cardTitleLink:hover{text-decoration:none}.Wmr5qZ5jui6X37XCrChA{opacity:0}.main-card-newEpisodeIndicator{margin-top:3px}.main-card-imageContainer{pointer-events:none;position:relative}.main-card-imageContainerOld,.main-card-imageContainerSkeleton{margin-bottom:16px}.main-card-cardMetadata{min-height:62px;line-clamp:2;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis}.main-card-DownloadStatusIndicator{bottom:12px;inset-inline-end:12px;position:absolute}.main-card-PlayButtonContainer{border-radius:500px;bottom:8px;-webkit-box-shadow:0 8px 8px rgba(var(--spice-rgb-shadow),.3);box-shadow:0 8px 8px r gba(var(--spice-rgb-shadow),.3);inset-inline-end:8px;opacity:0;pointer-events:none;position:absolute;-webkit-transform:translateY(8px);transform:translateY(8px);z-index:2}@media(pointer:coarse){.main-card-PlayButtonContainer{display:none}}@media(prefers-reduced-motion:no-preference){.main-card-PlayButtonContainer{-webkit-transition:opacity .2s ease-out,-webkit-transform .2s ease-out;transition:transform .2s ease-out,opacity .2s ease-out,-webkit-transform .2s ease-out}}.main-card-PlayButtonContainerVisible{opacity:1;pointer-events:auto;position:absolute;-webkit-transform:translateY(0);transform:translateY(0)}.main-card-cardContainer{--animation-speed:0.2s!important;white-space:normal}.main-card-card:hover .main-card-PlayButtonContainer,.main-card-cardContainer:hover .main-card-PlayButtonContainer{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}.main-card-card:focus-within .main-card-PlayButtonContainer,.main-card-cardContainer:focus-within{opacity:1;-webkit-transfor m:translateY(0);transform:translateY(0)}@media(pointer:fine){.main-card-card .main-card-cardLink:hover{cursor:pointer}.main-card-card:hover .main-card-PlayButtonContainer,.main-card-cardContainer:hover .main-card-PlayButtonContainer{opacity:1;pointer-events:auto;position:absolute}.main-card-card:focus-within .main-card-PlayButtonContainer,.main-card-cardContainer:focus-within .main-card-PlayButtonContainer{opacity:1;pointer-events:auto;position:absolute}}.main-card-cardMetadata,.v3isO2phyJAoZRkmme0G{display:-webkit-box;-webkit-box-orient:vertical} ` } return content @@ -345,6 +345,20 @@ } func colorVariableReplace(content string) string { + hexAlphaReplacement := func(maxValue float64) func(submatches ...string) string { + return func(submatches ...string) string { + alpha, err := strconv.ParseUint(submatches[1], 16, 8) + if err != nil { + return submatches[0] + } + + return fmt.Sprintf( + "rgba(var(--spice-rgb-text),%s)", + strconv.FormatFloat(float64(alpha)/maxValue, 'f', -1, 64), + ) + } + } + colorPatches := []Patch{ { Name: "CSS: --spice-player", @@ -403,6 +417,16 @@ }, }, { + Name: "CSS: --spice-rgb-text (8-digit hex)", + Regex: `(?i)#ffffff([0-9a-f]{2})\b`, + Replacement: hexAlphaReplacement(255), + }, + { + Name: "CSS: --spice-rgb-text (4-digit hex)", + Regex: `(?i)#fff([0-9a-f])\b`, + Replacement: hexAlphaReplacement(15), + }, + { Name: "CSS: --spice-text", Regex: `(white;|#fff|#ffffff|#f8f8f8)\b`, Replacement: func(submatches ...string) string { @@ -466,6 +490,13 @@ }, }, { + Name: "CSS (rgba): --spice-rgb-text", + Regex: `(?i)rgba\(\s*255\s*,\s*255\s*,\s*255\s*,`, + Replacement: func(submatches ...string) string { + return "rgba(var(--spice-rgb-text)," + }, + }, + { Name: "CSS (rgba): --spice-main", Regex: `rgba\(18,18,18,([\d\.]+)\)`, Replacement: func(submatches ...string) string { ++++++ cli.obsinfo ++++++ --- /var/tmp/diff_new_pack.QOqGDX/_old 2026-09-11 18:06:25.771626570 +0200 +++ /var/tmp/diff_new_pack.QOqGDX/_new 2026-09-11 18:06:25.773626654 +0200 @@ -1,5 +1,5 @@ name: cli -version: 2.44.0 -mtime: 1783205662 -commit: e1f66811a635557cabbd8726cf0bcc5c3ce2b084 +version: 2.45.0 +mtime: 1788996098 +commit: 0eb878e0ef981623f86fa3252dd830a5990847fb ++++++ vendor.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/syscall_linux.go new/vendor/golang.org/x/sys/unix/syscall_linux.go --- old/vendor/golang.org/x/sys/unix/syscall_linux.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/syscall_linux.go 2026-09-10 01:21:38.000000000 +0200 @@ -1874,6 +1874,7 @@ //sys Dup3(oldfd int, newfd int, flags int) (err error) //sysnb EpollCreate1(flag int) (fd int, err error) //sysnb EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT //sys Eventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD2 //sys Exit(code int) = SYS_EXIT_GROUP //sys Fallocate(fd int, mode uint32, off int64, len int64) (err error) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/syscall_linux_386.go new/vendor/golang.org/x/sys/unix/syscall_linux_386.go --- old/vendor/golang.org/x/sys/unix/syscall_linux_386.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/syscall_linux_386.go 2026-09-10 01:21:38.000000000 +0200 @@ -20,7 +20,6 @@ // 64-bit file system and 32-bit uid calls // (386 default is 32-bit file system and 16-bit uid). -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64_64 //sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 //sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go new/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go --- old/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go 2026-09-10 01:21:38.000000000 +0200 @@ -6,7 +6,6 @@ package unix -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) //sys Fstat(fd int, stat *Stat_t) (err error) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/syscall_linux_arm.go new/vendor/golang.org/x/sys/unix/syscall_linux_arm.go --- old/vendor/golang.org/x/sys/unix/syscall_linux_arm.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/syscall_linux_arm.go 2026-09-10 01:21:38.000000000 +0200 @@ -44,7 +44,6 @@ // 64-bit file system and 32-bit uid calls // (16-bit uid calls are not always supported in newer kernels) -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 //sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 //sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go new/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go --- old/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go 2026-09-10 01:21:38.000000000 +0200 @@ -8,7 +8,6 @@ import "unsafe" -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) //sys Fstat(fd int, stat *Stat_t) (err error) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go new/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go --- old/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go 2026-09-10 01:21:38.000000000 +0200 @@ -8,7 +8,6 @@ import "unsafe" -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) //sys Fstatfs(fd int, buf *Statfs_t) (err error) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go new/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go --- old/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go 2026-09-10 01:21:38.000000000 +0200 @@ -6,7 +6,6 @@ package unix -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) //sys Fstatfs(fd int, buf *Statfs_t) (err error) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go new/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go --- old/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go 2026-09-10 01:21:38.000000000 +0200 @@ -13,7 +13,6 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) //sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go new/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go --- old/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go 2026-09-10 01:21:38.000000000 +0200 @@ -11,7 +11,6 @@ "unsafe" ) -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Fchown(fd int, uid int, gid int) (err error) //sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 //sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go new/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go --- old/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go 2026-09-10 01:21:38.000000000 +0200 @@ -6,7 +6,6 @@ package unix -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) //sys Fstat(fd int, stat *Stat_t) (err error) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go new/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go --- old/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go 2026-09-10 01:21:38.000000000 +0200 @@ -8,7 +8,6 @@ import "unsafe" -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) //sys Fstat(fd int, stat *Stat_t) (err error) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go new/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go --- old/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go 2026-09-10 01:21:38.000000000 +0200 @@ -10,7 +10,6 @@ "unsafe" ) -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) //sys Fstat(fd int, stat *Stat_t) (err error) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go new/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go --- old/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go 2026-09-10 01:21:38.000000000 +0200 @@ -6,7 +6,6 @@ package unix -//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) //sys Fstat(fd int, stat *Stat_t) (err error) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/zerrors_linux.go new/vendor/golang.org/x/sys/unix/zerrors_linux.go --- old/vendor/golang.org/x/sys/unix/zerrors_linux.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/zerrors_linux.go 2026-09-10 01:21:38.000000000 +0200 @@ -1359,6 +1359,7 @@ FAN_UNLIMITED_MARKS = 0x20 FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 + FD_PIDFS_ROOT = -0x2712 FD_SETSIZE = 0x400 FF0 = 0x0 FIB_RULE_DEV_DETACHED = 0x8 @@ -1970,6 +1971,8 @@ MADV_DONTNEED = 0x4 MADV_DONTNEED_LOCKED = 0x18 MADV_FREE = 0x8 + MADV_GUARD_INSTALL = 0x66 + MADV_GUARD_REMOVE = 0x67 MADV_HUGEPAGE = 0xe MADV_HWPOISON = 0x64 MADV_KEEPONFORK = 0x13 @@ -2114,7 +2117,7 @@ MS_NOSEC = 0x10000000 MS_NOSUID = 0x2 MS_NOSYMFOLLOW = 0x100 - MS_NOUSER = -0x80000000 + MS_NOUSER = 0x80000000 MS_POSIXACL = 0x10000 MS_PRIVATE = 0x40000 MS_RDONLY = 0x1 @@ -3786,6 +3789,9 @@ TCPOPT_TIMESTAMP = 0x8 TCPOPT_TSTAMP_HDR = 0x101080a TCPOPT_WINDOW = 0x3 + TCP_AO_KEYF_EXCLUDE_OPT = 0x2 + TCP_AO_KEYF_IFINDEX = 0x1 + TCP_AO_MAXKEYLEN = 0x50 TCP_CC_INFO = 0x1a TCP_CM_INQ = 0x24 TCP_CONGESTION = 0xd diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/zsyscall_linux.go new/vendor/golang.org/x/sys/unix/zsyscall_linux.go --- old/vendor/golang.org/x/sys/unix/zsyscall_linux.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/zsyscall_linux.go 2026-09-10 01:21:38.000000000 +0200 @@ -700,6 +700,23 @@ // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Eventfd(initval uint, flags int) (fd int, err error) { r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) fd = int(r0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go new/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go --- old/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go 2026-09-10 01:21:38.000000000 +0200 @@ -45,23 +45,6 @@ // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice)) if e1 != 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go new/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go --- old/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go 2026-09-10 01:21:38.000000000 +0200 @@ -45,23 +45,6 @@ // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) if e1 != 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go new/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go --- old/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go 2026-09-10 01:21:38.000000000 +0200 @@ -213,23 +213,6 @@ // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go new/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go --- old/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go 2026-09-10 01:21:38.000000000 +0200 @@ -45,23 +45,6 @@ // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) if e1 != 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go new/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go --- old/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go 2026-09-10 01:21:38.000000000 +0200 @@ -45,23 +45,6 @@ // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) if e1 != 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go new/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go --- old/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go 2026-09-10 01:21:38.000000000 +0200 @@ -45,23 +45,6 @@ // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset>>32), uintptr(offset), uintptr(length>>32), uintptr(length), uintptr(advice), 0, 0) if e1 != 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go new/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go --- old/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go 2026-09-10 01:21:38.000000000 +0200 @@ -45,23 +45,6 @@ // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) if e1 != 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go new/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go --- old/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go 2026-09-10 01:21:38.000000000 +0200 @@ -45,23 +45,6 @@ // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) if e1 != 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go new/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go --- old/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go 2026-09-10 01:21:38.000000000 +0200 @@ -45,23 +45,6 @@ // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0) if e1 != 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go new/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go --- old/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go 2026-09-10 01:21:38.000000000 +0200 @@ -45,23 +45,6 @@ // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fchown(fd int, uid int, gid int) (err error) { _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go new/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go --- old/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go 2026-09-10 01:21:38.000000000 +0200 @@ -45,23 +45,6 @@ // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) if e1 != 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go new/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go --- old/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go 2026-09-10 01:21:38.000000000 +0200 @@ -45,23 +45,6 @@ // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) if e1 != 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go new/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go --- old/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go 2026-09-10 01:21:38.000000000 +0200 @@ -45,23 +45,6 @@ // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) if e1 != 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go new/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go --- old/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go 2026-09-10 01:21:38.000000000 +0200 @@ -45,23 +45,6 @@ // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) if e1 != 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go new/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go --- old/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go 2026-09-10 01:21:38.000000000 +0200 @@ -45,23 +45,6 @@ // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - var _p0 unsafe.Pointer - if len(events) > 0 { - _p0 = unsafe.Pointer(&events[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) if e1 != 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/windows/security_windows.go new/vendor/golang.org/x/sys/windows/security_windows.go --- old/vendor/golang.org/x/sys/windows/security_windows.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/windows/security_windows.go 2026-09-10 01:21:38.000000000 +0200 @@ -1109,17 +1109,53 @@ ) // This type is the union inside of TRUSTEE and must be created using one of the TrusteeValueFrom* functions. +// +// Go pointers stored in a TrusteeValue must be pinned using [runtime.Pinner] +// for the lifetime of the TrusteeValue. type TrusteeValue uintptr +// TrusteeValueFromString is unsafe and should not be used. +// +// It returns a uintptr containing a reference to newly-allocated memory +// which will be freed by the garbage collector. +// There is no way for the caller to safely reference this memory. +// +// To create a [TrusteeValue] from a string, use: +// +// p, err := windows.UTF16PtrFromString(s) +// if err != nil { +// // handle error +// } +// +// // Pin the string for as long as it is used. +// var pinner runtime.Pinner +// pinner.Pin(p) +// defer pinner.Unpin() +// +// tv := TrusteeValue(unsafe.Pointer(p)) +// +// Deprecated: TrusteeValueFromString is unsafe and should not be used. func TrusteeValueFromString(str string) TrusteeValue { return TrusteeValue(unsafe.Pointer(StringToUTF16Ptr(str))) } + +// TrusteeValueFromSID returns a [TrusteeValue] referencing sid. +// +// The caller must pin sid using a [runtime.Pinner] for the lifetime of the TrusteeValue. func TrusteeValueFromSID(sid *SID) TrusteeValue { return TrusteeValue(unsafe.Pointer(sid)) } + +// TrusteeValueFromObjectsAndSid returns a [TrusteeValue] referencing objectsAndSid. +// +// The caller must pin objectsAndSid using a [runtime.Pinner] for the lifetime of the TrusteeValue. func TrusteeValueFromObjectsAndSid(objectsAndSid *OBJECTS_AND_SID) TrusteeValue { return TrusteeValue(unsafe.Pointer(objectsAndSid)) } + +// TrusteeValueFromObjectsAndName returns a [TrusteeValue] referencing objectsAndName. +// +// The caller must pin objectsAndName using a [runtime.Pinner] for the lifetime of the TrusteeValue. func TrusteeValueFromObjectsAndName(objectsAndName *OBJECTS_AND_NAME) TrusteeValue { return TrusteeValue(unsafe.Pointer(objectsAndName)) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/windows/syscall_windows.go new/vendor/golang.org/x/sys/windows/syscall_windows.go --- old/vendor/golang.org/x/sys/windows/syscall_windows.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/windows/syscall_windows.go 2026-09-10 01:21:38.000000000 +0200 @@ -1728,11 +1728,15 @@ // the more common *uint16 string type. func NewNTString(s string) (*NTString, error) { var nts NTString - s8, err := BytePtrFromString(s) + s8, err := ByteSliceFromString(s) if err != nil { return nil, err } - RtlInitString(&nts, s8) + // The source string plus its terminating NUL must fit within MAX_USHORT. + if len(s8) > MAX_USHORT { + return nil, syscall.EINVAL + } + RtlInitString(&nts, &s8[0]) return &nts, nil } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/windows/types_windows.go new/vendor/golang.org/x/sys/windows/types_windows.go --- old/vendor/golang.org/x/sys/windows/types_windows.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/sys/windows/types_windows.go 2026-09-10 01:21:38.000000000 +0200 @@ -169,6 +169,7 @@ FORMAT_MESSAGE_ARGUMENT_ARRAY = 8192 FORMAT_MESSAGE_MAX_WIDTH_MASK = 255 + MAX_USHORT = 0xffff MAX_PATH = 260 MAX_LONG_PATH = 32768 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/text/cases/context.go new/vendor/golang.org/x/text/cases/context.go --- old/vendor/golang.org/x/text/cases/context.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/text/cases/context.go 2026-09-10 01:21:38.000000000 +0200 @@ -249,7 +249,7 @@ return c.copy() } -// isUpper writes the isUppercase version of the current rune to dst. +// isUpper reports whether the current rune is in upper case. func isUpper(c *context) bool { ct := c.caseType() if c.info&hasMappingMask == 0 || ct == cUpper { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/text/cases/map.go new/vendor/golang.org/x/text/cases/map.go --- old/vendor/golang.org/x/text/cases/map.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/text/cases/map.go 2026-09-10 01:21:38.000000000 +0200 @@ -774,7 +774,7 @@ // From CLDR: // # Special titlecasing for Dutch initial "ij". // ::Any-Title(); - // # Fix up Ij at the beginning of a "word" (per Any-Title, notUAX #29) + // # Fix up Ij at the beginning of a "word" (per Any-Title, not UAX #29) // [:^WB=ALetter:] [:WB=Extend:]* [[:WB=MidLetter:][:WB=MidNumLet:]]? { Ij } → IJ ; if c.src[c.pSrc] != 'I' && c.src[c.pSrc] != 'i' { return title(c) @@ -794,7 +794,7 @@ // From CLDR: // # Special titlecasing for Dutch initial "ij". // ::Any-Title(); - // # Fix up Ij at the beginning of a "word" (per Any-Title, notUAX #29) + // # Fix up Ij at the beginning of a "word" (per Any-Title, not UAX #29) // [:^WB=ALetter:] [:WB=Extend:]* [[:WB=MidLetter:][:WB=MidNumLet:]]? { Ij } → IJ ; if c.src[c.pSrc] != 'I' { return isTitle(c) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/text/unicode/norm/forminfo.go new/vendor/golang.org/x/text/unicode/norm/forminfo.go --- old/vendor/golang.org/x/text/unicode/norm/forminfo.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/text/unicode/norm/forminfo.go 2026-09-10 01:21:38.000000000 +0200 @@ -121,8 +121,12 @@ // // When all 6 bits are zero, the character is inert, meaning it is never // influenced by normalization. +// +// We set flags to 0x80 (high bit 7 unused in quick check data) to indicate an invalid rune. type qcInfo uint8 +func (p Properties) isInvalid() bool { return p.flags == 0x80 } + func (p Properties) isYesC() bool { return p.flags&0x10 == 0 } func (p Properties) isYesD() bool { return p.flags&0x4 == 0 } @@ -247,6 +251,9 @@ // to a Properties. See the comment at the top of the file // for more information on the format. func compInfo(v uint16, sz int) Properties { + if sz == 0 { + return Properties{flags: 0x80, size: 1} + } if v == 0 { return Properties{size: uint8(sz)} } else if v >= 0x8000 { @@ -254,7 +261,7 @@ size: uint8(sz), ccc: uint8(v), tccc: uint8(v), - flags: qcInfo(v >> 8), + flags: qcInfo(v>>8) & 0x3f, } if p.ccc > 0 || p.combinesBackward() { p.nLead = uint8(p.flags & 0x3) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/text/unicode/norm/iter.go new/vendor/golang.org/x/text/unicode/norm/iter.go --- old/vendor/golang.org/x/text/unicode/norm/iter.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/text/unicode/norm/iter.go 2026-09-10 01:21:38.000000000 +0200 @@ -376,16 +376,12 @@ goto doNorm } prevCC = i.info.tccc - sz := int(i.info.size) - if sz == 0 { - sz = 1 // illegal rune: copy byte-by-byte - } - p := outp + sz + p := outp + int(i.info.size) if p > len(i.buf) { break } outp = p - i.p += sz + i.p += int(i.info.size) if i.p >= i.rb.nsrc { i.setDone() break diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/text/unicode/norm/normalize.go new/vendor/golang.org/x/text/unicode/norm/normalize.go --- old/vendor/golang.org/x/text/unicode/norm/normalize.go 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/golang.org/x/text/unicode/norm/normalize.go 2026-09-10 01:21:38.000000000 +0200 @@ -148,7 +148,7 @@ // patched buffer and whether the decomposition is still in progress. func patchTail(rb *reorderBuffer) bool { info, p := lastRuneStart(&rb.f, rb.out) - if p == -1 || info.size == 0 { + if p == -1 || info.isInvalid() { return true } end := p + int(info.size) @@ -225,7 +225,7 @@ } fd := &rb.f if doMerge { - var info Properties + info := Properties{flags: 0x80, size: 1} // invalid rune if p < n { info = fd.info(src, p) if !info.BoundaryBefore() || info.nLeadingNonStarters() > 0 { @@ -235,7 +235,7 @@ p = decomposeSegment(rb, p, true) } } - if info.size == 0 { + if info.isInvalid() { rb.doFlush() // Append incomplete UTF-8 encoding. return src.appendSlice(rb.out, p, n) @@ -314,7 +314,7 @@ continue } info := f.info(src, i) - if info.size == 0 { + if info.isInvalid() { if atEOF { // include incomplete runes return n, true @@ -379,7 +379,7 @@ // CGJ insertion points correctly. Luckily it doesn't have to. for { info := fd.info(src, i) - if info.size == 0 { + if info.isInvalid() { return -1 } if s := ss.next(info); s != ssSuccess { @@ -424,7 +424,7 @@ } fd := formTable[f] info := fd.info(src, 0) - if info.size == 0 { + if info.isInvalid() { if atEOF { return 1 } @@ -435,7 +435,7 @@ for i := int(info.size); i < nsrc; i += int(info.size) { info = fd.info(src, i) - if info.size == 0 { + if info.isInvalid() { if atEOF { return i } @@ -465,7 +465,7 @@ if p == -1 { return -1 } - if info.size == 0 { // ends with incomplete rune + if info.isInvalid() { // ends with incomplete rune if p == 0 { // starts with incomplete rune return -1 } @@ -504,7 +504,7 @@ func decomposeSegment(rb *reorderBuffer, sp int, atEOF bool) int { // Force one character to be consumed. info := rb.f.info(rb.src, sp) - if info.size == 0 { + if info.isInvalid() { return 0 } if s := rb.ss.next(info); s == ssStarter { @@ -528,7 +528,7 @@ break } info = rb.f.info(rb.src, sp) - if info.size == 0 { + if info.isInvalid() { if !atEOF { return int(iShortSrc) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/modules.txt new/vendor/modules.txt --- old/vendor/modules.txt 2026-07-05 00:54:22.000000000 +0200 +++ new/vendor/modules.txt 2026-09-10 01:21:38.000000000 +0200 @@ -42,18 +42,18 @@ # github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e ## explicit; go 1.19 github.com/xo/terminfo -# golang.org/x/net v0.56.0 +# golang.org/x/net v0.57.0 ## explicit; go 1.25.0 golang.org/x/net/websocket -# golang.org/x/sys v0.46.0 +# golang.org/x/sys v0.47.0 ## explicit; go 1.25.0 golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows -# golang.org/x/term v0.44.0 +# golang.org/x/term v0.45.0 ## explicit; go 1.25.0 golang.org/x/term -# golang.org/x/text v0.38.0 +# golang.org/x/text v0.40.0 ## explicit; go 1.25.0 golang.org/x/text/cases golang.org/x/text/internal
