Sync launcher: stop phantom update prompt, forum News panel, hardware-aware render distance
Build check / build (push) Has been cancelled

Squashed sync from upstream. Highlights:
- Updater no longer reports already-applied deletes as a pending update on
  every launch (guard the del branch on the target still existing)
- Derive the packaged CSP image origin from the configured server URL
- Forum Announcements panel + News tab; hardware-aware farClip recommendation;
  parchment UI; localization and tweak updates
- Addon source refresh; schema and mod-state fixes

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
OctoWoW
2026-07-04 16:02:46 -07:00
parent 16e442ea0f
commit fbad749f0c
35 changed files with 763 additions and 56 deletions
-1
View File
@@ -112,7 +112,6 @@ const giteaProvider: Provider = {
)}`
};
// only allow known git hosts over https
const parseGitUrl = (
git: string
): { owner: string; repo: string; provider: Provider } => {
+3 -2
View File
@@ -231,8 +231,9 @@ export const defaultSources: AddonSource[] = [
description: 'Smart consolidated buff frames with extensive customization'
},
{
git: 'https://github.com/acolis/VitalWatch.git',
description: 'Customizable health, mana, and aggro alert system for solo, group, and raid play'
git: 'https://octowow.st/git/shaga/LifeSafer_LowHealthWarning.git',
branch: 'main',
description: 'Low health and mana fullscreen flash warnings with heartbeat sound; re-enables the hidden Blizzard alert effect'
},
{
git: 'https://github.com/Fiurs-Hearth/WIIIUI.git',
+6 -1
View File
@@ -24,7 +24,12 @@ const skipFiles = new Set([
'.manifest-overrides.json'
]);
const skipPatterns: RegExp[] = [/\.bak(\.|$)/, /\.crashing(\.|$)/];
const skipPatterns: RegExp[] = [
/\.bak([.\-]|$)/,
/\.crashing(\.|$)/,
/\.torrent$/,
/^manifest\.json\./
];
const isSkipPattern = (file: string) => skipPatterns.some(p => p.test(file));
const skipDirsPosix = new Set([
-1
View File
@@ -79,7 +79,6 @@ app.get(
const filePath = req.params[0];
console.log(`Fetching file: ${filePath}`);
// keep the resolved path inside SourceDir
const root = path.resolve(SourceDir);
const target = path.resolve(SourceDir, filePath);
if (target !== root && !target.startsWith(root + path.sep)) {