插件概述
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.jsplugin 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(最近最少使用)
- 存储位置 — 内存(页面刷新后清空)