💋 Sync 2026-07-26 20:25:59

This commit is contained in:
github-actions[bot] 2026-07-26 20:25:59 +08:00
parent 6efc8c18ce
commit 4069ab0119
19 changed files with 164 additions and 102 deletions

View File

@ -5,10 +5,10 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=dae
PKG_VERSION:=2026.07.22
PKG_RELEASE:=21
PKG_VERSION:=2026.07.26
PKG_RELEASE:=22
PKG_SOURCE:=dae-src-2026.07.22-1ff7a6abc0ad.tar.gz
PKG_SOURCE:=dae-src-2026.07.26-92a3fbf117a3.tar.gz
PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-daede/releases/download/dae-src
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_HASH:=skip

View File

@ -5,10 +5,10 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=daed
PKG_VERSION:=2026.07.22
PKG_RELEASE:=29
PKG_VERSION:=2026.07.26
PKG_RELEASE:=30
PKG_SOURCE:=daed-src-2026.07.22-4a6a3994ced1.tar.gz
PKG_SOURCE:=daed-src-2026.07.26-ecbc5c99d632.tar.gz
PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-daede/releases/download/daed-src
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_HASH:=skip

View File

@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall2
PKG_VERSION:=26.7.16
PKG_RELEASE:=65
PKG_RELEASE:=66
PKG_PO_VERSION:=$(PKG_VERSION)
PKG_CONFIG_DEPENDS:= \

View File

