feat(task): replace built-in task adaptors with a sandboxed JS plugin system (#7076)

This commit is contained in:
Calcium-Ion
2026-08-29 18:51:57 +08:00
committed by GitHub
parent 7037ac15bd
commit eb48396d5f
336 changed files with 52333 additions and 6369 deletions
+41
View File
@@ -0,0 +1,41 @@
package plugins
import (
"embed"
"fmt"
"io/fs"
"github.com/QuantumNous/new-api/pkg/jsplugin"
)
//go:embed tasks/*/plugin.js
var taskPlugins embed.FS
func init() {
entries, err := fs.ReadDir(taskPlugins, "tasks")
if err != nil {
panic(fmt.Sprintf("read embedded task plugins: %v", err))
}
for _, entry := range entries {
if !entry.IsDir() {
continue
}
key := entry.Name()
source, sourceErr := Source(key)
if sourceErr != nil {
panic(fmt.Sprintf("read embedded task plugin %s: %v", key, sourceErr))
}
if _, registerErr := jsplugin.DefaultRegistry.RegisterFactory(source, jsplugin.Options{Key: key}); registerErr != nil {
panic(fmt.Sprintf("register embedded task plugin %s: %v", key, registerErr))
}
}
}
// Source returns the embedded factory source for a task plugin key.
func Source(key string) (string, error) {
source, err := taskPlugins.ReadFile("tasks/" + key + "/plugin.js")
if err != nil {
return "", err
}
return string(source), nil
}