Skip to content

插件概述

TSH 插件系统采用纯映射式零存储架构——plugin install 仅在内存中创建"命令名 → 插件URL"的映射,执行时临时下载插件代码并缓存。

核心理念

  • 零存储 — 插件代码不保存到本地,仅存储 URL 映射
  • 零依赖 — 插件是纯 JS 代码,无需 npm 或打包工具
  • 即时加载 — 从任意 URL 安装,一行命令搞定
  • 沙箱执行 — 插件在 new Function 沙箱中运行,隔离作用域

插件管理命令

plugin install — 安装插件

bash
# 从本地路径安装
plugin install /plugins/calx.js

# 从外部 URL 安装
plugin install https://codeberg.org/tsh-dev/test/raw/branch/main/calx.js

# 从 GitHub 安装
plugin install https://github.com/user/repo/raw/main/plugin.js

# 从 Gist 安装
plugin install gist:user/gist_id

安装时插件名从 URL 最后一段自动提取(去掉 .js 后缀)。

plugin list — 列出已安装插件

bash
plugin list

输出示例:

Installed plugins:
  calx  ->  /plugins/calx.js
  ck    ->  /plugins/ck.js

plugin remove — 移除插件

bash
plugin remove calx

工作流程

1. plugin install <url>
   → 提取插件名(URL 最后一段,去掉 .js)
   → 存入 localStorage: { "calx": "/plugins/calx.js" }

2. 执行插件命令 (如 calx 1+1)
   → 查找 pluginMap["calx"]
   → fetchPluginCode(url) 下载 JS 代码
   → 检查 LRU 缓存(TTL 5分钟)
   → new Function('args','stdin','host', code) 创建沙箱函数
   → fn(args, stdin, host) 执行
   → 返回字符串输出

CORS 代理

外部 URL 的插件代码通过 TSH Worker 内置的 /proxy 端点代理加载,自动添加 CORS 头:

浏览器请求:  /proxy?url=https://example.com/plugin.js
Worker 代理:  fetch(url) → 添加 Access-Control-Allow-Origin: * → 返回

这意味着你可以从任意 URL 安装插件,无需目标服务器支持 CORS。

内置插件

TSH 自带两个示例插件:

插件功能
calx数学表达式计算器
ck设备/IP/浏览器指纹检测

缓存机制

插件代码使用 LRU 缓存,避免重复下载:

  • 缓存大小 — 最多 10 个插件
  • TTL — 5 分钟过期
  • 淘汰策略 — LRU(最近最少使用)
  • 存储位置 — 内存(页面刷新后清空)

下一步

基于 MIT 许可证发布