@ -409,6 +409,7 @@ ln_run() {
run_process_queue() {
[ -d ${TMP_PROCESS_LIST_PATH} ] && {
mkdir -p ${TMP_SCRIPT_FUNC_PATH}
for filename in $(ls ${TMP_PROCESS_LIST_PATH}); do
cmd=$(cat ${TMP_PROCESS_LIST_PATH}/${filename})
cmd_check=$(echo $cmd | awk -F '>' '{print $1}')
@ -416,7 +417,7 @@ run_process_queue() {
if [ $icount = 0 ]; then
eval $(echo "nohup ${cmd} 2>&1 &") >/dev/null 2>&1 &
fi
rm -rf ${TMP_PROCESS_LIST_PATH}/${filename}
mv -f ${TMP_PROCESS_LIST_PATH}/${filename} ${TMP_SCRIPT_FUNC_PATH}/queued_${filename}
done
}
rm -rf ${TMP_PROCESS_LIST_PATH}

View File

@ -1398,6 +1398,21 @@ Network = baseclass.extend(/** @lends LuCI.network.prototype */ {
}, this));
},
/**
* Obtain configured radio devices without querying runtime state.
*
* @returns {Array<LuCI.network.WifiDevice>}
* Returns radio instances populated from UCI only.
*/
getWifiDevicesFromConfig() {
const rv = [];
for (const wfd of uci.sections('wireless', 'wifi-device'))
rv.push(this.instantiateWifiDevice(wfd['.name'], {}));
return rv;
},
/**
* Get a {@link LuCI.network.WifiNetwork WifiNetwork} instance describing
* the given wireless network.
@ -1443,6 +1458,30 @@ Network = baseclass.extend(/** @lends LuCI.network.prototype */ {
}, this));
},
/**
* Obtain configured wireless networks without querying runtime state.
*
* @returns {Array<LuCI.network.WifiNetwork>}
* Returns wireless network instances populated from UCI only.
*/
getWifiNetworksFromConfig() {
const rv = [];
for (const wifiIface of uci.sections('wireless', 'wifi-iface')) {
const sid = wifiIface['.name'];
const netid = getWifiNetidBySid(sid);
rv.push(this.instantiateWifiNetwork(sid, wifiIface.device, {},
L.toArray(netid)[0], null));
}
rv.sort(function(a, b) {
return L.naturalCompare(a.getID(), b.getID());
});
return rv;
},
/**
* Adds a new wireless network to the configuration and sets its options
* to the provided values.
@ -3579,7 +3618,7 @@ WifiDevice = baseclass.extend(/** @lends LuCI.network.WifiDevice.prototype */ {
* Returns `true` when the radio device is up, else `false`.
*/
isUp() {
if (L.isObject(_state.radios[this.sid]))
if (_state != null && L.isObject(_state.radios[this.sid]))
return (_state.radios[this.sid].up == true);
return false;
@ -3930,6 +3969,9 @@ WifiNetwork = baseclass.extend(/** @lends LuCI.network.WifiNetwork.prototype */
* Returns `true` when the network is up, else `false`.
*/
isUp() {
if (_state == null)
return false;
const device = this.getDevice();
if (device == null)

View File

@ -40,6 +40,8 @@ let cachedIwinfoInfoMap = null;
let cachedIwinfoInfoPromise = null;
let cachedIwinfoResolver = null;
let cachedIwinfoResolverPromise = null;
let cachedAssocLists = Object.create(null);
let pendingAssocLists = Object.create(null);
function pushUnique(list, value) {
if (value && list.indexOf(value) < 0)
@ -189,15 +191,12 @@ function buildIwinfoResolver(devices) {
}
function loadIwinfoResolver(force) {
if (force)
cachedIwinfoResolverPromise = null;
if (cachedIwinfoResolverPromise != null)
return cachedIwinfoResolverPromise;
if (!force && cachedIwinfoResolver != null)
return Promise.resolve(cachedIwinfoResolver);
if (cachedIwinfoResolverPromise != null)
return cachedIwinfoResolverPromise;
cachedIwinfoResolverPromise = L.resolveDefault(callIwinfoDevices(), {}).then((res) => {
cachedIwinfoResolver = buildIwinfoResolver(res?.devices);
cachedIwinfoResolverPromise = null;
@ -221,15 +220,12 @@ function loadIwinfoResolver(force) {
}
function loadIwinfoInfoMap(force) {
if (force)
cachedIwinfoInfoPromise = null;
if (cachedIwinfoInfoPromise != null)
return cachedIwinfoInfoPromise;
if (!force && cachedIwinfoInfoMap != null)
return Promise.resolve(cachedIwinfoInfoMap);
if (cachedIwinfoInfoPromise != null)
return cachedIwinfoInfoPromise;
cachedIwinfoInfoPromise = loadIwinfoResolver(force).then((resolver) => {
const queryTargets = resolver.queryTargets.length ? resolver.queryTargets : getLegacyIwinfoProbeTargets();
@ -289,6 +285,10 @@ function refreshIwinfoInfoMap() {
return loadIwinfoInfoMap(true);
}
function startIwinfoInfoRefresh() {
refreshIwinfoInfoMap().catch(() => {});
}
function count_changes(section_id) {
const changes = ui.changes.changes?.wireless;
if (!Array.isArray(changes)) return 0;
@ -570,6 +570,8 @@ function getDisplayChannel(radioNet) {
if (channel != null && channel !== '' && channel !== 'auto')
return +channel;
if (channel == 'auto')
return channel;
return null;
}
@ -1178,6 +1180,20 @@ function getAssocListForNetwork(radioNet) {
}));
}
function getCachedAssocListForNetwork(radioNet) {
const key = radioNet.getName();
if (pendingAssocLists[key] == null) {
pendingAssocLists[key] = getAssocListForNetwork(radioNet).then((entries) => {
cachedAssocLists[key] = Array.isArray(entries) ? entries : [];
}).catch(() => {}).then(() => {
delete pendingAssocLists[key];
});
}
return Promise.resolve(cachedAssocLists[key] || []);
}
function isDisplayAssociated(radioNet, hwtype, mode, bssid, channel, disabled) {
if (bssid && bssid != '00:00:00:00:00:00' && channel && mode != 'Unknown' && !disabled)
return true;
@ -1202,7 +1218,7 @@ function getDisplaySignalPercent(radioNet, hwtype, is_assoc, disabled) {
function getDisplaySignalValue(radioNet, hwtype, is_assoc) {
if ((hwtype == 'mt_dbdc' || (isQcaWifiHwtype(hwtype) && radioNet.getMode() == 'ap')) && is_assoc)
return getDisplayTxPower(radioNet);
return getDisplayTxPower(radioNet) ?? 30;
return radioNet.getSignal();
}
@ -2424,7 +2440,7 @@ return view.extend({
callSystemBoard()
]).then((data) => {
this.boardinfo = data[4] || {};
return refreshIwinfoInfoMap().then(() => data);
return data;
});
},
@ -2488,25 +2504,12 @@ return view.extend({
s.addremove = false;
s.load = function() {
return network.getWifiDevices().then(L.bind(function(radios) {
this.radios = radios.sort(function(a, b) {
this.radios = network.getWifiDevicesFromConfig().sort(function(a, b) {
return a.getName() > b.getName();
});
this.wifis = network.getWifiNetworksFromConfig();
const tasks = [];
radios.forEach(radio => {
tasks.push(radio.getWifiNetworks());
});
return Promise.all(tasks);
}, this)).then(L.bind(function(data) {
this.wifis = [];
data.forEach(d => {
this.wifis.push.apply(this.wifis, d);
});
}, this));
return Promise.resolve();
};
s.cfgsections = function() {
@ -4644,7 +4647,9 @@ return view.extend({
return m.render().then(L.bind(function(m, nodes) {
poll.add(L.bind(function() {
const tasks = [ network.getHostHints(), network.getWifiDevices(), refreshIwinfoInfoMap() ];
const tasks = [ network.getHostHints(), network.getWifiDevices() ];
startIwinfoInfoRefresh();
m?.children[0]?.cfgsections?.().forEach(s => {
const row = nodes.querySelector('.cbi-section-table-row[data-sid="%s"]'.format(s));
@ -4681,8 +4686,14 @@ return view.extend({
}, network))
.then(L.bind(function(hosts_radios_wifis) {
const tasks = [];
const section = m?.children?.[0];
hosts_radios_wifis[2].forEach(hrw => tasks.push(getAssocListForNetwork(hrw)) );
if (section != null) {
section.radios = hosts_radios_wifis[1];
section.wifis = hosts_radios_wifis[2];
}
hosts_radios_wifis[2].forEach(hrw => tasks.push(getCachedAssocListForNetwork(hrw)) );
return Promise.all(tasks).then(function(data) {
hosts_radios_wifis[3] = [];

View File

@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI Status Pages
LUCI_DEPENDS:=+luci-base +libiwinfo +rpcd-mod-iwinfo
PKG_RELEASE:=4
PKG_RELEASE:=5
PKG_BUILD_DEPENDS:=iwinfo
PKG_LICENSE:=Apache-2.0

View File

@ -458,7 +458,7 @@ function buildInterfaceMapping(zones, networks, board) {
}
function formatSpeed(carrier, speed, duplex) {
if ((speed > 0) && duplex) {
if (carrier && (speed > 0) && duplex) {
const d = (duplex == 'half') ? '\u202f(H)' : '';
const e = E('span', { 'title': _('Speed: %d Mbit/s, Duplex: %s').format(speed, duplex) });

View File

@ -14,7 +14,7 @@
"node": "^20.19.0 || >=22.12.0"
},
"devDependencies": {
"@eamonxg/aurora-tokens": "^1.2.0",
"@eamonxg/aurora-tokens": "^1.3.1",
"@tailwindcss/vite": "^4.1.11",
"@types/node": "^24.0.0",
"browserslist": "^4.28.2",

View File

@ -9,8 +9,8 @@ importers:
.:
devDependencies:
'@eamonxg/aurora-tokens':
specifier: ^1.2.0
version: 1.2.0
specifier: ^1.3.1
version: 1.3.1
'@tailwindcss/vite':
specifier: ^4.1.11
version: 4.3.2(vite@7.3.1(@types/node@24.10.9)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.0))
@ -44,8 +44,8 @@ importers:
packages:
'@eamonxg/aurora-tokens@1.2.0':
resolution: {integrity: sha512-Sfpqi5lvwSWDLqmAK1AVxp3g7ScWSk9y3iJ+0+3kU6b1AZ6Mp27TlyklpaimQLjdrOaASn49aaJgTsRxISt0kg==}
'@eamonxg/aurora-tokens@1.3.1':
resolution: {integrity: sha512-G3QC2zmFO+eMKa/zvxINOMs0BMU5sKbx9khW5B+00uEpPjcfoyFH253BYuq8CYCAxERgdxbkT/c9hFOThEyhvw==}
'@esbuild/aix-ppc64@0.27.2':
resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==}
@ -768,7 +768,7 @@ packages:
snapshots:
'@eamonxg/aurora-tokens@1.2.0':
'@eamonxg/aurora-tokens@1.3.1':
dependencies:
colorjs.io: 0.6.1

View File

@ -1,6 +1,11 @@
import { writeFile } from "node:fs/promises";
import { resolve } from "node:path";
import { resolveMode, FIXED } from "@eamonxg/aurora-tokens";
import {
resolveMode,
FIXED,
STRUCTURE,
THEME_STRUCTURE,
} from "@eamonxg/aurora-tokens";
const kebab = (s) => s.replace(/_/g, "-");
@ -18,13 +23,12 @@ function block(selector, colors, fixed) {
const light = resolveMode("light");
const dark = resolveMode("dark");
const STRUCTURE = `
--font-sans: "Lato", ui-sans-serif, system-ui, sans-serif;
--font-mono: ui-monospace, "SF Mono", Menlo, Monaco, Consolas, monospace;
--spacing: 0.25rem;
--container-max-width: 80rem;
--radius-base: 0.5rem;
`;
// Structural tokens and their @theme mappings come from the shared package,
// same as the colours — so spacing, content widths and the radius base have a
// single definition instead of one per theme generator.
const STRUCTURE_CSS = Object.entries(STRUCTURE)
.map(([k, v]) => ` --${kebab(k)}: ${v};`)
.join("\n");
const THEME = `@theme inline {
${Object.keys(light)
@ -37,19 +41,9 @@ ${Object.keys(light)
--shadow-xl: var(--app-shadow-lg);
--shadow-2xl: var(--app-shadow-lg);
--font-sans: var(--font-sans);
--font-mono: var(--font-mono);
--spacing: var(--spacing);
--container-max-width: var(--container-max-width);
--radius-sm: calc(var(--radius-base) * 0.25);
--radius: calc(var(--radius-base) * 0.5);
--radius-md: calc(var(--radius-base) * 0.75);
--radius-lg: var(--radius-base);
--radius-xl: calc(var(--radius-base) * 1.5);
--radius-2xl: calc(var(--radius-base) * 2);
--radius-3xl: calc(var(--radius-base) * 3);
--radius-4xl: calc(var(--radius-base) * 4);
${Object.entries(THEME_STRUCTURE)
.map(([k, v]) => ` --${k}: ${v};`)
.join("\n")}
}
`;
@ -65,8 +59,8 @@ const css =
HEADER +
"\n" +
block(":root", light, FIXED.light) +
STRUCTURE +
"}\n\n" +
STRUCTURE_CSS +
"\n}\n\n" +
block('[data-darkmode="true"]', dark, FIXED.dark) +
"}\n\n" +
THEME;

View File

@ -354,10 +354,15 @@ body[data-nav-type="sidebar"] {
so collapsing the sidebar never stretches it lets the sidebar column
collapse to zero, and lets #maincontent reclaim the freed space.
overflow-x-clip keeps the sliding sidebar out of horizontal overflow. */
@apply md:grid md:grid-cols-[17rem_minmax(0,1fr)] md:grid-rows-[auto_minmax(0,1fr)] md:overflow-x-clip;
/* Single source of truth for the sidebar column, so collapsing only has to
zero this one value instead of restating the grid template. */
--sidebar-w: 17rem;
@apply md:grid md:grid-cols-[var(--sidebar-w)_minmax(0,1fr)] md:grid-rows-[auto_minmax(0,1fr)] md:overflow-x-clip;
&.sidebar-collapsed {
@apply md:grid-cols-[0_minmax(0,1fr)];
@apply md:[--sidebar-w:0rem];
}
& > header {
@ -370,6 +375,15 @@ body[data-nav-type="sidebar"] {
& > #maincontent {
@apply md:col-start-2 md:row-start-2 md:min-w-0 md:pt-2;
/* This shell runs full-width and reads no width cap. Honouring
--content-width-centered here would shrink content twice viewport
minus the sidebar, then clamped to 80rem and re-centred in what's left,
which puts the page visibly right-of-centre on a wide display. The
sidebar column is the margin; content fills the rest. Desktop only
below md the sidebar is a drawer and the base rule's
max-md:w-full/px-3 still applies. */
@apply md:w-full md:max-w-none md:px-8;
}
& .header-crumb {
@ -462,7 +476,10 @@ body[data-nav-type="sidebar"] {
}
#maincontent {
@apply max-w-max-width mx-auto min-h-[calc(100vh-4rem)] w-23/24 px-4 max-md:w-full max-md:px-3;
/* Centred shells (top-bar navigation) clamp here and gutter the remainder.
The sidebar shell overrides this it caps the shell instead, see
body[data-nav-type="sidebar"] above. */
@apply max-w-(--content-width-centered) mx-auto min-h-[calc(100vh-4rem)] w-23/24 px-4 max-md:w-full max-md:px-3;
#view {
@apply mx-0 w-full bg-transparent p-0 shadow-none empty:hidden md:p-0;

View File

@ -41,11 +41,10 @@
--app-shadow-md: 0 4px 16px oklch(0 0 0 / 0.08), 0 1px 3px oklch(0 0 0 / 0.04);
--app-shadow-lg: 0 12px 32px oklch(0 0 0 / 0.12);
--app-opacity-disabled: 0.4;
--font-sans: "Lato", ui-sans-serif, system-ui, sans-serif;
--font-mono: ui-monospace, "SF Mono", Menlo, Monaco, Consolas, monospace;
--spacing: 0.25rem;
--container-max-width: 80rem;
--content-width-centered: 80rem;
--radius-base: 0.5rem;
}
@ -129,8 +128,6 @@
--font-sans: var(--font-sans);
--font-mono: var(--font-mono);
--spacing: var(--spacing);
--container-max-width: var(--container-max-width);
--radius-sm: calc(var(--radius-base) * 0.25);
--radius: calc(var(--radius-base) * 0.5);
--radius-md: calc(var(--radius-base) * 0.75);

View File

@ -9,7 +9,7 @@ LUCI_TITLE:=Aurora Theme (A modern browser theme built with Vite and Tailwind CS
LUCI_DEPENDS:=+luci-base
PKG_VERSION:=1.1.3
PKG_RELEASE:=56
PKG_RELEASE:=57
PKG_LICENSE:=Apache-2.0
LUCI_MINIFY_CSS:=

File diff suppressed because one or more lines are too long

View File

@ -10,12 +10,12 @@ include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=natflow
PKG_VERSION:=20260531
PKG_RELEASE:=52
PKG_RELEASE:=53
PKG_SOURCE:=$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=https://github.com/ptpt52/natflow.git
PKG_SOURCE_PROTO:=git
PKG_SOURCE_VERSION:=39fa65605be2d7a9e6ae64fa70f984691e984d70
PKG_SOURCE_VERSION:=e155710bcb0afec0af934c18151ac8c3b4f315aa
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_MAINTAINER:=Chen Minqiang <ptpt52@gmail.com>
PKG_LICENSE:=GPL-2.0

View File

@ -6,13 +6,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=caddy
PKG_VERSION:=2.11.4.1
PKG_RELEASE:=7
PKG_VERSION:=2.11.4.2
PKG_RELEASE:=8
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/caddyserver/caddy.git
PKG_SOURCE_DATE:=2026-06-22
PKG_SOURCE_VERSION:=13a4c3f43c79ca04064457ab9cf95b376c294141
PKG_SOURCE_DATE:=2026-07-25
PKG_SOURCE_VERSION:=c96bca12693419ac5be751a0cbbae2c3cbf89c58
PKG_MIRROR_HASH:=skip
PKG_LICENSE:=GPL-3.0-or-later

View File

@ -1,6 +1,6 @@
diff -rNu a/cmd/caddy/main.go b/cmd/caddy/main.go
--- a/cmd/caddy/main.go 2026-06-23 00:25:43.000000000 +0800
+++ b/cmd/caddy/main.go 2026-06-29 19:43:41.213131303 +0800
--- a/cmd/caddy/main.go 2026-07-26 06:49:44.000000000 +0800
+++ b/cmd/caddy/main.go 2026-07-26 13:31:39.630304707 +0800
@@ -35,6 +35,8 @@
// plug in Caddy modules here
@ -11,34 +11,34 @@ diff -rNu a/cmd/caddy/main.go b/cmd/caddy/main.go
func main() {
diff -rNu a/go.mod b/go.mod
--- a/go.mod 2026-06-23 00:25:43.000000000 +0800
+++ b/go.mod 2026-06-29 19:45:42.789025997 +0800
--- a/go.mod 2026-07-26 06:49:44.000000000 +0800
+++ b/go.mod 2026-07-26 13:35:04.632074271 +0800
@@ -1,12 +1,13 @@
module github.com/caddyserver/caddy/v2
-go 1.25.1
+go 1.26.4
+go 1.26.5
require (
github.com/BurntSushi/toml v1.6.0
github.com/DeRuina/timberjack v1.4.2
github.com/DeRuina/timberjack v1.4.5
github.com/KimMachineGun/automemlimit v0.7.5
github.com/Masterminds/sprig/v3 v3.3.0
+ github.com/aksdb/caddy-cgi/v2 v2.2.7
github.com/alecthomas/chroma/v2 v2.24.1
github.com/alecthomas/chroma/v2 v2.27.0
github.com/aryann/difflib v0.0.0-20210328193216-ff5ff6dc229b
github.com/caddyserver/certmagic v0.25.3
github.com/caddyserver/certmagic v0.25.4
@@ -20,6 +21,7 @@
github.com/klauspost/compress v1.18.6
github.com/klauspost/cpuid/v2 v2.3.0
github.com/klauspost/compress v1.19.0
github.com/klauspost/cpuid/v2 v2.4.0
github.com/mholt/acmez/v3 v3.1.6
+ github.com/mholt/caddy-webdav v0.0.0-20260127042217-fa2f366b0d75
github.com/prometheus/client_golang v1.23.2
github.com/quic-go/quic-go v0.59.1
github.com/quic-go/quic-go v0.60.0
github.com/smallstep/certificates v0.30.2
diff -rNu a/go.sum b/go.sum
--- a/go.sum 2026-06-23 00:25:43.000000000 +0800
+++ b/go.sum 2026-06-29 19:45:42.788025990 +0800
--- a/go.sum 2026-07-26 06:49:44.000000000 +0800
+++ b/go.sum 2026-07-26 13:35:04.632074271 +0800
@@ -40,6 +40,8 @@
github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0=
github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=

View File

@ -1,8 +1,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=opera-proxy
PKG_VERSION:=1.27.0
PKG_RELEASE:=8
PKG_VERSION:=1.28.0
PKG_RELEASE:=9
PKG_MAINTAINER:=Konstantine Shevlakov <shevlakov@132lan.ru>
PKG_LICENSE:=MIT