GUI.for.Cores 滚动更新日志
- 为订阅添加独立的【脚本】支持 1
- 调整配置生成逻辑 2
- 调整订阅更新逻辑 3
【1】功能入口:右键订阅 - 脚本
脚本示例:
注意:订阅脚本中的 onSubscribe 与插件系统中的 onSubscribe 钩子方法的差异:返回值不同
【2】现在的配置生成逻辑
首先按 GUI 的配置生成内核配置,然后内核配置进入【插件系统】进行处理并返回给 GUI,最后 GUI 按【混入与脚本】再处理一遍形成最终的配置。
【3】现在的订阅更新逻辑
首先从网络获取或本地读取订阅,然后订阅进入【插件系统】进行处理并返回给 GUI,最后 GUI 按【脚本】再处理一遍形成最终的订阅。
注:请使用【滚动发行】插件完成上述更新
- 为订阅添加独立的【脚本】支持 1
- 调整配置生成逻辑 2
- 调整订阅更新逻辑 3
【1】功能入口:右键订阅 - 脚本
脚本示例:
const onSubscribe = async (proxies, subscription) => {
// 将订阅总流量设置为100GB
subscription.total = 100 * 1024 * 1024 * 1024;
// 将已用上行流量设置为20GB
subscription.upload = 20 * 1024 * 1024 * 1024;
// 将已用下行流量设置为40GB
subscription.download = 40 * 1024 * 1024 * 1024;
// 将订阅过期时间设置为10年后
subscription.expire = Date.now() + 10 * 365 * 24 * 60 * 60 * 1000;
return { proxies, subscription };
};
注意:订阅脚本中的 onSubscribe 与插件系统中的 onSubscribe 钩子方法的差异:返回值不同
【2】现在的配置生成逻辑
首先按 GUI 的配置生成内核配置,然后内核配置进入【插件系统】进行处理并返回给 GUI,最后 GUI 按【混入与脚本】再处理一遍形成最终的配置。
【3】现在的订阅更新逻辑
首先从网络获取或本地读取订阅,然后订阅进入【插件系统】进行处理并返回给 GUI,最后 GUI 按【脚本】再处理一遍形成最终的订阅。
注:请使用【滚动发行】插件完成上述更新
插件发布 【节点智能切换】
插件 ID:plugin-smart-proxy-switcher
插件描述:实现动态代理选择机制,包含故障转移、断路器、EWMA 延迟跟踪、基于分数调度与滞后控制。
建议修改的插件可配置项:【应用智能切换的策略组】、【并发检测数量】、【检测时间间隔】
可使用AI生成策略参数,提示词:
通用插件
插件 ID:plugin-smart-proxy-switcher
插件描述:实现动态代理选择机制,包含故障转移、断路器、EWMA 延迟跟踪、基于分数调度与滞后控制。
建议修改的插件可配置项:【应用智能切换的策略组】、【并发检测数量】、【检测时间间隔】
可使用AI生成策略参数,提示词:
你是一个代理服务器调度系统的参数专家。我想要不同风格的调度参数配置。系统包括 EWMA、优先级、断路器、惩罚分机制和滞后控制(hysteresis)等策略。请只输出**与默认值不同的参数和注释**,格式如下:
{
"参数名": 新值,
"_参数名": "简洁说明"
}
默认值如下(用于参考):
ewmaAlpha: 0.3
failureThreshold: 3
circuitBreakerTimeout: 360000
penaltyIncrement: 5
penaltyDecayRate: 0.1
priorityWeight: 1.0
latencyWeight: 100.0
penaltyWeight: 1.0
hysteresisMargin: 0.1
请根据以下风格返回配置(任选一种或多种):
- 稳定型:减少切换,宽容波动
- 延迟优先型:频繁检测,追求最快响应
- 高可用型:容忍短暂失败,但快速恢复
- 掉线惩罚型:代理一旦失败,长时间惩罚不让用
- 最小波动型:非常保守切换策略
返回 JSON 格式,只输出修改过的参数及注释。
通用插件
GUI.for.Cores News
插件发布 【节点智能切换】 插件 ID:plugin-smart-proxy-switcher 插件描述:实现动态代理选择机制,包含故障转移、断路器、EWMA 延迟跟踪、基于分数调度与滞后控制。 建议修改的插件可配置项:【应用智能切换的策略组】、【并发检测数量】、【检测时间间隔】 可使用AI生成策略参数,提示词: 你是一个代理服务器调度系统的参数专家。我想要不同风格的调度参数配置。系统包括 EWMA、优先级、断路器、惩罚分机制和滞后控制(hysteresis)等策略。请只输出**与默认值不同的参数和注释**,格式如下:…
改了默认参数,建议恢复为默认值:更新插件,右键配置,左下角按钮。
加了新的菜单项【节点状态查看】
加了新的菜单项【节点状态查看】
GUI.for.Cores 【v1.9.7】已发布
- 优化从规则集中心添加的规则集名称显示,格式为[name]-[geosite/geoip]-[format]
- 调整运行时的配置日志等级,控制在 INFO 及以下
- 网络 API 增加参数:Redirect,用于控制是否支持重定向
- 增加 API:UnzipTarGZFile,用于解压 .tar.gz 文件
- 解压核心资源包采用 UnzipTarGZFile API,不再依赖系统 tar 命令
- 优化 MMDB 操作 API
- 重构 StartServer API,增加参数 StaticPath、StaticRoute、UploadPath、UploadRoute、MaxUploadSize,分别用于设置静态资源目录、静态资源路由、上传目录、上传路由、上传文件大小
- 修改 StartServer API 参数,cert 和 key 改为大驼峰 Cert 和 Key
StartServer 使用示例
- 优化从规则集中心添加的规则集名称显示,格式为[name]-[geosite/geoip]-[format]
- 调整运行时的配置日志等级,控制在 INFO 及以下
- 网络 API 增加参数:Redirect,用于控制是否支持重定向
- 增加 API:UnzipTarGZFile,用于解压 .tar.gz 文件
- 解压核心资源包采用 UnzipTarGZFile API,不再依赖系统 tar 命令
- 优化 MMDB 操作 API
- 重构 StartServer API,增加参数 StaticPath、StaticRoute、UploadPath、UploadRoute、MaxUploadSize,分别用于设置静态资源目录、静态资源路由、上传目录、上传路由、上传文件大小
- 修改 StartServer API 参数,cert 和 key 改为大驼峰 Cert 和 Key
StartServer 使用示例
/* 触发器 手动触发 */
const onRun = async () => {
// 创建一个支持上传与静态资源的服务
const { close } = await Plugins.StartServer(
"127.0.0.1:8080",
"StartServerTest",
async (req, res) => {
res.end(
200,
{ "Content-Type": "application/json" },
"Server is running..."
);
},
{
StaticPath: "data/.cache",
UploadPath: "data/.cache",
// MaxUploadSize: 50 * 1024 * 1024, 默认值50MB
// StaticRoute: "/static/", 默认值
// UploadRoute: "/upload", 默认值
}
);
// 测试上传
const res = await Plugins.Upload(
"http://127.0.0.1:8080/upload",
"data/user.yaml"
);
console.log(`[${Plugin.name}]`, res);
// 测试静态资源
const res2 = await Plugins.HttpGet("http://127.0.0.1:8080/static/user.yaml");
console.log(`[${Plugin.name}]`, res2);
// 关闭服务
await close();
};
GUI.for.Cores 滚动更新日志
- 新建配置的restful api密钥将采用16进制编码的256位密钥
- Switch组件添加切换动画
- 测节点延迟时,失败也更新延迟数值
- 优化首页控制器鼠标滚轮事件,减少误操作,提升动画性能
- 增加控制器面板关闭模式,可选仅按钮关闭
GUI.for.SingBox
- fix: 修复http3类型的DNS格式问题
GUI.for.Clash
- feat: URLTest类型策略组可手动固定节点与清除固定
提示:为了进一步加强安全,可编辑配置 - 通用设置 - RESTful API密钥 - 点击右侧刷新按钮,生成更长的密钥
请使用【滚动发行】插件完成上述更新。
- 新建配置的restful api密钥将采用16进制编码的256位密钥
- Switch组件添加切换动画
- 测节点延迟时,失败也更新延迟数值
- 优化首页控制器鼠标滚轮事件,减少误操作,提升动画性能
- 增加控制器面板关闭模式,可选仅按钮关闭
GUI.for.SingBox
- fix: 修复http3类型的DNS格式问题
GUI.for.Clash
- feat: URLTest类型策略组可手动固定节点与清除固定
提示:为了进一步加强安全,可编辑配置 - 通用设置 - RESTful API密钥 - 点击右侧刷新按钮,生成更长的密钥
请使用【滚动发行】插件完成上述更新。
GUI.for.Cores 滚动更新日志
- 在概览界面 - 核心管理处添加自定义操作 API
关键代码:
使用教程:
请使用【滚动发行】插件完成更新。
- 在概览界面 - 核心管理处添加自定义操作 API
关键代码:
// target目前可取值:core_state
// actions为组件配置,可传入单个或多个
const removeFn = Plugins.useAppStore().addCustomActions(target, actions);
使用教程:
// 保存插件状态
window[Plugin.id] = window[Plugin.id] || {};
const onRun = async () => {
const appStore = Plugins.useAppStore();
onRemove();
// 把移除方法存到插件状态里
window[Plugin.id].remove = appStore.addCustomActions("core_state", [
{
component: "Button",
componentProps: {
size: "small",
onClick: () => {
Plugins.message.success("点击了按钮");
},
},
componentSlots: {
default: "一个按钮",
},
},
{
component: "Switch",
componentSlots: {
default: "一个开关",
},
componentProps: {
size: "small",
modelValue: true,
onChange: (vvv) => {
console.log(vvv);
},
},
},
{
component: "CheckBox",
componentProps: {
size: "small",
modelValue: ["1"],
options: [
{ label: "多选1", value: "1" },
{ label: "多选2", value: "2" },
],
onChange: (vvv) => {
console.log(vvv);
},
},
},
{
component: "Radio",
componentProps: {
size: "small",
modelValue: "1",
options: [
{ label: "单选1", value: "1" },
{ label: "单选2", value: "2" },
],
onChange: (vvv) => {
console.log(vvv);
},
},
},
{
component: "Dropdown",
componentProps: {
size: "small",
style: { color: "green", fontSize: "12px" },
},
componentSlots: {
default: "下拉菜单",
overlay: ({ h }) => {
return h("div", [
h(
"Button",
{
onClick: () => {
console.log("点了菜单1");
},
},
() => "菜单1"
),
h(
"Button",
{
onClick: () => {
console.log("点了菜单2");
},
},
() => "菜单2"
),
]);
},
},
},
{
component: "div",
componentProps: {
style: {
color: "red",
},
},
componentSlots: {
default: () => {
return "一个div";
},
},
},
{
component: "Icon",
componentProps: {
icon: "refresh",
},
},
{
component: "Tag",
componentProps: {
color: "cyan",
},
componentSlots: {
default: "👍",
},
},
]);
Plugins.message.success("添加自定义操作成功");
};
const onRemove = () => {
// 从插件状态拿移除方法并执行
window[Plugin.id].remove?.();
Plugins.message.success("移除自定义操作成功");
};
请使用【滚动发行】插件完成更新。
GUI.for.Cores 滚动更新日志
- 重构 WebSocket 连接处理
- 启动 core 后将发起 3 条常驻连接(/memory、/traffic、/connections)
- /logs 连接将按需开启并自动关闭
- 增加 onLogs、onTraffic、onMemory、onConnections API
新增 API 使用示例:
请使用【滚动发行】插件完成更新
- 重构 WebSocket 连接处理
- 启动 core 后将发起 3 条常驻连接(/memory、/traffic、/connections)
- /logs 连接将按需开启并自动关闭
- 增加 onLogs、onTraffic、onMemory、onConnections API
新增 API 使用示例:
const kernelApi = Plugins.useKernelApiStore();
// 处理核心的日志信息
const unregisterLogsHandler = kernelApi.onLogs((data) => {
console.log("onLogs", data);
});
// 处理核心的流量信息
const unregisterTrafficHandler = kernelApi.onTraffic((data) => {
console.log("onTraffic", data);
});
// 处理核心的内存信息
const unregisterMemoryHandler = kernelApi.onMemory((data) => {
console.log("onMemory", data);
});
// 处理核心的连接信息
const unregisterConnections = kernelApi.onConnections((data) => {
console.log("onConnections", data);
});
// 1分钟后移除所有注册的回调
setTimeout(() => {
unregisterLogsHandler();
unregisterTrafficHandler();
unregisterMemoryHandler();
unregisterConnections();
}, 60_000);
请使用【滚动发行】插件完成更新
GUI.for.Cores 滚动更新日志
- 新增插件触发器:onCoreStarted(核心启动后)、onCoreStopped(核心停止后)
使用教程:
请使用【滚动发行】插件完成更新
- 新增插件触发器:onCoreStarted(核心启动后)、onCoreStopped(核心停止后)
使用教程:
/* 触发器 核心启动后 */
const onCoreStarted = async () => {
console.log(`[${Plugin.name}]`, "核心启动了");
};
/* 触发器 核心停止后 */
const onCoreStopped = async () => {
console.log(`[${Plugin.name}]`, "核心停止了");
};
请使用【滚动发行】插件完成更新
GUI.for.Cores 滚动更新日志
- 新增插件触发器:onBeforeCoreStart(核心启动前)、onBeforeCoreStop(核心停止前)
使用教程:
请使用【滚动发行】插件完成更新
- 新增插件触发器:onBeforeCoreStart(核心启动前)、onBeforeCoreStop(核心停止前)
使用教程:
/* 触发器 核心启动前 */
const onBeforeCoreStart = async (config, profile) => {
console.log(`[${Plugin.name}]`, 'onBeforeCoreStart')
return config
}
/* 触发器 核心停止前 */
const onBeforeCoreStop = async () => {
console.log(`[${Plugin.name}]`, 'onBeforeCoreStop')
}
请使用【滚动发行】插件完成更新
GUI.for.Cores 滚动更新日志
- 新增设置项【将代理组添加到托盘菜单】。
该设置默认关闭,以减少托盘菜单的刷新频率。
开启后,在切换【展示不可用节点】或【按延迟排序】时,托盘菜单将随之更新;此外,节点的可用性变化或延迟排序的更新也会触发托盘菜单的刷新。
- 新增设置项【将代理组添加到托盘菜单】。
该设置默认关闭,以减少托盘菜单的刷新频率。
开启后,在切换【展示不可用节点】或【按延迟排序】时,托盘菜单将随之更新;此外,节点的可用性变化或延迟排序的更新也会触发托盘菜单的刷新。
插件发布 【SNI 伪造】
插件ID:plugin-sni-spoofing
插件说明:通过为浏览器添加启动参数和运行 Nginx 反代服务,实现免代理访问被墙网站。Supported by: 泡泡茶壶
通用插件
插件ID:plugin-sni-spoofing
插件说明:通过为浏览器添加启动参数和运行 Nginx 反代服务,实现免代理访问被墙网站。Supported by: 泡泡茶壶
通用插件
GUI.for.Cores 滚动更新日志
- 增加插件API: Plugins.modal
- 插件支持自定义UI,提供完整的Vue3框架能力
使用示例:
更多示例请参考插件【插件UI示例】
- 增加插件API: Plugins.modal
- 插件支持自定义UI,提供完整的Vue3框架能力
使用示例:
const onRun = async () => {
const ui = createUIModal()
ui.open()
}
const createUIModal = () => {
const { h, defineComponent } = Vue
const component1 = () => 'component1'
const component2 = {
template: '{{msg}}',
setup() {
return { msg: 'component2' }
}
}
const component3 = defineComponent(() => {
return () => h('div', 'component3')
})
const component4 = defineComponent({
render() {
return h('div', 'component4')
}
})
const modal = Plugins.modal({ title: '自定义UI使用示例', component: h(component4) })
return modal
}
更多示例请参考插件【插件UI示例】
插件发布 【WARP 配置生成】
插件ID:plugin-generate-warp-config
插件说明:自动注册并生成 Cloudflare WARP 的配置信息。Supported by: 泡泡茶壶
通用插件
插件ID:plugin-generate-warp-config
插件说明:自动注册并生成 Cloudflare WARP 的配置信息。Supported by: 泡泡茶壶
通用插件
GUI.for.Cores 滚动更新日志
- 新增插件元数据:【是否具有用户界面】
配合【手动触发】触发器使用,开启后运行按钮前有个bling bling✨的小图标
- 新增插件元数据:【是否具有用户界面】
配合【手动触发】触发器使用,开启后运行按钮前有个bling bling✨的小图标