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

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

View File

@ -1,4 +1,6 @@
#
# Copyright (C) 2015-2016 OpenWrt.org
#
# 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_NAME:=fastnet
PKG_VERSION:=0.7.5
PKG_RELEASE:=1
# use PKG_SOURCE_DATE instead of PKG_VERSION for compatible
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_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_USE_MIPS16:=0
@ -27,6 +30,7 @@ define Package/$(PKG_NAME)
SUBMENU:=Web Servers/Proxies
TITLE:=FastNet - network test Web UI
DEPENDS:=@(arm||x86_64||aarch64)
PKGARCH:=all
endef
define Package/$(PKG_NAME)/description
@ -53,7 +57,7 @@ endef
define Package/$(PKG_NAME)/install
$(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_BIN) ./files/fastnet.init $(1)/etc/init.d/fastnet
$(INSTALL_BIN) ./files/fastnet.uci-default $(1)/etc/uci-defaults/fastnet

View File

@ -1,5 +1,6 @@
config fastnet
option enabled '1'
option host '0.0.0.0'
option port '3200'
option token ''
option logger '0'

5
fastnet/files/fastnet.init Normal file → Executable file
View File

@ -5,6 +5,7 @@ USE_PROCD=1
get_config() {
config_get_bool enabled "$1" enabled 1
config_get host "$1" host "0.0.0.0"
config_get port "$1" port 3200
config_get token "$1" token ""
config_get_bool logger "$1" logger 0
@ -15,11 +16,11 @@ start_service() {
config_foreach get_config fastnet
[ "$enabled" != 1 ] && return 1
addr="0.0.0.0:${port}"
addr="${host}:${port}"
procd_open_instance
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"
[ "$logger" = 1 ] && procd_set_param stderr 1
procd_set_param respawn

View File

@ -14,6 +14,14 @@ uci -q batch <<-EOF_UCI >/dev/null
set ucitrack.@fastnet[-1].init=fastnet
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
/etc/init.d/fastnet enable

View File

@ -10,8 +10,8 @@ include $(TOPDIR)/rules.mk
PKG_ARCH_kai:=$(ARCH)
PKG_NAME:=kai
PKG_VERSION:=0.0.3
PKG_RELEASE:=1
PKG_VERSION:=0.0.5
PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/linkease/istore-packages/releases/download/prebuilt/
PKG_HASH:=skip

View File

@ -1,3 +1,4 @@
config kai
option 'enabled' '0'
option 'cwd' '/tmp/kai'
option 'data_dir' ''
option 'port' '8197'

View File

@ -5,24 +5,95 @@ USE_PROCD=1
get_config() {
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(){
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 respawn
procd_close_instance
}
mkdir_cwd(){
if [ ! -d $1 ]; then
mkdir -p $1
fi
[ -d "$1" ] || mkdir -p "$1"
}
start_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_append_param command serve --port "8196" --hostname "127.0.0.1"
procd_set_param stderr 1
@ -35,14 +106,24 @@ start_service() {
if [ $enabled != 1 ]; then
return 1
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"
start_kai_bin
sleep 1
mkdir_cwd $cwd
start_kai_session $cwd
mkdir_cwd "${data_dir}"
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"
}
service_triggers() {
procd_add_reload_trigger "kai"
}
}

View File

@ -10,8 +10,8 @@ include $(TOPDIR)/rules.mk
PKG_ARCH_kai_session:=$(ARCH)
PKG_NAME:=kai_session
PKG_VERSION:=0.0.3
PKG_RELEASE:=1
PKG_VERSION:=0.0.5
PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/linkease/istore-packages/releases/download/prebuilt/
PKG_HASH:=skip

View File

@ -11,7 +11,7 @@ LUCI_DEPENDS:=+luci-base +luci-lib-jsonc +curl +bandix
PKG_MAINTAINER:=timsaya
PKG_VERSION:=0.12.6
PKG_RELEASE:=2
PKG_RELEASE:=3
include $(TOPDIR)/feeds/luci/luci.mk

View File

@ -1059,8 +1059,14 @@ return view.extend({
var stateSelect = E('select', { 'class': 'cbi-input-select', 'id': 'flows-state' }, [
E('option', { 'value': '' }, _('All')),
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': '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 tableWrap = E('div', { 'class': 'flows-table-wrap' }, [

View File

@ -8,8 +8,8 @@ include $(TOPDIR)/rules.mk
LUCI_TITLE:=kai
PKG_VERSION:=1.0.0
PKG_RELEASE:=1
LUCI_DEPENDS:=+kai +kai_session
PKG_RELEASE:=2
LUCI_DEPENDS:=+kai +kai_session +luci-compat
LUCI_MINIFY_CSS:=0
LUCI_MINIFY_JS:=0
@ -25,4 +25,4 @@ endef
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature
# call BuildPackage - OpenWrt buildroot signature

View File

@ -8,6 +8,16 @@ s.addremove=false
s.anonymous=true
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