@michengai/dsh-skills-manager 1.2.19 → 1.2.21
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/CHANGELOG.md +11 -0
- package/CHANGELOG.zh-CN.md +11 -0
- package/README.md +10 -2
- package/README.zh-CN.md +10 -2
- package/assets/icon.svg +29 -0
- package/lib/client.js +14 -6
- package/lib/core.js +335 -44
- package/lib/index.js +59 -47
- package/lib/repository-updates.js +5 -5
- package/package.json +4 -3
package/lib/index.js
CHANGED
|
@@ -18,6 +18,10 @@ import {
|
|
|
18
18
|
getProviderSkill,
|
|
19
19
|
userRoots,
|
|
20
20
|
setRootPath,
|
|
21
|
+
addCustomSources,
|
|
22
|
+
updateCustomSource,
|
|
23
|
+
removeCustomSource,
|
|
24
|
+
scanCustomSourceCandidates,
|
|
21
25
|
projectRoots,
|
|
22
26
|
resolveWorkspaceTarget,
|
|
23
27
|
listWorkspaces,
|
|
@@ -357,7 +361,7 @@ function apply(ctx, config) {
|
|
|
357
361
|
}
|
|
358
362
|
ctx.effect(() => ctx.webServer.register({
|
|
359
363
|
kind: "prefix",
|
|
360
|
-
path: "/api/dsh-skills-manager",
|
|
364
|
+
path: "/api/michengai/dsh-skills-manager",
|
|
361
365
|
handler: async (req, res) => {
|
|
362
366
|
const u = new URL(req.url, "http://localhost");
|
|
363
367
|
const path = u.pathname.replace(/\/+$/, "");
|
|
@@ -400,22 +404,22 @@ function apply(ctx, config) {
|
|
|
400
404
|
json(res, hostError.statusCode, { ok: false, code: hostError.code, error: hostError.error });
|
|
401
405
|
return;
|
|
402
406
|
}
|
|
403
|
-
if (req.method === "GET" && path === "/api/dsh-skills-manager/state") {
|
|
407
|
+
if (req.method === "GET" && path === "/api/michengai/dsh-skills-manager/state") {
|
|
404
408
|
return run(res, stateWithSources);
|
|
405
409
|
}
|
|
406
|
-
if (req.method === "GET" && path === "/api/dsh-skills-manager/sidebar-entry") {
|
|
410
|
+
if (req.method === "GET" && path === "/api/michengai/dsh-skills-manager/sidebar-entry") {
|
|
407
411
|
return run(res, async () => ({ enabled: await getSidebarEntry() }));
|
|
408
412
|
}
|
|
409
|
-
if (req.method === "GET" && path === "/api/dsh-skills-manager/online-update") {
|
|
413
|
+
if (req.method === "GET" && path === "/api/michengai/dsh-skills-manager/online-update") {
|
|
410
414
|
return run(res, async () => ({ enabled: await isUpdateEnabled(), locked: hostDisabled }));
|
|
411
415
|
}
|
|
412
|
-
if ((req.method === "GET" || req.method === "HEAD") && path === "/api/dsh-skills-manager/workspaces") {
|
|
416
|
+
if ((req.method === "GET" || req.method === "HEAD") && path === "/api/michengai/dsh-skills-manager/workspaces") {
|
|
413
417
|
return run(res, async () => ({ items: await listWorkspaces(registeredWorkspacePaths(ctx) ?? []) }), void 0, req.method === "HEAD");
|
|
414
418
|
}
|
|
415
|
-
if ((req.method === "GET" || req.method === "HEAD") && path === "/api/dsh-skills-manager/repositories") {
|
|
419
|
+
if ((req.method === "GET" || req.method === "HEAD") && path === "/api/michengai/dsh-skills-manager/repositories") {
|
|
416
420
|
return run(res, () => enqueueMutation(() => repositories.list()), void 0, req.method === "HEAD");
|
|
417
421
|
}
|
|
418
|
-
if (req.method === "GET" && (path === "/api/dsh-skills-manager/clawhub/list" || path === "/api/dsh-skills-manager/clawhub/search")) {
|
|
422
|
+
if (req.method === "GET" && (path === "/api/michengai/dsh-skills-manager/clawhub/list" || path === "/api/michengai/dsh-skills-manager/clawhub/search")) {
|
|
419
423
|
const searching = path.endsWith("/search");
|
|
420
424
|
const allowed = searching ? ["q", "limit"] : ["limit", "cursor", "sort"];
|
|
421
425
|
if ([...u.searchParams.keys()].some((key) => !allowed.includes(key) || u.searchParams.getAll(key).length !== 1) || searching && !u.searchParams.has("q")) {
|
|
@@ -425,7 +429,7 @@ function apply(ctx, config) {
|
|
|
425
429
|
const parameter = (key) => u.searchParams.get(key) ?? void 0;
|
|
426
430
|
return run(res, () => searching ? searchClawHub(parameter("q"), { limit: parameter("limit") }) : listClawHub({ limit: parameter("limit"), sort: parameter("sort"), cursor: parameter("cursor") }));
|
|
427
431
|
}
|
|
428
|
-
if (req.method === "GET" && path === "/api/dsh-skills-manager/skills-sh/search") {
|
|
432
|
+
if (req.method === "GET" && path === "/api/michengai/dsh-skills-manager/skills-sh/search") {
|
|
429
433
|
const queries = u.searchParams.getAll("q");
|
|
430
434
|
if (queries.length !== 1) {
|
|
431
435
|
json(res, 400, { ok: false, code: "error.catalog.query", error: "\u641C\u7D22\u8BCD\u4E0D\u80FD\u4E3A\u7A7A\u4E14\u4E0D\u80FD\u8D85\u8FC7 100 \u4E2A\u5B57\u7B26" });
|
|
@@ -434,9 +438,9 @@ function apply(ctx, config) {
|
|
|
434
438
|
return run(res, () => searchSkillsSh(queries[0]));
|
|
435
439
|
}
|
|
436
440
|
if (req.method === "HEAD") {
|
|
437
|
-
if (path === "/api/dsh-skills-manager/state") return run(res, stateWithSources, void 0, true);
|
|
438
|
-
if (path === "/api/dsh-skills-manager/sidebar-entry") return run(res, async () => ({ enabled: await getSidebarEntry() }), void 0, true);
|
|
439
|
-
if (path === "/api/dsh-skills-manager/online-update") return run(res, async () => ({ enabled: await isUpdateEnabled(), locked: hostDisabled }), void 0, true);
|
|
441
|
+
if (path === "/api/michengai/dsh-skills-manager/state") return run(res, stateWithSources, void 0, true);
|
|
442
|
+
if (path === "/api/michengai/dsh-skills-manager/sidebar-entry") return run(res, async () => ({ enabled: await getSidebarEntry() }), void 0, true);
|
|
443
|
+
if (path === "/api/michengai/dsh-skills-manager/online-update") return run(res, async () => ({ enabled: await isUpdateEnabled(), locked: hostDisabled }), void 0, true);
|
|
440
444
|
json(res, 405, { ok: false, code: "error.proto.method", error: `method not allowed: ${req.method}` }, true);
|
|
441
445
|
return;
|
|
442
446
|
}
|
|
@@ -449,17 +453,17 @@ function apply(ctx, config) {
|
|
|
449
453
|
json(res, requestError.statusCode, { ok: false, code: requestError.code, error: requestError.error });
|
|
450
454
|
return;
|
|
451
455
|
}
|
|
452
|
-
const body = await readBody(req, path === "/api/dsh-skills-manager/upload" ? MAX_UPLOAD_BODY_BYTES : void 0);
|
|
453
|
-
if (path.startsWith("/api/dsh-skills-manager/repositories/") && (!body || typeof body !== "object" || Array.isArray(body))) {
|
|
456
|
+
const body = await readBody(req, path === "/api/michengai/dsh-skills-manager/upload" ? MAX_UPLOAD_BODY_BYTES : void 0);
|
|
457
|
+
if (path.startsWith("/api/michengai/dsh-skills-manager/repositories/") && (!body || typeof body !== "object" || Array.isArray(body))) {
|
|
454
458
|
json(res, 400, { ok: false, code: "error.repo.invalid", error: "\u4ED3\u5E93\u53C2\u6570\u5FC5\u987B\u662F\u5BF9\u8C61" });
|
|
455
459
|
return;
|
|
456
460
|
}
|
|
457
|
-
if (path === "/api/dsh-skills-manager/browse") {
|
|
461
|
+
if (path === "/api/michengai/dsh-skills-manager/browse") {
|
|
458
462
|
return run(res, () => browseDirectories(body.path));
|
|
459
463
|
}
|
|
460
|
-
if (path === "/api/dsh-skills-manager/repositories/refresh") return run(res, () => repositories.refresh(body));
|
|
461
|
-
if (path === "/api/dsh-skills-manager/catalog/detail") return run(res, () => readCatalogSkill(body));
|
|
462
|
-
if (path === "/api/dsh-skills-manager/catalog/install") {
|
|
464
|
+
if (path === "/api/michengai/dsh-skills-manager/repositories/refresh") return run(res, () => repositories.refresh(body));
|
|
465
|
+
if (path === "/api/michengai/dsh-skills-manager/catalog/detail") return run(res, () => readCatalogSkill(body));
|
|
466
|
+
if (path === "/api/michengai/dsh-skills-manager/catalog/install") {
|
|
463
467
|
return run(res, async () => {
|
|
464
468
|
if (body.root !== void 0 && body.root !== "dsh" && body.root !== "agents") throw Object.assign(new Error("\u6280\u80FD\u5B89\u88C5\u4F4D\u7F6E\u65E0\u6548"), { statusCode: 400, code: "error.repo.invalid" });
|
|
465
469
|
if (body.workspace !== void 0 && body.root !== void 0 && body.root !== "dsh") throw Object.assign(new Error("\u5DE5\u4F5C\u533A\u53EA\u80FD\u5B89\u88C5\u5230\u9879\u76EE DSH skills"), { statusCode: 400, code: "error.repo.invalid" });
|
|
@@ -472,7 +476,7 @@ function apply(ctx, config) {
|
|
|
472
476
|
}
|
|
473
477
|
return enqueueMutation(() => {
|
|
474
478
|
switch (path) {
|
|
475
|
-
case "/api/dsh-skills-manager/sidebar-entry":
|
|
479
|
+
case "/api/michengai/dsh-skills-manager/sidebar-entry":
|
|
476
480
|
return run(res, async () => {
|
|
477
481
|
if (!body || typeof body.enabled !== "boolean") {
|
|
478
482
|
throw Object.assign(new Error("enabled \u5FC5\u987B\u662F\u5E03\u5C14\u503C"), { statusCode: 400, code: "error.proto.invalidParams" });
|
|
@@ -480,7 +484,7 @@ function apply(ctx, config) {
|
|
|
480
484
|
const enabled = await setSidebarEntry(body.enabled);
|
|
481
485
|
return { enabled };
|
|
482
486
|
});
|
|
483
|
-
case "/api/dsh-skills-manager/online-update":
|
|
487
|
+
case "/api/michengai/dsh-skills-manager/online-update":
|
|
484
488
|
return run(res, async () => {
|
|
485
489
|
if (!body || typeof body.enabled !== "boolean") {
|
|
486
490
|
throw Object.assign(new Error("enabled \u5FC5\u987B\u662F\u5E03\u5C14\u503C"), { statusCode: 400, code: "error.proto.invalidParams" });
|
|
@@ -491,65 +495,73 @@ function apply(ctx, config) {
|
|
|
491
495
|
const enabled = await setOnlineUpdate(body.enabled);
|
|
492
496
|
return { enabled };
|
|
493
497
|
});
|
|
494
|
-
case "/api/dsh-skills-manager/repositories/add":
|
|
498
|
+
case "/api/michengai/dsh-skills-manager/repositories/add":
|
|
495
499
|
return run(res, () => repositories.add(body));
|
|
496
|
-
case "/api/dsh-skills-manager/repositories/remove":
|
|
500
|
+
case "/api/michengai/dsh-skills-manager/repositories/remove":
|
|
497
501
|
return run(res, () => repositories.remove(body));
|
|
498
|
-
case "/api/dsh-skills-manager/repositories/detail":
|
|
502
|
+
case "/api/michengai/dsh-skills-manager/repositories/detail":
|
|
499
503
|
return run(res, () => repositories.detail(body));
|
|
500
|
-
case "/api/dsh-skills-manager/repositories/install":
|
|
504
|
+
case "/api/michengai/dsh-skills-manager/repositories/install":
|
|
501
505
|
return run(res, () => repositories.install(body, registeredWorkspacePaths(ctx)), afterWrite);
|
|
502
|
-
case "/api/dsh-skills-manager/repositories/uninstall":
|
|
506
|
+
case "/api/michengai/dsh-skills-manager/repositories/uninstall":
|
|
503
507
|
return run(res, () => repositories.uninstall(body), afterWrite);
|
|
504
|
-
case "/api/dsh-skills-manager/repositories/preview":
|
|
508
|
+
case "/api/michengai/dsh-skills-manager/repositories/preview":
|
|
505
509
|
return run(res, () => repositories.preview(body));
|
|
506
|
-
case "/api/dsh-skills-manager/repositories/update":
|
|
510
|
+
case "/api/michengai/dsh-skills-manager/repositories/update":
|
|
507
511
|
return run(res, () => repositories.update(body), afterWrite);
|
|
508
|
-
case "/api/dsh-skills-manager/repositories/rollback":
|
|
512
|
+
case "/api/michengai/dsh-skills-manager/repositories/rollback":
|
|
509
513
|
return run(res, () => repositories.rollback(body), afterWrite);
|
|
510
|
-
case "/api/dsh-skills-manager/workspace-skills":
|
|
514
|
+
case "/api/michengai/dsh-skills-manager/workspace-skills":
|
|
511
515
|
return run(res, async () => {
|
|
512
516
|
const snapshot = await workspaceSkills(body.workspace, registeredWorkspacePaths(ctx));
|
|
513
517
|
return "roots" in snapshot ? attachSources(snapshot) : snapshot;
|
|
514
518
|
});
|
|
515
|
-
case "/api/dsh-skills-manager/enable":
|
|
519
|
+
case "/api/michengai/dsh-skills-manager/enable":
|
|
516
520
|
return run(res, () => withScope(body, async (scope) => setSkillEnabled(await requestRoot(String(body.root || "dsh"), scope?.projectCwds), String(body.name || ""), true, log)), afterWrite);
|
|
517
|
-
case "/api/dsh-skills-manager/disable":
|
|
521
|
+
case "/api/michengai/dsh-skills-manager/disable":
|
|
518
522
|
return run(res, () => withScope(body, async (scope) => setSkillEnabled(await requestRoot(String(body.root || "dsh"), scope?.projectCwds), String(body.name || ""), false, log)), afterWrite);
|
|
519
|
-
case "/api/dsh-skills-manager/source-enable":
|
|
523
|
+
case "/api/michengai/dsh-skills-manager/source-enable":
|
|
520
524
|
return run(res, () => withScope(body, (scope) => setSourceEnabled(String(body.root || ""), true, log, scopedOptions(scope))), afterWrite);
|
|
521
|
-
case "/api/dsh-skills-manager/source-disable":
|
|
525
|
+
case "/api/michengai/dsh-skills-manager/source-disable":
|
|
522
526
|
return run(res, () => withScope(body, (scope) => setSourceEnabled(String(body.root || ""), false, log, scopedOptions(scope))), afterWrite);
|
|
523
|
-
case "/api/dsh-skills-manager/root-path":
|
|
527
|
+
case "/api/michengai/dsh-skills-manager/root-path":
|
|
524
528
|
return run(res, () => setRootPath(String(body.key || ""), body.path === void 0 ? null : body.path), afterWrite);
|
|
525
|
-
case "/api/dsh-skills-manager/
|
|
529
|
+
case "/api/michengai/dsh-skills-manager/custom-source-add":
|
|
530
|
+
return run(res, () => addCustomSources(Array.isArray(body.sources) ? body.sources : body), afterWrite);
|
|
531
|
+
case "/api/michengai/dsh-skills-manager/custom-source-update":
|
|
532
|
+
return run(res, () => updateCustomSource(String(body.id || ""), body), afterWrite);
|
|
533
|
+
case "/api/michengai/dsh-skills-manager/custom-source-remove":
|
|
534
|
+
return run(res, () => removeCustomSource(String(body.id || "")), afterWrite);
|
|
535
|
+
case "/api/michengai/dsh-skills-manager/custom-source-scan":
|
|
536
|
+
return run(res, () => scanCustomSourceCandidates(body.path));
|
|
537
|
+
case "/api/michengai/dsh-skills-manager/category-create":
|
|
526
538
|
return run(res, () => withScope(body, (scope) => createCategory(String(body.root || ""), String(body.name || ""), log, scopedOptions(scope))));
|
|
527
|
-
case "/api/dsh-skills-manager/category-rename":
|
|
539
|
+
case "/api/michengai/dsh-skills-manager/category-rename":
|
|
528
540
|
return run(res, () => withScope(body, (scope) => renameCategory(String(body.root || ""), String(body.id || ""), String(body.name || ""), log, scopedOptions(scope))));
|
|
529
|
-
case "/api/dsh-skills-manager/category-delete":
|
|
541
|
+
case "/api/michengai/dsh-skills-manager/category-delete":
|
|
530
542
|
return run(res, () => withScope(body, (scope) => deleteCategory(String(body.root || ""), String(body.id || ""), log, scopedOptions(scope))));
|
|
531
|
-
case "/api/dsh-skills-manager/category-assign":
|
|
543
|
+
case "/api/michengai/dsh-skills-manager/category-assign":
|
|
532
544
|
return run(res, () => withScope(body, (scope) => assignSkillCategory(String(body.root || ""), String(body.name || ""), String(body.category || ""), log, scopedOptions(scope))));
|
|
533
|
-
case "/api/dsh-skills-manager/category-move":
|
|
545
|
+
case "/api/michengai/dsh-skills-manager/category-move":
|
|
534
546
|
return run(res, () => withScope(body, (scope) => moveSkillInCategory(String(body.root || ""), String(body.name || ""), String(body.category || ""), body.targetName ? String(body.targetName) : void 0, body.position === void 0 ? "before" : String(body.position), log, scopedOptions(scope))));
|
|
535
|
-
case "/api/dsh-skills-manager/category-enable":
|
|
547
|
+
case "/api/michengai/dsh-skills-manager/category-enable":
|
|
536
548
|
return run(res, () => withScope(body, (scope) => setCategoryEnabled(String(body.root || ""), String(body.category || ""), true, log, scopedOptions(scope))), afterWrite);
|
|
537
|
-
case "/api/dsh-skills-manager/category-disable":
|
|
549
|
+
case "/api/michengai/dsh-skills-manager/category-disable":
|
|
538
550
|
return run(res, () => withScope(body, (scope) => setCategoryEnabled(String(body.root || ""), String(body.category || ""), false, log, scopedOptions(scope))), afterWrite);
|
|
539
|
-
case "/api/dsh-skills-manager/delete":
|
|
551
|
+
case "/api/michengai/dsh-skills-manager/delete":
|
|
540
552
|
return run(res, () => withScope(body, async (scope) => {
|
|
541
553
|
const target = await workspaceTarget(body);
|
|
542
554
|
if (target && "ok" in target && target.ok === false) return target;
|
|
543
555
|
const root = target ? target.root : await requestRoot(String(body.root || "dsh"), scope?.projectCwds);
|
|
544
556
|
return repositories.trashSkill(root, String(body.name || ""));
|
|
545
557
|
}), afterWrite);
|
|
546
|
-
case "/api/dsh-skills-manager/trash-restore":
|
|
558
|
+
case "/api/michengai/dsh-skills-manager/trash-restore":
|
|
547
559
|
return run(res, () => withScope(body, (scope) => repositories.restoreTrash(String(body.id || ""), { ...scope ?? {}, registeredWorkspaces: registeredWorkspacePaths(ctx) })), afterWrite);
|
|
548
|
-
case "/api/dsh-skills-manager/trash-delete":
|
|
560
|
+
case "/api/michengai/dsh-skills-manager/trash-delete":
|
|
549
561
|
return run(res, () => repositories.permanentlyDeleteTrash(String(body.id || "")));
|
|
550
|
-
case "/api/dsh-skills-manager/detail":
|
|
562
|
+
case "/api/michengai/dsh-skills-manager/detail":
|
|
551
563
|
return run(res, () => withScope(body, (scope) => skillDetail(String(body.root || "dsh"), String(body.name || ""), scope ? { ...scope, workspaceBound: true } : projectOptions())));
|
|
552
|
-
case "/api/dsh-skills-manager/create":
|
|
564
|
+
case "/api/michengai/dsh-skills-manager/create":
|
|
553
565
|
return run(res, async () => {
|
|
554
566
|
const target = await workspaceTarget(body);
|
|
555
567
|
if (target && "ok" in target && target.ok === false) return target;
|
|
@@ -559,7 +571,7 @@ function apply(ctx, config) {
|
|
|
559
571
|
{ root: target ? target.root : await requestRoot(String(body.root || "dsh")) }
|
|
560
572
|
);
|
|
561
573
|
}, afterWrite);
|
|
562
|
-
case "/api/dsh-skills-manager/import":
|
|
574
|
+
case "/api/michengai/dsh-skills-manager/import":
|
|
563
575
|
return run(res, async () => {
|
|
564
576
|
const target = await workspaceTarget(body);
|
|
565
577
|
if (target && "ok" in target && target.ok === false) return target;
|
|
@@ -569,7 +581,7 @@ function apply(ctx, config) {
|
|
|
569
581
|
...target ? { root: target.root } : body.root === "agents" ? { root: await requestRoot("agents") } : {}
|
|
570
582
|
});
|
|
571
583
|
}, body.dryRun === true ? void 0 : afterWrite);
|
|
572
|
-
case "/api/dsh-skills-manager/upload":
|
|
584
|
+
case "/api/michengai/dsh-skills-manager/upload":
|
|
573
585
|
return run(res, async () => {
|
|
574
586
|
const target = await workspaceTarget(body);
|
|
575
587
|
if (target && "ok" in target && target.ok === false) return target;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { promises as fs } from "node:fs";
|
|
2
2
|
import { join, dirname, resolve } from "node:path";
|
|
3
3
|
import { createHash, randomUUID } from "node:crypto";
|
|
4
|
-
import { managerHomePath, userRoots, checkedRepositoryRootDefinition, projectRootForRecord, resolveWorkspaceTarget, createWorkspaceIndex } from "./core.js";
|
|
4
|
+
import { managerHomePath, userRoots, checkedRepositoryRootDefinition, projectRootForRecord, resolveWorkspaceTarget, createWorkspaceIndex, renameWithRetry } from "./core.js";
|
|
5
5
|
const hash = (bytes) => createHash("sha256").update(bytes).digest("hex");
|
|
6
6
|
const repositoryInstallKeys = /* @__PURE__ */ new Set(["dsh", "agents"]);
|
|
7
7
|
function repositoryInstallRoot(key = "dsh") {
|
|
@@ -129,9 +129,9 @@ function createRepositoryUpdater({ read, write, repository, download, serialize,
|
|
|
129
129
|
delete previous.backup;
|
|
130
130
|
const nextRecord = rollback ? { ...record.backup.record } : { ...previous, commit: plan.commit, files: plan.next };
|
|
131
131
|
nextRecord.backup = { key, fingerprint: signature(plan.current), record: previous };
|
|
132
|
-
await
|
|
132
|
+
await renameWithRetry(target, backup);
|
|
133
133
|
moved = true;
|
|
134
|
-
await
|
|
134
|
+
await renameWithRetry(stage, target);
|
|
135
135
|
replaced = true;
|
|
136
136
|
data.installs[data.installs.indexOf(record)] = nextRecord;
|
|
137
137
|
await write(data);
|
|
@@ -139,8 +139,8 @@ function createRepositoryUpdater({ read, write, repository, download, serialize,
|
|
|
139
139
|
const error = caught;
|
|
140
140
|
if (moved) {
|
|
141
141
|
try {
|
|
142
|
-
if (replaced) await
|
|
143
|
-
await
|
|
142
|
+
if (replaced) await renameWithRetry(target, stage);
|
|
143
|
+
await renameWithRetry(backup, target);
|
|
144
144
|
} catch {
|
|
145
145
|
recoveryFailed = true;
|
|
146
146
|
throw failure("\u81EA\u52A8\u6062\u590D\u5931\u8D25\uFF0C\u539F\u6587\u4EF6\u4FDD\u7559\u5728\u5907\u4EFD\u76EE\u5F55\uFF0C\u8BF7\u52FF\u91CD\u590D\u64CD\u4F5C", "error.repo.state");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@michengai/dsh-skills-manager",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.21",
|
|
4
4
|
"description": "DSH Skills Manager — 在 DeepSeek Harness 中统一加载并安全管理本机 Agent Skills · Load and safely manage local Agent Skills in DSH",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
},
|
|
44
44
|
"scripts": {
|
|
45
45
|
"build": "node scripts/build.mjs",
|
|
46
|
-
"test": "node scripts/check-committed-lib.mjs && npm run typecheck && npm run build && node test/build-test.mjs && node test/api-base.test.mjs && node test/route-lifecycle.test.mjs && node test/repositories.test.mjs && node test/repository-install-targets.test.mjs && node test/workspace-target.test.mjs && node test/workspace-routes.test.mjs && node test/workspace-list.test.mjs && node test/destination-picker.test.mjs && node test/workspace-project-page.test.mjs && node test/repository-ui.test.mjs && node test/catalog-skill.test.mjs && node test/skills-sh-catalog.test.mjs && node test/clawhub-catalog.test.mjs && node --test test/catalog-state.test.mjs test/catalog-lifecycle.test.mjs && node test/theme-select.test.mjs && node --test test/antd-theme.browser.test.mjs && node test/host-fallback.test.mjs && node test/repository-routes.test.mjs && node test/core-test.mjs && node test/root-path.test.mjs && node test/disabled-external-native.test.mjs && node test/categories.test.mjs && node test/categories-ui.test.mjs && node --experimental-strip-types --test test/settings-nav-icon.test.mjs && node test/readonly-discovery.test.mjs && node test/project-root-skills.test.mjs && node test/project-sources.test.mjs && node test/locale-test.mjs && node --test test/plugin-updater.test.mjs && node test/plugin-update-locale.test.mjs && node test/client-scope.test.mjs && node test/compatibility-options-test.mjs && node test/sidebar-entry.test.mjs && node --test test/sidebar-entry-lifecycle.test.mjs test/plugin-update-visibility.test.mjs && node test/online-update.test.mjs",
|
|
46
|
+
"test": "node scripts/check-committed-lib.mjs && npm run typecheck && npm run build && node test/build-test.mjs && node test/api-base.test.mjs && node test/route-lifecycle.test.mjs && node test/repositories.test.mjs && node test/repository-install-targets.test.mjs && node test/workspace-target.test.mjs && node test/workspace-routes.test.mjs && node test/workspace-list.test.mjs && node test/destination-picker.test.mjs && node test/workspace-project-page.test.mjs && node test/repository-ui.test.mjs && node test/catalog-skill.test.mjs && node test/skills-sh-catalog.test.mjs && node test/clawhub-catalog.test.mjs && node --test test/catalog-state.test.mjs test/catalog-lifecycle.test.mjs && node test/theme-select.test.mjs && node --test test/antd-theme.browser.test.mjs && node test/host-fallback.test.mjs && node test/repository-routes.test.mjs && node test/core-test.mjs && node test/root-path.test.mjs && node test/custom-sources.test.mjs && node test/disabled-external-native.test.mjs && node test/categories.test.mjs && node test/categories-ui.test.mjs && node --experimental-strip-types --test test/settings-nav-icon.test.mjs && node test/readonly-discovery.test.mjs && node test/project-root-skills.test.mjs && node test/project-sources.test.mjs && node test/locale-test.mjs && node --test test/plugin-updater.test.mjs && node test/plugin-update-locale.test.mjs && node test/client-scope.test.mjs && node test/compatibility-options-test.mjs && node test/sidebar-entry.test.mjs && node --test test/sidebar-entry-lifecycle.test.mjs test/plugin-update-visibility.test.mjs && node test/online-update.test.mjs",
|
|
47
47
|
"verify": "node scripts/sync-hosts.mjs && npm test && npm run pack:check && node test/pack-test.mjs",
|
|
48
48
|
"pack:check": "npm pack --dry-run --json",
|
|
49
49
|
"prepack": "npm run typecheck && npm run build",
|
|
@@ -102,5 +102,6 @@
|
|
|
102
102
|
],
|
|
103
103
|
"dependencies": {
|
|
104
104
|
"fflate": "0.8.3"
|
|
105
|
-
}
|
|
105
|
+
},
|
|
106
|
+
"icon": "assets/icon.svg"
|
|
106
107
|
}
|