@luban-code/luban-code 1.100.2 → 1.100.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.zh.md +1 -1
- package/dist/acp.js +303 -299
- package/dist/cli-plugin.js +71 -71
- package/dist/cli.js +320 -316
- package/dist/extension.js +377 -373
- package/package.json +3 -1
- package/registry/README.md +14 -0
- package/registry/entry.schema.json +17 -1
- package/registry/registry.json +165 -1
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@luban-code/luban-code",
|
|
3
3
|
"displayName": "Luban",
|
|
4
4
|
"description": "Luban — a standalone sidebar AI coding agent (multi-provider, OpenAI-compatible, zero source patches)",
|
|
5
|
-
"version": "1.100.
|
|
5
|
+
"version": "1.100.4",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "eppen (liuhualiang)",
|
|
@@ -86,6 +86,8 @@
|
|
|
86
86
|
"test:i18n": "node scripts/test-i18n.js",
|
|
87
87
|
"test:css": "node scripts/test-css-vars.js",
|
|
88
88
|
"test:webdav": "node scripts/test-webdav.js",
|
|
89
|
+
"test:mcp-config": "node scripts/test-mcp-config.js",
|
|
90
|
+
"test:mcp-ext": "node scripts/test-mcp-ext.js",
|
|
89
91
|
"test:webdav-override": "node scripts/test-webdav-override.js",
|
|
90
92
|
"test:browser-events": "node scripts/test-browser-events.js",
|
|
91
93
|
"test:browser-tool": "node scripts/test-browser-tool.js",
|
package/registry/README.md
CHANGED
|
@@ -64,6 +64,18 @@ luban skill remove changelog-draft # 移进 ~/.luban/skills-trash/
|
|
|
64
64
|
| `permissions` | `{}`(纯 Markdown,没有执行能力) |
|
|
65
65
|
| 包内清单 | `SKILL.md` 的 frontmatter:`name` 必须等于条目名、`version` 可选但写了就要一致 |
|
|
66
66
|
|
|
67
|
+
纯主题条目(只有 theme、没有 tools)同样是 plugin,只是 `tools` 写 `[]` 并带上 `theme`:
|
|
68
|
+
|
|
69
|
+
| 字段 | 纯主题插件的值 |
|
|
70
|
+
|---|---|
|
|
71
|
+
| `type` | `"plugin"` |
|
|
72
|
+
| `tools` | `[]`(不新增工具) |
|
|
73
|
+
| `theme` | `{ label, tokens }`,与包内 `plugin.json` **逐字一致**(`sameTheme` 比对 label + 排序后的 tokens) |
|
|
74
|
+
| `permissions` | 五项全 `false`(它确实不执行任何东西,但字段要写) |
|
|
75
|
+
| 包内清单 | `plugin.json`,无 `main` / `index.js` / `tools`;装完**不需要信任确认** |
|
|
76
|
+
|
|
77
|
+
空 `tools` 必须由 `theme` 证明「是故意的」:既没有 `tools` 也没有 `theme` 的条目判坏,
|
|
78
|
+
否则「忘了写 tools」和「纯数据插件」在索引里长得一模一样。
|
|
67
79
|
```
|
|
68
80
|
sourceSha256 算法(目录哈希,与机器 / 时间无关)
|
|
69
81
|
1. 遍历目录,跳过 node_modules / .git / .DS_Store,符号链接跳过并告警;
|
|
@@ -90,6 +102,8 @@ node scripts/registry-tool.mjs hash /tmp/lp/plugins/demo
|
|
|
90
102
|
| `permissions` 出现未知权限键 | error | 防止悄悄扩权绕过展示 |
|
|
91
103
|
| 签名与内容不符 | error | 改了权限却没重签 = 篡改 |
|
|
92
104
|
| 索引 tools ≠ 已安装 plugin.json | error | 防「先上架后换包」 |
|
|
105
|
+
| 索引 theme ≠ 包内 plugin.json | error | 纯主题插件唯一的清单校验;市场展示的配色必须与装到盘上的一致 |
|
|
106
|
+
| plugin 既无 tools 也无 theme | error | 纯数据插件要显式写 theme,不能靠「空 tools」蒙混 |
|
|
93
107
|
| `type=skill` 却声明了 `tools` | error | 技能不新增工具,声明了说明字段用错 |
|
|
94
108
|
| `type=skill` 却声明了 `permissions` | warn | 忽略即可;技能没有执行能力 |
|
|
95
109
|
| 索引 name / version ≠ 已安装 `SKILL.md` 的 frontmatter | error | 技能侧的「先上架后换包」检查 |
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
},
|
|
54
54
|
"tools": {
|
|
55
55
|
"type": "array",
|
|
56
|
-
"description": "工具清单,必须与包内 plugin.json
|
|
56
|
+
"description": "工具清单,必须与包内 plugin.json 逐字一致(校验脚本比对)。纯主题插件写 []",
|
|
57
57
|
"items": {
|
|
58
58
|
"type": "object",
|
|
59
59
|
"additionalProperties": false,
|
|
@@ -66,6 +66,22 @@
|
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
},
|
|
69
|
+
"theme": {
|
|
70
|
+
"type": "object",
|
|
71
|
+
"description": "纯数据主题(L0):只有 theme、没有 tools 的插件合法 —— 它不 require 任何代码,装完也不需要信任确认。token 名与 media/panel.css 的 :root 变量同名(去掉 -- 前缀)",
|
|
72
|
+
"additionalProperties": false,
|
|
73
|
+
"required": ["label", "tokens"],
|
|
74
|
+
"properties": {
|
|
75
|
+
"label": { "type": "string", "minLength": 1, "description": "界面显示名,如「樱花」" },
|
|
76
|
+
"description": { "type": "string", "description": "一句话说明适用场景,市场里展示" },
|
|
77
|
+
"tokens": {
|
|
78
|
+
"type": "object",
|
|
79
|
+
"minProperties": 1,
|
|
80
|
+
"description": "颜色 / 尺寸 token。名字必须在 plugin.js 的白名单内;值逐项过正则,非法项丢弃而不是整份判坏",
|
|
81
|
+
"additionalProperties": { "type": "string", "minLength": 1 }
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
},
|
|
69
85
|
"permissions": {
|
|
70
86
|
"type": "object",
|
|
71
87
|
"description": "L1 核心:作者自报的实际能力。readOnly 只是工具语义,不能推翻这里;审核以本块为准",
|
package/registry/registry.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"registryVersion": 1,
|
|
3
|
-
"updatedAt": "2026-11-
|
|
3
|
+
"updatedAt": "2026-11-14T02:08:29Z",
|
|
4
4
|
"schema": "./entry.schema.json",
|
|
5
5
|
"signingKeys": [
|
|
6
6
|
{
|
|
@@ -173,6 +173,170 @@
|
|
|
173
173
|
"keyId": "registry-ci",
|
|
174
174
|
"sig": "vvpXf4ApzGh1JpT7B7GuLe4n75s/71GAznRNijP2j3u4LZhkhBZBa36ZjqnhA2mvJrRYyBWSlthujANuelMABA=="
|
|
175
175
|
}
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"name": "brooks-lint",
|
|
179
|
+
"displayName": "Brooks-Lint 代码质量审查",
|
|
180
|
+
"description": "基于十二本经典软件工程书籍的代码质量审查方法论:从六个 decay risk 维度诊断代码,输出结构化发现与健康评分",
|
|
181
|
+
"type": "skill",
|
|
182
|
+
"version": "0.1.0",
|
|
183
|
+
"author": "liuhualiang",
|
|
184
|
+
"license": "MIT",
|
|
185
|
+
"repo": "https://github.com/eppen/luban-plugins",
|
|
186
|
+
"tags": [
|
|
187
|
+
"code-review",
|
|
188
|
+
"architecture",
|
|
189
|
+
"quality"
|
|
190
|
+
],
|
|
191
|
+
"install": {
|
|
192
|
+
"type": "git",
|
|
193
|
+
"url": "git@github.com:eppen/luban-plugins.git",
|
|
194
|
+
"subdir": "skills/brooks-lint",
|
|
195
|
+
"target": "global"
|
|
196
|
+
},
|
|
197
|
+
"sourceSha256": "19764b4fc4f450d62fe5c49716a2915937c60d94945a48a90638064dca7aaa8e",
|
|
198
|
+
"ctxApi": ">=0.1 <1.0",
|
|
199
|
+
"tools": [],
|
|
200
|
+
"permissions": {},
|
|
201
|
+
"review": {
|
|
202
|
+
"status": "pending",
|
|
203
|
+
"notes": "技能无执行能力;正文只提供代码审查方法论(六个 decay risk 维度、Iron Law 诊断流程、报告模板),不要求执行任何命令或修改文件。移植自 hyhmrright/brooks-lint(MIT)。"
|
|
204
|
+
},
|
|
205
|
+
"signature": {
|
|
206
|
+
"algo": "ed25519",
|
|
207
|
+
"keyId": "registry-ci",
|
|
208
|
+
"sig": "e9/VuEVrDkk7p9AjRamkuFROIIyixDL3SAZCq3+YdXDAd1NdaZztBqH+pvT0VpeIYFa6z1lSx+dOqbsAIhIbDw=="
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"name": "theme-sakura",
|
|
213
|
+
"displayName": "樱花主题",
|
|
214
|
+
"description": "浅粉底 + 樱红强调的 Luban 界面主题,纯数据无工具",
|
|
215
|
+
"type": "plugin",
|
|
216
|
+
"version": "0.1.0",
|
|
217
|
+
"author": "liuhualiang",
|
|
218
|
+
"license": "MIT",
|
|
219
|
+
"repo": "https://github.com/eppen/luban-plugins",
|
|
220
|
+
"tags": [
|
|
221
|
+
"theme",
|
|
222
|
+
"ui"
|
|
223
|
+
],
|
|
224
|
+
"install": {
|
|
225
|
+
"type": "git",
|
|
226
|
+
"url": "git@github.com:eppen/luban-plugins.git",
|
|
227
|
+
"subdir": "plugins/theme-sakura",
|
|
228
|
+
"target": "global"
|
|
229
|
+
},
|
|
230
|
+
"sourceSha256": "ee01b21aecb54297191d6aa9e5fc468129f38ff289493b9258580aae4d501afc",
|
|
231
|
+
"ctxApi": ">=0.1 <1.0",
|
|
232
|
+
"theme": {
|
|
233
|
+
"label": "樱花",
|
|
234
|
+
"description": "浅粉底 + 樱红强调,圆角偏大,适合浅色工作区",
|
|
235
|
+
"tokens": {
|
|
236
|
+
"bg": "#fdf6f8",
|
|
237
|
+
"fg": "#3d2b33",
|
|
238
|
+
"panel": "#fffafc",
|
|
239
|
+
"border": "#f0d4de",
|
|
240
|
+
"accent": "#e26fa4",
|
|
241
|
+
"accent-fg": "#ffffff",
|
|
242
|
+
"muted": "#9b7a88",
|
|
243
|
+
"code-bg": "#f7e8ee",
|
|
244
|
+
"surface": "#fffafc",
|
|
245
|
+
"surface-2": "#fbeef3",
|
|
246
|
+
"hover": "rgba(226, 111, 164, 0.10)",
|
|
247
|
+
"link": "#c94f86",
|
|
248
|
+
"ok": "#3f9d6e",
|
|
249
|
+
"warn": "#c98a2e",
|
|
250
|
+
"error": "#d64550",
|
|
251
|
+
"radius-sm": "6",
|
|
252
|
+
"radius": "10",
|
|
253
|
+
"radius-lg": "14"
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
"tools": [],
|
|
257
|
+
"permissions": {
|
|
258
|
+
"fsRead": false,
|
|
259
|
+
"fsWrite": false,
|
|
260
|
+
"shell": false,
|
|
261
|
+
"net": false,
|
|
262
|
+
"env": false
|
|
263
|
+
},
|
|
264
|
+
"review": {
|
|
265
|
+
"status": "reviewed",
|
|
266
|
+
"reviewedBy": "liuhualiang",
|
|
267
|
+
"reviewedAt": "2026-11-14T02:07:46Z",
|
|
268
|
+
"notes": "纯数据插件:只提供 theme.tokens,无 index.js、无 tools,安装与加载都不执行任何代码。tokens 取值由 plugin.js 白名单逐项校验(非法项丢弃),注入时又逐条复验。"
|
|
269
|
+
},
|
|
270
|
+
"signature": {
|
|
271
|
+
"algo": "ed25519",
|
|
272
|
+
"keyId": "registry-ci",
|
|
273
|
+
"sig": "InPR/qeS6d2G0KliVgk9rqYHPGIUa/80VsTNc4Z5hD4rVvSJUc8lpG8iX8EARJGtVaOZSLjLawQ/W8uu/52MAg=="
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"name": "theme-midnight",
|
|
278
|
+
"displayName": "午夜主题",
|
|
279
|
+
"description": "深蓝紫底 + 青蓝强调的 Luban 界面主题,对比度高,纯数据无工具",
|
|
280
|
+
"type": "plugin",
|
|
281
|
+
"version": "0.1.0",
|
|
282
|
+
"author": "liuhualiang",
|
|
283
|
+
"license": "MIT",
|
|
284
|
+
"repo": "https://github.com/eppen/luban-plugins",
|
|
285
|
+
"tags": [
|
|
286
|
+
"theme",
|
|
287
|
+
"ui"
|
|
288
|
+
],
|
|
289
|
+
"install": {
|
|
290
|
+
"type": "git",
|
|
291
|
+
"url": "git@github.com:eppen/luban-plugins.git",
|
|
292
|
+
"subdir": "plugins/theme-midnight",
|
|
293
|
+
"target": "global"
|
|
294
|
+
},
|
|
295
|
+
"sourceSha256": "ad78f3284d30cfa433ec7d880ca145dcfd1ac6ada11403007df690405345632b",
|
|
296
|
+
"ctxApi": ">=0.1 <1.0",
|
|
297
|
+
"theme": {
|
|
298
|
+
"label": "午夜",
|
|
299
|
+
"description": "深蓝紫底 + 青蓝强调,对比度高,适合深色工作区",
|
|
300
|
+
"tokens": {
|
|
301
|
+
"bg": "#0f1220",
|
|
302
|
+
"fg": "#e6e9f5",
|
|
303
|
+
"panel": "#161a2e",
|
|
304
|
+
"border": "#2a3050",
|
|
305
|
+
"accent": "#6c8cff",
|
|
306
|
+
"accent-fg": "#0b0e1a",
|
|
307
|
+
"muted": "#8a90b0",
|
|
308
|
+
"code-bg": "#1a1f38",
|
|
309
|
+
"surface": "#161a2e",
|
|
310
|
+
"surface-2": "#1e2440",
|
|
311
|
+
"hover": "rgba(108, 140, 255, 0.14)",
|
|
312
|
+
"link": "#7fb0ff",
|
|
313
|
+
"ok": "#4fd1a5",
|
|
314
|
+
"warn": "#e0b04a",
|
|
315
|
+
"error": "#ff6b7a",
|
|
316
|
+
"radius-sm": "4",
|
|
317
|
+
"radius": "8",
|
|
318
|
+
"radius-lg": "12"
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
"tools": [],
|
|
322
|
+
"permissions": {
|
|
323
|
+
"fsRead": false,
|
|
324
|
+
"fsWrite": false,
|
|
325
|
+
"shell": false,
|
|
326
|
+
"net": false,
|
|
327
|
+
"env": false
|
|
328
|
+
},
|
|
329
|
+
"review": {
|
|
330
|
+
"status": "reviewed",
|
|
331
|
+
"reviewedBy": "liuhualiang",
|
|
332
|
+
"reviewedAt": "2026-11-14T02:07:46Z",
|
|
333
|
+
"notes": "纯数据插件:只提供 theme.tokens,无 index.js、无 tools,安装与加载都不执行任何代码。tokens 取值由 plugin.js 白名单逐项校验(非法项丢弃),注入时又逐条复验。"
|
|
334
|
+
},
|
|
335
|
+
"signature": {
|
|
336
|
+
"algo": "ed25519",
|
|
337
|
+
"keyId": "registry-ci",
|
|
338
|
+
"sig": "TiLK6rNRSm83rHO1uSCosY2rp6Zh1uriGVhMatv+Wu4lfj4/Z/Sp6Oy3d14sYvM15sSSMDnsYvDBpMT/E9o3CA=="
|
|
339
|
+
}
|
|
176
340
|
}
|
|
177
341
|
]
|
|
178
342
|
}
|