跳转到内容

插件清单与格式字段

本页是 Kabegame 插件 package.json(KGPG v3 自描述清单)的字段速查。格式的整体结构见 插件格式,后端选择见 爬虫后端。

「最低版本」标注插件用到该字段/能力时应在 engines.kabegame 声明的最低应用版本。基线:V8 / WebView 插件本身自 4.3.0 起就绪;标注更高版本的字段是后续增量。

.kgpg 目录结构

plugin-name.kgpg
├── package.json # v3 自描述清单
├── dist/main.js 或 crawl.js # main 指向的脚本
├── icon.png # kbIcon
├── configs/*.json # kbRecommendedConfigs
├── providers/*.json5 # kbPathQLProviders
├── metadata_migrations/migrate.js # kbMetadataMigration
├── doc_root/ # kbDoc + kbChangelog + kbAssets
└── templates/description.ejs # kbDescriptionTemplate

package.json 字段

标准 npm 字段

字段类型必填最低版本说明
namestring是4.3.0显示名回退(无点后缀),同时是插件 ID 的首选来源:加载 .kgpg 时 ID 按「调用方显式指定(plugin run --id)→ name → .kgpg 文件名 stem」回落,所以约定 name = 目录名 = 文件名 stem。支持多语言点键。
versionstring是4.3.0语义化版本 major.minor.patch,每段 ≤255。同 ID 升级必须 bump。
descriptionstring是4.3.0默认描述,支持多语言点键。
authorstring | object是4.3.0作者。对象形式取 author.name。
privateboolean否—纯 npm 语义,Kabegame 不读;样例常写 true 防误发 npm。
mainstring是4.3.0入口脚本的包内相对路径。经安全校验(禁 .. / 绝对路径)。
engines.kabegamestring否(强烈建议)4.3.0最低应用版本,仅支持 >=X.Y.Z。是 minAppVersion 的权威来源。
scriptsobject否—npm 构建脚本(如 rspack build);Kabegame 不读,仅打包前本地构建用。

多语言点键:name / description 以及 kbConfig 里的 name / descripts / options[].name 都用扁平点号键(不是嵌套对象):name、name.zh、name.en、name.ja、name.ko、name.zhtw。无点后缀的作为 default 回退。前端按当前 locale 取值。

kb* 专有字段

字段类型必填最低版本说明
kbPackageVersionnumber是4.3.0清单格式版本,必须 ≥3。当前生态一律 3。
kbBackendstring是4.3.0脚本后端:"v8" 或 "webview"。"rhai" 报「Rhai 后端已停止支持」;其它值报错。
kbBaseUrlstring否4.3.0基础 URL。运行时作为 common.base_url 注入;WebView 后端还用作任务窗口初始 URL。空串合法。
kbConfigarray否4.3.0采集对话框表单变量定义数组,顺序即展示顺序。见 kbConfig 变量。
kbLabelsarray否4.4.0插件声明的标签数组。见 kbLabels。
kbIconstring否4.3.0包内图标 PNG 相对路径。
kbDocobject否4.3.0多语言文档映射:键 default/zh/en/ja/ko/zhtw,值为 .md 相对路径。
kbChangelogobject否4.4.0多语言更新日志映射;与 kbDoc 同构,值为 .md 插件根相对路径。
kbAssetsstring[]否4.4.0文档与更新日志共用的资源白名单;每项是插件根相对路径。未声明的 Markdown 本地资源引用会使打包报错。归一化路径以 banner 开头的项另作快捷预览走马灯的橱窗图。
kbRecommendedConfigsstring[]否4.3.0推荐运行配置文件路径数组(configs/*.json)。
kbPathQLProvidersstring[]否4.3.0PathQL provider DSL 文件路径数组(providers/*.json5),后端用。
kbDescriptionTemplatestring否4.3.0图片描述模板 .ejs 路径。
kbMetadataMigrationstring否4.3.0单一 metadata 迁移脚本路径(须 .js,ES module,export migrate)。

所有 kb* 路径字段和 kbAssets 数组项统一走安全校验:非空、包根相对、禁越界的 ..、禁绝对路径 / 盘符 / 前导 /。

kbAssets 数组项、kbDoc / kbChangelog Markdown 引用与运行时 assets[].key 使用同一个插件根坐标系和同一归一化语义:依次 trim、去 Markdown 标题后缀、截断 query/fragment、统一 /、百分号解码、排除外链、去前导 /、折叠路径段,越过插件根时判非法。结果大小写敏感,Markdown 所在目录不参与解析;因此 ./a.png → a.png,位于 doc_root/doc.md 的文档若要引用 doc_root/a.png,也必须写完整的插件根相对路径。运行时 assets 是 { key, dataBase64 }[],顺序与 kbAssets 声明顺序一致。允许 jpg/jpeg/png/gif/webp/bmp;显式资源单文件超过 2 MB 打包失败,总量超过 10 MB 警告。完整归一化路径以 banner 开头(大小写不敏感)的项被视为橱窗图:额外进快捷预览走马灯,按数组声明顺序展示,且允许不被任何 Markdown 引用而不产生警告。

kbConfig 变量

kbConfig 是变量对象数组。每个变量:

字段类型必填说明
keystring是变量名;脚本中 V8 用 custom[key],WebView 用 Kabegame.vars[key]。
typestring是变量类型(见下表)。
namestring(+ 多语言点键)是展示名。
descriptsstring(+ 多语言点键)否说明文案(注意拼写是 descripts)。
default随 type否默认值。
requiredboolean否为 true 时,可见字段必须有非空值,否则任务不会启动。缺省为 false。
min / maxnumber否int / float 的取值范围。
optionsarrayoptions/checkbox 必填选项列表,元素为 { name, variable, when? }(name 支持多语言点键)。
whenobject否条件显示:{ otherKey: [值...] },某 key 当前值 ∈ 数组才显示;多 key 之间为 AND。可挂变量或单个 option 上。
formatstringdate 用dayjs 格式,决定提交的日期字符串;默认 YYYY-MM-DD。
dateMin / dateMaxstringdate 用可选日期范围:YYYY-MM-DD 或关键字 today / yesterday。
widthnumber否表单栅格宽度,1~4,缺省或非法值按 4(独占一行)处理。四列栅格按声明顺序贪心填充,放不下则整体换行;窄屏/移动端折为两列,宽度 1、2 占半行,3、4 占整行。

变量类型

type脚本收到的值说明
intnumber(整数)用 min / max
floatnumber用 min / max
stringstring单行文本
booleanbool开关
datestring受 format / dateMin / dateMax 控制
optionsstring(选中项的 variable)单选下拉;UI 显示 name,脚本收到 variable
liststring[]可变长字符串列表;options 为字符串建议项
checkbox对象 { [variable]: bool }多选;脚本中通过 key.a、key.b 访问;default 可为勾选项数组或 {variable:bool}
path / file / folder / file_or_folderstring路径选择器(分别为文件或文件夹 / 仅文件 / 仅文件夹 / 二者)。前端已实现,未写入 schema,主要面向本地导入类插件。

取值语义

情况脚本收到
字段被 when 隐藏没有这个 key(JavaScript 中为 undefined)
字段可见,但用户没有输入,或清空了带 default 的字段null
其他情况用户输入的有效值,或 key 缺失时回落到 default
required: true 且可见但为空拒绝启动任务
boolean永不为 null;没有 default 时为 false

string/date/path 的空串、未选择的 options、清空的数字、空 list,以及一项都没勾选的 checkbox 都会提交为 null。options 是例外:如果选项中显式声明了 variable: "",空字符串就是合法选项值,不代表空值。

when 按依赖链计算:上游字段隐藏后,它不再参与下游条件匹配。字段级和选项级 when 形成依赖环时,插件会被拒绝安装。

options 示例

{
"key": "quality",
"type": "options",
"name": "图片质量",
"options": [
{ "name": "高清", "variable": "high" },
{ "name": "中等", "variable": "medium" }
],
"default": "high"
}

checkbox 示例(脚本中 wallpaper_type.desktop、wallpaper_type.mobile)

{
"key": "wallpaper_type",
"type": "checkbox",
"name": "壁纸类型",
"options": [
{ "name": "桌面壁纸", "variable": "desktop" },
{ "name": "手机壁纸", "variable": "mobile" }
],
"default": ["desktop", "mobile"]
}

when 条件显示示例(source 取 user / bookmark 时才显示 artist_id)

{
"key": "artist_id",
"type": "string",
"name": "画师 UID",
"required": true,
"when": { "source": ["user", "bookmark"] }
}

kbLabels

4.4.0 插件声明的标签,渲染在源列表 / 详情里。数组元素:

字段类型必填说明
idstring是标签 id。命中预定义集合时用内置文案 + 颜色。
namestring否仅未知 id 的回退显示名。
descstring否仅未知 id 的回退说明。

预定义标签

命中下列 id 时只填 id 即可,文案与颜色由应用提供:

id含义颜色
auth.needCookie该源可能需要先在畅游里登录取得 cookie 才能爬取warning
auth.needProxy该源在中国大陆可能需要代理才能完整访问warning
content.res.mobile提供移动端 / 竖屏分辨率壁纸primary
content.res.desktop提供桌面端 / 横屏分辨率壁纸primary
content.nsfw可能含 NSFW / R-18 内容danger
content.type.video提供视频 / 动图壁纸success
{
"kbLabels": [
{ "id": "auth.needCookie" },
{ "id": "content.nsfw" }
]
}

完整示例骨架

{
"name": "myplugin", // 插件 ID(优先于文件名);也是显示名回退
"version": "0.1.0",
"description": "…",
"description.en": "…",
"author": "You",
"private": true, // npm 语义,Kabegame 忽略
"engines": { "kabegame": ">=4.4.0" }, // = minAppVersion 权威来源
"kbPackageVersion": 3, // 必须 ≥3
"kbBackend": "v8", // v8 | webview
"main": "dist/main.js", // v8: dist/main.js;webview: crawl.js
"kbBaseUrl": "https://example.com", // → common.base_url
"kbLabels": [{ "id": "auth.needCookie" }], // 4.4.0+
"kbConfig": [ /* 变量定义 */ ],
"kbIcon": "icon.png",
"kbDoc": { "default": "doc_root/doc.md", "en": "doc_root/doc.en.md" },
"kbChangelog": { "default": "CHANGELOG.md" },
"kbAssets": ["doc_root/images/example.png"],
"kbRecommendedConfigs": ["configs/x.json"],
"kbPathQLProviders": ["providers/tag_provider.json5"],
"kbDescriptionTemplate": "templates/description.ejs",
"kbMetadataMigration": "metadata_migrations/migrate.js"
}

延伸阅读