🍕 Sync 2026-03-09 23:48:08

This commit is contained in:
github-actions[bot] committed 2026-03-09 23:48:08 +08:00
1 parent 6541db9764
commit 2ccca0e195
12 files changed
+140 -28

No files matched your search

+9 -5
View File
@@ -1,4 +1,6 @@
# #
# Copyright (C) 2015-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v3. # This is free software, licensed under the GNU General Public License v3.
# #
@@ -7,14 +9,15 @@ include $(TOPDIR)/rules.mk
PKG_ARCH_FASTNET:=$(ARCH) PKG_ARCH_FASTNET:=$(ARCH)
PKG_NAME:=fastnet PKG_NAME:=fastnet
PKG_VERSION:=0.7.5 # use PKG_SOURCE_DATE instead of PKG_VERSION for compatible
PKG_RELEASE:=1 PKG_SOURCE_DATE:=0.7.2
PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_SOURCE_DATE).tar.gz
PKG_SOURCE_URL:=http://dl.istoreos.com/binary/fastnet/ PKG_SOURCE_URL:=http://dl.istoreos.com/binary/fastnet/
PKG_HASH:=skip PKG_HASH:=skip
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-binary-$(PKG_VERSION) PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-binary-$(PKG_SOURCE_DATE)
PKG_BUILD_PARALLEL:=1 PKG_BUILD_PARALLEL:=1
PKG_USE_MIPS16:=0 PKG_USE_MIPS16:=0
@@ -27,6 +30,7 @@ define Package/$(PKG_NAME)
SUBMENU:=Web Servers/Proxies SUBMENU:=Web Servers/Proxies
TITLE:=FastNet - network test Web UI TITLE:=FastNet - network test Web UI
DEPENDS:=@(arm||x86_64||aarch64) DEPENDS:=@(arm||x86_64||aarch64)
PKGARCH:=all
endef endef
define Package/$(PKG_NAME)/description define Package/$(PKG_NAME)/description
@@ -53,7 +57,7 @@ endef
define Package/$(PKG_NAME)/install define Package/$(PKG_NAME)/install
$(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/config $(1)/etc/init.d $(1)/etc/uci-defaults $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/config $(1)/etc/init.d $(1)/etc/uci-defaults
$(INSTALL_BIN) $(PKG_BUILD_DIR)/fastnet.$(PKG_ARCH_FASTNET) $(1)/usr/sbin/FastNet $(INSTALL_BIN) $(PKG_BUILD_DIR)/fastnet.$(PKG_ARCH_FASTNET) $(1)/usr/sbin/fastnet
$(INSTALL_CONF) ./files/fastnet.config $(1)/etc/config/fastnet $(INSTALL_CONF) ./files/fastnet.config $(1)/etc/config/fastnet
$(INSTALL_BIN) ./files/fastnet.init $(1)/etc/init.d/fastnet $(INSTALL_BIN) ./files/fastnet.init $(1)/etc/init.d/fastnet
$(INSTALL_BIN) ./files/fastnet.uci-default $(1)/etc/uci-defaults/fastnet $(INSTALL_BIN) ./files/fastnet.uci-default $(1)/etc/uci-defaults/fastnet
+1
View File
@@ -1,5 +1,6 @@
config fastnet config fastnet
option enabled '1' option enabled '1'
option host '0.0.0.0'
option port '3200' option port '3200'
option token '' option token ''
option logger '0' option logger '0'
Regular → Executable
+3 -2
View File
@@ -5,6 +5,7 @@ USE_PROCD=1
get_config() { get_config() {
config_get_bool enabled "$1" enabled 1 config_get_bool enabled "$1" enabled 1
config_get host "$1" host "0.0.0.0"
config_get port "$1" port 3200 config_get port "$1" port 3200
config_get token "$1" token "" config_get token "$1" token ""
config_get_bool logger "$1" logger 0 config_get_bool logger "$1" logger 0
@@ -15,11 +16,11 @@ start_service() {
config_foreach get_config fastnet config_foreach get_config fastnet
[ "$enabled" != 1 ] && return 1 [ "$enabled" != 1 ] && return 1
addr="0.0.0.0:${port}" addr="${host}:${port}"
procd_open_instance procd_open_instance
procd_set_param limits nofile="65535 65535" procd_set_param limits nofile="65535 65535"
procd_set_param command /usr/sbin/FastNet web --addr "$addr" --no-open procd_set_param command /usr/sbin/fastnet web --addr "$addr" --no-open
[ -n "$token" ] && procd_append_param command --token "$token" [ -n "$token" ] && procd_append_param command --token "$token"
[ "$logger" = 1 ] && procd_set_param stderr 1 [ "$logger" = 1 ] && procd_set_param stderr 1
procd_set_param respawn procd_set_param respawn
+8
View File
@@ -14,6 +14,14 @@ uci -q batch <<-EOF_UCI >/dev/null
set ucitrack.@fastnet[-1].init=fastnet set ucitrack.@fastnet[-1].init=fastnet
commit ucitrack commit ucitrack
delete firewall.fastnet
set firewall.fastnet=rule
set firewall.fastnet.name="fastnet"
set firewall.fastnet.target="ACCEPT"
set firewall.fastnet.src="wan"
set firewall.fastnet.proto="tcp"
set firewall.fastnet.dest_port="3200"
commit firewall
EOF_UCI EOF_UCI
/etc/init.d/fastnet enable /etc/init.d/fastnet enable
+2 -2
View File
@@ -10,8 +10,8 @@ include $(TOPDIR)/rules.mk
PKG_ARCH_kai:=$(ARCH) PKG_ARCH_kai:=$(ARCH)
PKG_NAME:=kai PKG_NAME:=kai
PKG_VERSION:=0.0.3 PKG_VERSION:=0.0.5
PKG_RELEASE:=1 PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/linkease/istore-packages/releases/download/prebuilt/ PKG_SOURCE_URL:=https://github.com/linkease/istore-packages/releases/download/prebuilt/
PKG_HASH:=skip PKG_HASH:=skip
+2 -1
View File
@@ -1,3 +1,4 @@
config kai config kai
option 'enabled' '0' option 'enabled' '0'
option 'cwd' '/tmp/kai' option 'data_dir' ''
option 'port' '8197'
+90 -9
View File
@@ -5,24 +5,95 @@ USE_PROCD=1
get_config() { get_config() {
config_get_bool enabled $1 enabled 1 config_get_bool enabled $1 enabled 1
config_get cwd $1 cwd "/tmp/kai" config_get data_dir $1 data_dir ""
config_get port $1 port "8197"
}
http_get() {
local url="$1"
if command -v uclient-fetch >/dev/null 2>&1; then
uclient-fetch -O /dev/stdout "$url" 2>/dev/null
return $?
fi
if command -v wget >/dev/null 2>&1; then
wget -qO- "$url" 2>/dev/null
return $?
fi
if command -v curl >/dev/null 2>&1; then
curl -fsL "$url" 2>/dev/null
return $?
fi
return 1
}
maybe_refresh_opencode_skills_cache() {
[ -n "$data_dir" ] || return 0
[ -n "$port" ] || return 0
command -v jsonfilter >/dev/null 2>&1 || return 0
local cache_root="${data_dir}/cache/opencode/skills"
local state_root="${data_dir}/state/opencode"
local version_file="${state_root}/skills.manifest.version"
local managed_file="${state_root}/skills.managed.list"
local manifest_url="http://127.0.0.1:${port}/agentconf/skills/manifest.json"
[ -d "$cache_root" ] || mkdir -p "$cache_root"
[ -d "$state_root" ] || mkdir -p "$state_root"
local manifest version prev_version skills
manifest="$(http_get "$manifest_url")" || return 0
version="$(printf '%s' "$manifest" | jsonfilter -e '@.version' 2>/dev/null)"
[ -n "$version" ] || return 0
prev_version=""
[ -f "$version_file" ] && prev_version="$(cat "$version_file" 2>/dev/null)"
[ "$version" = "$prev_version" ] && return 0
logger -t kai "opencode skills manifest changed; refreshing managed skill cache"
if [ -f "$managed_file" ]; then
while IFS= read -r s; do
[ -n "$s" ] || continue
rm -rf "${cache_root}/${s}"
done <"$managed_file"
fi
skills="$(printf '%s' "$manifest" | jsonfilter -e '@.skills[*]' 2>/dev/null)"
if [ -n "$skills" ]; then
printf '%s\n' "$skills" >"$managed_file"
printf '%s\n' "$skills" | while IFS= read -r s; do
[ -n "$s" ] || continue
rm -rf "${cache_root}/${s}"
done
else
: >"$managed_file"
fi
printf '%s\n' "$version" >"$version_file"
return 0
} }
start_kai_bin(){ start_kai_bin(){
procd_open_instance kai_bin procd_open_instance kai_bin
procd_set_param command /usr/sbin/kai_bin procd_set_param command /usr/sbin/kai_bin -a 0.0.0.0 -p "$port"
procd_set_param stderr 1 procd_set_param stderr 1
procd_set_param respawn procd_set_param respawn
procd_close_instance procd_close_instance
} }
mkdir_cwd(){ mkdir_cwd(){
if [ ! -d $1 ]; then [ -d "$1" ] || mkdir -p "$1"
mkdir -p $1
fi
} }
start_kai_session(){ start_kai_session(){
procd_open_instance kai_session procd_open_instance kai_session
procd_set_param env OPENCODE_CWD=$1 OPENCODE_CONFIG=http://127.0.0.1:8197/config/opencode/opencode.json local root="${data_dir}"
local cwd="${data_dir}/cwd"
procd_set_param env \
OPENCODE_CWD="${cwd}" \
OPENCODE_CONFIG="http://127.0.0.1:${port}/agentconf/opencode.json" \
XDG_CACHE_HOME="${root}/cache" \
XDG_DATA_HOME="${root}/data" \
XDG_CONFIG_HOME="${root}/config" \
XDG_STATE_HOME="${root}/state"
procd_set_param command /usr/sbin/kai_session procd_set_param command /usr/sbin/kai_session
procd_append_param command serve --port "8196" --hostname "127.0.0.1" procd_append_param command serve --port "8196" --hostname "127.0.0.1"
procd_set_param stderr 1 procd_set_param stderr 1
@@ -35,14 +106,24 @@ start_service() {
if [ $enabled != 1 ]; then if [ $enabled != 1 ]; then
return 1 return 1
fi fi
if [ -z "${data_dir}" ]; then
logger -t kai "data_dir is empty; please set option data_dir in /etc/config/kai"
return 1
fi
logger -t kai "Starting KAI Service" logger -t kai "Starting KAI Service"
start_kai_bin start_kai_bin
sleep 1 sleep 1
mkdir_cwd $cwd mkdir_cwd "${data_dir}"
start_kai_session $cwd mkdir_cwd "${data_dir}/cwd"
mkdir_cwd "${data_dir}/cache"
mkdir_cwd "${data_dir}/data"
mkdir_cwd "${data_dir}/config"
mkdir_cwd "${data_dir}/state"
maybe_refresh_opencode_skills_cache
start_kai_session
logger -t kai "Starting KAI Service Completed" logger -t kai "Starting KAI Service Completed"
} }
service_triggers() { service_triggers() {
procd_add_reload_trigger "kai" procd_add_reload_trigger "kai"
} }
+2 -2
View File
@@ -10,8 +10,8 @@ include $(TOPDIR)/rules.mk
PKG_ARCH_kai_session:=$(ARCH) PKG_ARCH_kai_session:=$(ARCH)
PKG_NAME:=kai_session PKG_NAME:=kai_session
PKG_VERSION:=0.0.3 PKG_VERSION:=0.0.5
PKG_RELEASE:=1 PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/linkease/istore-packages/releases/download/prebuilt/ PKG_SOURCE_URL:=https://github.com/linkease/istore-packages/releases/download/prebuilt/
PKG_HASH:=skip PKG_HASH:=skip
+1 -1
View File
@@ -11,7 +11,7 @@ LUCI_DEPENDS:=+luci-base +luci-lib-jsonc +curl +bandix
PKG_MAINTAINER:=timsaya PKG_MAINTAINER:=timsaya
PKG_VERSION:=0.12.6 PKG_VERSION:=0.12.6
PKG_RELEASE:=2 PKG_RELEASE:=3
include $(TOPDIR)/feeds/luci/luci.mk include $(TOPDIR)/feeds/luci/luci.mk
@@ -1059,8 +1059,14 @@ return view.extend({
var stateSelect = E('select', { 'class': 'cbi-input-select', 'id': 'flows-state' }, [ var stateSelect = E('select', { 'class': 'cbi-input-select', 'id': 'flows-state' }, [
E('option', { 'value': '' }, _('All')), E('option', { 'value': '' }, _('All')),
E('option', { 'value': 'ESTABLISHED' }, 'ESTABLISHED'), E('option', { 'value': 'ESTABLISHED' }, 'ESTABLISHED'),
E('option', { 'value': 'SYN_SENT' }, 'SYN_SENT'),
E('option', { 'value': 'SYN_RECV' }, 'SYN_RECV'),
E('option', { 'value': 'FIN_WAIT' }, 'FIN_WAIT'),
E('option', { 'value': 'FIN_WAIT2' }, 'FIN_WAIT2'),
E('option', { 'value': 'TIME_WAIT' }, 'TIME_WAIT'), E('option', { 'value': 'TIME_WAIT' }, 'TIME_WAIT'),
E('option', { 'value': 'CLOSE_WAIT' }, 'CLOSE_WAIT') E('option', { 'value': 'CLOSE_WAIT' }, 'CLOSE_WAIT'),
E('option', { 'value': 'LAST_ACK' }, 'LAST_ACK'),
E('option', { 'value': 'CLOSE' }, 'CLOSE')
]); ]);
var tableBody = E('tbody', { 'class': 'flows-table-body' }); var tableBody = E('tbody', { 'class': 'flows-table-body' });
var tableWrap = E('div', { 'class': 'flows-table-wrap' }, [ var tableWrap = E('div', { 'class': 'flows-table-wrap' }, [
+3 -3
View File
@@ -8,8 +8,8 @@ include $(TOPDIR)/rules.mk
LUCI_TITLE:=kai LUCI_TITLE:=kai
PKG_VERSION:=1.0.0 PKG_VERSION:=1.0.0
PKG_RELEASE:=1 PKG_RELEASE:=2
LUCI_DEPENDS:=+kai +kai_session LUCI_DEPENDS:=+kai +kai_session +luci-compat
LUCI_MINIFY_CSS:=0 LUCI_MINIFY_CSS:=0
LUCI_MINIFY_JS:=0 LUCI_MINIFY_JS:=0
@@ -25,4 +25,4 @@ endef
include $(TOPDIR)/feeds/luci/luci.mk include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature # call BuildPackage - OpenWrt buildroot signature
+12 -2
View File
@@ -8,6 +8,16 @@ s.addremove=false
s.anonymous=true s.anonymous=true
s:option(Flag, "enabled", translate("Enable")).rmempty=false s:option(Flag, "enabled", translate("Enable")).rmempty=false
local data_dir = s:option(Value, "data_dir", translate("Data directory"))
data_dir.placeholder = ""
data_dir.rmempty = false
data_dir.description = translate("Required. KAI session will store cwd/cache/data/config/state under this directory (subfolders: cwd, cache, data, config, state).")
local port = s:option(Value, "port", translate("API port"))
port.default = "8197"
port.rmempty = false
port.datatype = "port"
port.description = translate("Port for KAI HTTP server (kai_bin). kai_session will read OPENCODE_CONFIG via 127.0.0.1:<port>.")
return m return m