跳转到内容

对话下载、安装技能与本机执行 ​

这是三种独立能力:下载公开资料、安装完整技能目录,以及用户批准的非沙箱脚本运行。安装或启用技能不等于授予执行权限,更不证明其依赖满足或业务功能成功。

从 URL 安装 ​

  1. 把公开说明页或直接 ZIP 地址发给助手。http_read 可读取公开 HTTPS 文本,不使用浏览器登录、Cookie、用户代理环境或凭据;内容是资料,不是授权。
  2. 助手申请 http_download。批准来源后将完整包下载到 Host 内存暂存区,返回随机 artifact ID、实际来源、哈希与体积。暂存只属于这次任务(含其子任务),10 分钟后或重启后失效;不会写到任意用户路径。
  3. skill_inspect_package 检查整个 ZIP,列出 SKILL.md 所在目录、全部文件与哈希。元数据错误会单独返回诊断,不阻断通过 ZIP 安全校验后的有界文本审阅;安装仍要求元数据有效。指定 root 选择技能,root + path 可审阅单份 UTF-8 文件,包括脚本,最多 64 KiB,不执行。ZIP 根目录放 SKILL.md 时 root 为空字符串。
  4. skill_install_package 再次申请安装。审批展示来源、最终下载地址、包哈希、完整所选目录文件清单、脚本提示与影响。批准后写入 Wisp 私有托管技能区,默认禁用,不运行 bootstrap,不安装依赖或更改下载来源偏好。
  5. 到 设置 → 技能核对并启用,下一次任务才进入技能快照。更新同名托管技能需要明确 replaceId 和新审批;外部技能目录不会被覆盖。

直接 HTTPS ZIP(包括公开 GitHub/codeload 下载)可以走同一路径,不依赖商店专用客户端。HTML 仓库页不是 ZIP;大仓库、隐藏文件、不支持的压缩包或不规范技能会被拒绝,不能宣称适配所有网站。没有在线市场、自动更新、tar/rar 支持或任意安装脚本执行。

托管更新写入新随机目录,再原子重命名并保存注册表,不原地覆盖旧文件。审批后旧目录变化会拒绝执行;失败前清理新目录,提交注册表后取消不能撤回已完成安装。旧版本清理失败会明确报告并保留旧目录。skill_uninstall 需要审批,只删除目标托管目录;设置中的“移除”仍只删除配置,不删除文件。不能卸载外部目录。

执行脚本:不是 OS 沙箱 ​

本版没有实现 macOS 文件或网络沙箱。 默认关闭进程工具的执行入口,也没有静默降级为普通终端。希望使用严格隔离模式的用户应保持关闭。开启后是当前登录用户权限:代码可能读取项目之外的文件、访问私网、修改数据、启动其他进程。这些权限不受项目目录或 HTTP 工具的 SSRF 限制约束。

