核心概念
扩展类型
比较 Kunkun 的插件运行时,选择适合你的类型。
Kunkun 支持多种插件架构,具有不同的能力和隔离级别。你清单中的每条命令恰好选择一种 mode。
快速比较
| 类型 | 运行时 | UI | Node.js 访问 | 用例 |
|---|---|---|---|---|
| Custom-View | BrowserWindow | 完全控制 | 否 | 复杂 SPA、仪表盘、现有 Web 应用 |
| Worker-View | Web Worker | React → 主机渲染 | 否 | Raycast 风格扩展,最大隔离 |
| Node-View | Node.js / Deno 进程 | React → 主机渲染 | 是 | UI + 文件系统/Shell/原生 |
| Worker-Headless | Web Worker | 无 | 否 | 后台命令(浏览器沙箱) |
| Node-Headless | Node.js / Deno 进程 | 无 | 是 | 需要系统访问的后台命令 |
| Service | Node.js / Deno 进程 | 无 | 是 | 为其他扩展和 AI Agent 提供 API |
UI 插件
Custom-View
通过 kunkun-ext:// 加载到隔离的 BrowserWindow 中的静态 SPA。你可以使用任意框架控制整个 UI。
{ "name": "main", "mode": "custom-view", "main": "/", "dist": "dist", "devMain": "http://localhost:5173" }最适合需要完全 UI 控制、迁移现有 Web 应用或希望使用框架特定功能时。→ 指南
Worker-View
React 组件在 Web Worker 中运行;主机将你的组件树渲染为原生 UI(参见扩展运行机制)。一致的样式、强沙箱、快速启动,无需 Node.js。
{ "name": "main", "mode": "worker-view", "main": "dist/App.js" }最适合 Raycast 风格的列表/表单扩展。→ 指南
Node-View
与 worker-view 相同的 UI 模型,但在 Node.js/Deno 进程中运行——因此你可以访问文件系统、Shell 和原生模块。
{ "name": "main", "mode": "node-view", "main": "dist/node/App.js", "runtime": "auto" }无头命令
无 UI——执行逻辑,可选择显示 Toast,然后退出。→ 指南
{ "name": "sync", "mode": "node-headless", "main": "dist/node/Sync.js" }无头命令还可以被调度(interval、cron)或由事件触发。
服务插件
声明一个 services[] 数组,你的扩展将暴露可调用、经过模式验证的方法,其他扩展——以及内置的 AI Agent——可以通过服务代理调用这些方法。→ 指南
运行时选择(Node 模式)
对于 node-view / node-headless / 服务,Kunkun 自动选择运行时:
| 优先级 | 运行时 | 原因 |
|---|---|---|
| 1 | Deno | 最佳沙箱——按域的 --allow-net,限域的 --allow-read/write |
| 2 | Node.js v20+ | Node 权限模型 |
| 3 | utilityProcess | 回退,无沙箱 |
可通过 "runtime": "deno"(或 "node")强制指定。参见权限 → 进程沙箱。
推荐 Deno 是有原因的
Deno 在进程级别按域限制网络访问(--allow-net=api.example.com),而 Node 的模型则更粗粒度。如果你的扩展进行网络 I/O,Deno 能为用户提供更严格的保证。
如何选择
| 你需要… | 使用 |
|---|---|
| 完全 UI 控制 / 现有 Web 应用 | Custom-View |
| Raycast 风格 UI,无需系统访问 | Worker-View |
| UI 和文件系统/Shell/原生 | Node-View |
| 后台工作,浏览器沙箱 | Worker-Headless |
| 需要系统访问的后台工作 | Node-Headless |
| 为其他扩展 / AI 提供 API | Service |