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

This commit is contained in:
github-actions[bot] committed 2026-07-26 20:25:59 +08:00
1 parent 561519e8f3
commit 922cadb436
19 files changed
+164 -102

No files matched your search

+3 -3
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
+3 -3
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
+1 -1
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:= \
@@ -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}
@@ -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)
@@ -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) {
return a.getName() > b.getName();
});
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] = [];
+1 -1
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
@@ -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) });
+1 -1
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",
+5 -5
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
+17 -23
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;
+20 -3
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;
+1 -4
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);
+1 -1
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:=
@@ -1,2 +1,2 @@
/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-content:"";--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-space-y-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-border-spacing-x:0;--tw-border-spacing-y:0}}}@layer theme{:root,:host{--font-sans:var(--font-sans);--font-mono:var(--font-mono);--spacing:var(--spacing);--container-xs:20rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--blur-md:12px;--blur-lg:16px;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--container-max-width:var(--container-max-width)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-butLine truncated
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-content:"";--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-space-y-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-border-spacing-x:0;--tw-border-spacing-y:0}}}@layer theme{:root,:host{--font-sans:var(--font-sans);--font-mono:var(--font-mono);--spacing:var(--spacing);--container-xs:20rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--blur-md:12px;--blur-lg:16px;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1Line truncated
+2 -2
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
+4 -4
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
@@ -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=
+2 -2
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