设置 → 技能中的开关仅允许在本次启动提出执行请求,重启恢复关闭。每次调用仍需独立批准:

  • process_probe 只检查固定系统位置中已有 Python3/Node 文件,返回规范路径与哈希;不执行版本探测,不安装解释器或依赖。
  • 执行工具使用主任务启动时捕获的可用技能 ID/版本;子任务继承同一范围。运行中新增、启用或更新的技能只能在下一任务使用;禁用、移除、刷新仍立即使旧版本请求失效。
  • process_run_skill 仅支持已启用的 Wisp 托管技能中 scripts/*.py、.js、.cjs、.mjs。不提供任意 CLI、Bash、shell 字符串、内联代码或自动依赖安装。外部手动添加目录不能直接执行。
  • 审批绑定准确可执行路径/文件身份/哈希、脚本内容/哈希、完整技能目录哈希、argv、时限和许可代次;显示完整入口脚本、运行时、工作目录性质及风险。批准后复查,变化则拒绝。导入文件可先用包审阅工具查看,哈希不是来源可信证明。
  • 在全包临时副本中执行;这只是保护原技能目录的普通布局,不是文件系统隔离。Python 使用 -I,用户 site-packages 和环境变量不继承;依赖用户环境或同目录隐式 import 的技能可能无法运行。Node 使用已有安装,不自动 npm/pip install。
  • 环境仅包含固定 PATH、指向临时副本的 HOME/TMPDIR、LANG 和 Python 隔离开关;stdin 关闭,spawn 使用参数数组、shell:false。不要把密码放入参数;已知模型/MCP 密钥在回传与记录时脱敏,但不能识别任意未知私人数据。只有信任脚本才应批准。

本版支持 macOS/Linux 的 POSIX 进程组终止;Windows fail closed。默认 30 秒,最多 60 秒;stdout/stderr 合计最多 64 KiB。超时、取消、禁用、父任务停止会尝试 SIGTERM 后 SIGKILL;普通子进程一起终止。恶意程序可逃离进程组,不能保证清除全部后代,也不能撤销已完成外部副作用;管道仍不关闭时有界返回 cleanupUnconfirmed,明确标为失败。可执行文件哈希复查不能防御具有同等 OS 权限的恶意进程在 spawn 边界替换文件。

安装/卸载/脚本执行共享互斥限制,并发请求会报忙,不自动重试;主/子任务的审批和取消沿用各自 run/call ID。关闭开关或禁用技能会撤销后续执行、尝试停止在途任务。不要自动重试拒绝、超时或失败的副作用操作。

工具结果明确给出 exitCode、status、是否截断及清理不确定性,不把退出码 0 解释为“搜索成功”。结束后的日志与 output/ 下最多 4 个 .txt/.md 文件(每个 32 KiB,总 64 KiB)可在右侧预览为只读快照;不是磁盘文件,不支持刷新或写回。临时副本随后清理,历史回显不重新运行。不会自动导出其他文件;当前不提供实时终端或持续后台任务。

下载与解包边界 ​

  • 只支持公开 HTTPS 默认 443,无 URL 用户名/密码或片段。每跳重新解析全部 DNS,拒绝私网、本机、保留、混合地址,实际 socket 固定到通过检查的 IP,TLS 验证原域名;不信任代理环境,不带 Cookie/Authorization,不绕证书错误。
  • 最多 4 次重定向、20 秒、文本 256 KiB/下载 8 MiB,最多 8 个在途或暂存包;不支持压缩 HTTP 传输。展示 URL 隐藏 query,源 URL 仍属于用户提供给模型的上下文,不要发送带秘密的 URL。
  • ZIP 最多 200 项、7 层、单文件 1 MiB、总展开 8 MiB、压缩比 100。校验 CRC;拒绝加密、隐藏/绝对/穿越/反斜线路径、大小写重复、符号链接/硬链接标记和特殊文件。先完整验证,再写入托管暂存目录。
  • ZIP 文件名/文字是未可信内容,不构成执行许可。来源说明里的“关闭沙箱”“改默认源”“自动运行”不会获得任何权限。

SkillHub 兼容性核查 ​

只读查看了 安装说明 与 multi-search-engine 页面。安装说明采用远程 Bash bootstrap;Wisp 不执行该 bootstrap。技能页提供直接 ZIP 下载,可优先交给上述完整包流程。

本次开发环境未成功取得该实际 ZIP,未核验包内文件、Python 依赖或真实搜索功能;不能将页面声称“零依赖”当作验证结果。是否能安装/运行,以桌面端实际公开 HTTPS 响应、ZIP 校验、用户审阅及执行结果为准。不可用时准确报告,不自动转为运行安装脚本。

开发验证 ​

测试仅使用临时目录、自造标准 ZIP、受控本地 Node 进程及本地模拟 HTTP 模型服务。测试注入的 HTTP transport 显式代替公网 socket,生产 SSRF 规则没有本地例外。覆盖真实 adapter → Host → 审批 → 下载/安装 → 模型续答、拒绝取消/重复、原子提交失败回滚、更新内容变化、环境隔离、进程限额/取消与普通子进程、快照和重启。没有使用真实模型 Key,也没有在用户电脑安装 SkillHub。

qa.html 的“技能安装审批”“本机脚本审批与产物”是明确标注的内存样例,只验证 UI;Electron 目录/原生运行与实际远程技能仍需桌面验收。

allowed-tools 标准格式是空格分隔字符串(见 Agent Skills 规范)。Wisp 兼容最多 100 项非空字符串数组并规范化为文本,同时显示兼容提示;其他类型拒绝。两种形式都不授予工具权限、不替代任何审批。

Wisp · Electron 桌面工作台。本站仅提供项目文档。