dsh-skills-manager 0.1.8 → 0.1.10
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.md +1 -1
- package/lib/client.js +31 -31
- package/lib/client.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/types/client/index.d.ts +1 -1
- package/lib/types/client/index.js +5 -5
- package/lib/types/index.js +1 -1
- package/package.json +26 -25
- package/plugin-design.md +1 -1
package/README.md
CHANGED
|
@@ -79,7 +79,7 @@ The test suite covers scope resolution, current-state validation, local and Git
|
|
|
79
79
|
- This plugin runs the packaged `skills` CLI with an argv array and a private storage `cwd`; it never modifies the active workspace's `.agents/skills` directory.
|
|
80
80
|
- It does not rewrite an imported `SKILL.md` or alter the source folder or repository. The **仅手动** switch lives in `state.json` and is applied when the provider resolves each skill's invocation policy. Broken or escaping source symlinks are rejected before the CLI copies anything.
|
|
81
81
|
- Skills already present in other filesystem roots remain owned by those roots; import them into this private library when they should be managed here.
|
|
82
|
-
- Import and mutation
|
|
82
|
+
- Import and mutation controls stay disabled off-loopback because they write local files. RPC itself rides Connection's authenticated `/api`.
|
|
83
83
|
- DSH is in developer preview; bundle and Cordis APIs can change between Harness releases.
|
|
84
84
|
|
|
85
85
|
## License
|
package/lib/client.js
CHANGED
|
@@ -28,9 +28,9 @@ react = __toESM(react);
|
|
|
28
28
|
let __deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
29
29
|
__deepseek_ai_dsh_client_ui_primitives = __toESM(__deepseek_ai_dsh_client_ui_primitives);
|
|
30
30
|
|
|
31
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
31
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs
|
|
32
32
|
/**
|
|
33
|
-
* @license lucide-react v1.
|
|
33
|
+
* @license lucide-react v1.39.0 - ISC
|
|
34
34
|
*
|
|
35
35
|
* This source code is licensed under the ISC license.
|
|
36
36
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -40,9 +40,9 @@ const mergeClasses = (...classes) => classes.filter((className, index, array) =>
|
|
|
40
40
|
}).join(" ").trim();
|
|
41
41
|
|
|
42
42
|
//#endregion
|
|
43
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
43
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs
|
|
44
44
|
/**
|
|
45
|
-
* @license lucide-react v1.
|
|
45
|
+
* @license lucide-react v1.39.0 - ISC
|
|
46
46
|
*
|
|
47
47
|
* This source code is licensed under the ISC license.
|
|
48
48
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -50,9 +50,9 @@ const mergeClasses = (...classes) => classes.filter((className, index, array) =>
|
|
|
50
50
|
const toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
51
51
|
|
|
52
52
|
//#endregion
|
|
53
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
53
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs
|
|
54
54
|
/**
|
|
55
|
-
* @license lucide-react v1.
|
|
55
|
+
* @license lucide-react v1.39.0 - ISC
|
|
56
56
|
*
|
|
57
57
|
* This source code is licensed under the ISC license.
|
|
58
58
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -60,16 +60,16 @@ const toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").to
|
|
|
60
60
|
const toCamelCase = (string) => string.replace(/^([A-Z])|[\s-_]+(\w)/g, (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase());
|
|
61
61
|
|
|
62
62
|
//#endregion
|
|
63
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
63
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs
|
|
64
64
|
const toPascalCase = (string) => {
|
|
65
65
|
const camelCase = toCamelCase(string);
|
|
66
66
|
return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);
|
|
67
67
|
};
|
|
68
68
|
|
|
69
69
|
//#endregion
|
|
70
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
70
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/defaultAttributes.mjs
|
|
71
71
|
/**
|
|
72
|
-
* @license lucide-react v1.
|
|
72
|
+
* @license lucide-react v1.39.0 - ISC
|
|
73
73
|
*
|
|
74
74
|
* This source code is licensed under the ISC license.
|
|
75
75
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -87,9 +87,9 @@ var defaultAttributes = {
|
|
|
87
87
|
};
|
|
88
88
|
|
|
89
89
|
//#endregion
|
|
90
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
90
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs
|
|
91
91
|
/**
|
|
92
|
-
* @license lucide-react v1.
|
|
92
|
+
* @license lucide-react v1.39.0 - ISC
|
|
93
93
|
*
|
|
94
94
|
* This source code is licensed under the ISC license.
|
|
95
95
|
* See the LICENSE file in the root directory of this source tree.
|
|
@@ -100,12 +100,12 @@ const hasA11yProp = (props) => {
|
|
|
100
100
|
};
|
|
101
101
|
|
|
102
102
|
//#endregion
|
|
103
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
103
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/context.mjs
|
|
104
104
|
const LucideContext = (0, react.createContext)({});
|
|
105
105
|
const useLucideContext = () => (0, react.useContext)(LucideContext);
|
|
106
106
|
|
|
107
107
|
//#endregion
|
|
108
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
108
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/Icon.mjs
|
|
109
109
|
const Icon = (0, react.forwardRef)(({ color, size, strokeWidth, absoluteStrokeWidth, className = "", children, iconNode,...rest }, ref) => {
|
|
110
110
|
const { size: contextSize = 24, strokeWidth: contextStrokeWidth = 2, absoluteStrokeWidth: contextAbsoluteStrokeWidth = false, color: contextColor = "currentColor", className: contextClass = "" } = useLucideContext() ?? {};
|
|
111
111
|
const calculatedStrokeWidth = absoluteStrokeWidth ?? contextAbsoluteStrokeWidth ? Number(strokeWidth ?? contextStrokeWidth) * 24 / Number(size ?? contextSize) : strokeWidth ?? contextStrokeWidth;
|
|
@@ -123,7 +123,7 @@ const Icon = (0, react.forwardRef)(({ color, size, strokeWidth, absoluteStrokeWi
|
|
|
123
123
|
});
|
|
124
124
|
|
|
125
125
|
//#endregion
|
|
126
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
126
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/createLucideIcon.mjs
|
|
127
127
|
const createLucideIcon = (iconName, iconNode) => {
|
|
128
128
|
const Component = (0, react.forwardRef)(({ className,...props }, ref) => (0, react.createElement)(Icon, {
|
|
129
129
|
ref,
|
|
@@ -136,7 +136,7 @@ const createLucideIcon = (iconName, iconNode) => {
|
|
|
136
136
|
};
|
|
137
137
|
|
|
138
138
|
//#endregion
|
|
139
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
139
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/plus.mjs
|
|
140
140
|
const __iconNode$12 = [["path", {
|
|
141
141
|
d: "M5 12h14",
|
|
142
142
|
key: "1ays0h"
|
|
@@ -147,7 +147,7 @@ const __iconNode$12 = [["path", {
|
|
|
147
147
|
const Plus = createLucideIcon("plus", __iconNode$12);
|
|
148
148
|
|
|
149
149
|
//#endregion
|
|
150
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
150
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/refresh-cw.mjs
|
|
151
151
|
const __iconNode$11 = [
|
|
152
152
|
["path", {
|
|
153
153
|
d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",
|
|
@@ -169,7 +169,7 @@ const __iconNode$11 = [
|
|
|
169
169
|
const RefreshCw = createLucideIcon("refresh-cw", __iconNode$11);
|
|
170
170
|
|
|
171
171
|
//#endregion
|
|
172
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
172
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search-check.mjs
|
|
173
173
|
const __iconNode$10 = [
|
|
174
174
|
["path", {
|
|
175
175
|
d: "m8 11 2 2 4-4",
|
|
@@ -189,7 +189,7 @@ const __iconNode$10 = [
|
|
|
189
189
|
const SearchCheck = createLucideIcon("search-check", __iconNode$10);
|
|
190
190
|
|
|
191
191
|
//#endregion
|
|
192
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
192
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search.mjs
|
|
193
193
|
const __iconNode$9 = [["path", {
|
|
194
194
|
d: "m21 21-4.34-4.34",
|
|
195
195
|
key: "14j7rj"
|
|
@@ -202,7 +202,7 @@ const __iconNode$9 = [["path", {
|
|
|
202
202
|
const Search = createLucideIcon("search", __iconNode$9);
|
|
203
203
|
|
|
204
204
|
//#endregion
|
|
205
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
205
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/x.mjs
|
|
206
206
|
const __iconNode$8 = [["path", {
|
|
207
207
|
d: "M18 6 6 18",
|
|
208
208
|
key: "1bl5f8"
|
|
@@ -213,7 +213,7 @@ const __iconNode$8 = [["path", {
|
|
|
213
213
|
const X = createLucideIcon("x", __iconNode$8);
|
|
214
214
|
|
|
215
215
|
//#endregion
|
|
216
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
216
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/trash-2.mjs
|
|
217
217
|
const __iconNode$7 = [
|
|
218
218
|
["path", {
|
|
219
219
|
d: "M10 11v6",
|
|
@@ -239,7 +239,7 @@ const __iconNode$7 = [
|
|
|
239
239
|
const Trash2 = createLucideIcon("trash-2", __iconNode$7);
|
|
240
240
|
|
|
241
241
|
//#endregion
|
|
242
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
242
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/globe.mjs
|
|
243
243
|
const __iconNode$6 = [
|
|
244
244
|
["circle", {
|
|
245
245
|
cx: "12",
|
|
@@ -259,7 +259,7 @@ const __iconNode$6 = [
|
|
|
259
259
|
const Globe = createLucideIcon("globe", __iconNode$6);
|
|
260
260
|
|
|
261
261
|
//#endregion
|
|
262
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
262
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/folder-git.mjs
|
|
263
263
|
const __iconNode$5 = [
|
|
264
264
|
["circle", {
|
|
265
265
|
cx: "12",
|
|
@@ -283,7 +283,7 @@ const __iconNode$5 = [
|
|
|
283
283
|
const FolderGit = createLucideIcon("folder-git", __iconNode$5);
|
|
284
284
|
|
|
285
285
|
//#endregion
|
|
286
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
286
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/git-branch.mjs
|
|
287
287
|
const __iconNode$4 = [
|
|
288
288
|
["path", {
|
|
289
289
|
d: "M15 6a9 9 0 0 0-9 9V3",
|
|
@@ -305,7 +305,7 @@ const __iconNode$4 = [
|
|
|
305
305
|
const GitBranch = createLucideIcon("git-branch", __iconNode$4);
|
|
306
306
|
|
|
307
307
|
//#endregion
|
|
308
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
308
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/package-open.mjs
|
|
309
309
|
const __iconNode$3 = [
|
|
310
310
|
["path", {
|
|
311
311
|
d: "M12 22v-9",
|
|
@@ -327,7 +327,7 @@ const __iconNode$3 = [
|
|
|
327
327
|
const PackageOpen = createLucideIcon("package-open", __iconNode$3);
|
|
328
328
|
|
|
329
329
|
//#endregion
|
|
330
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
330
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-alert.mjs
|
|
331
331
|
const __iconNode$2 = [
|
|
332
332
|
["circle", {
|
|
333
333
|
cx: "12",
|
|
@@ -353,7 +353,7 @@ const __iconNode$2 = [
|
|
|
353
353
|
const CircleAlert = createLucideIcon("circle-alert", __iconNode$2);
|
|
354
354
|
|
|
355
355
|
//#endregion
|
|
356
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
356
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-down.mjs
|
|
357
357
|
const __iconNode$1 = [["path", {
|
|
358
358
|
d: "m6 9 6 6 6-6",
|
|
359
359
|
key: "qrunsl"
|
|
@@ -361,7 +361,7 @@ const __iconNode$1 = [["path", {
|
|
|
361
361
|
const ChevronDown = createLucideIcon("chevron-down", __iconNode$1);
|
|
362
362
|
|
|
363
363
|
//#endregion
|
|
364
|
-
//#region node_modules/.pnpm/lucide-react@1.
|
|
364
|
+
//#region node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-right.mjs
|
|
365
365
|
const __iconNode = [["path", {
|
|
366
366
|
d: "m9 18 6-6-6-6",
|
|
367
367
|
key: "mthhwq"
|
|
@@ -383,7 +383,7 @@ const projectPopoverRow = (entry, busy = false) => ({
|
|
|
383
383
|
const inject = [
|
|
384
384
|
"connection",
|
|
385
385
|
"slots",
|
|
386
|
-
"
|
|
386
|
+
"uiWorkspace"
|
|
387
387
|
];
|
|
388
388
|
const SKILL_ICON_PATHS = ["M12.5113 15.4067C12.4395 15.6249 12.1308 15.6249 12.059 15.4067L11.643 14.1416C11.454 13.567 11.0033 13.1164 10.4288 12.9274L9.16369 12.5113C8.94544 12.4395 8.94544 12.1308 9.16369 12.059L10.4288 11.643C11.0033 11.454 11.454 11.0033 11.643 10.4288L12.059 9.16369C12.1308 8.94544 12.4395 8.94544 12.5113 9.16369L12.9274 10.4288C13.1164 11.0033 13.567 11.454 14.1416 11.643L15.4067 12.059C15.6249 12.1308 15.6249 12.4395 15.4067 12.5113L14.1416 12.9274C13.567 13.1164 13.1164 13.567 12.9274 14.1416L12.5113 15.4067Z", "M9.02246 0.546878C9.9822 0.546878 10.7564 0.545403 11.374 0.612307C12.0042 0.680586 12.5515 0.826244 13.0273 1.17188C13.3052 1.37376 13.5501 1.61868 13.752 1.89649C14.0975 2.37225 14.2432 2.91984 14.3115 3.54981C14.3784 4.16727 14.377 4.94206 14.377 5.90137V8.51367C13.9611 8.29533 13.5071 8.13985 13.0273 8.06055V5.90137C13.0273 4.9121 13.0259 4.22322 12.9688 3.69532C12.9129 3.18044 12.8098 2.89782 12.6592 2.69043C12.5406 2.52724 12.3966 2.38326 12.2334 2.26465C12.026 2.11404 11.7437 2.0109 11.2285 1.95508C10.7005 1.89789 10.0122 1.89649 9.02246 1.89649H6.55371C5.56395 1.89649 4.87569 1.89787 4.34766 1.95508C3.83242 2.01092 3.55022 2.11398 3.34278 2.26465C3.17953 2.38329 3.03564 2.52719 2.91699 2.69043C2.76642 2.89782 2.66325 3.18042 2.60742 3.69532C2.55027 4.22322 2.54883 4.9121 2.54883 5.90137V10.0986C2.54883 11.0878 2.55031 11.7768 2.60742 12.3047C2.66326 12.8196 2.76642 13.1032 2.91699 13.3105C3.03558 13.4736 3.17966 13.6178 3.34278 13.7363C3.5502 13.8869 3.83265 13.9901 4.34766 14.0459C4.87568 14.1031 5.56398 14.1035 6.55371 14.1035H8.08399C8.27443 14.6025 8.55077 15.0585 8.89551 15.4541H6.55371C5.59402 15.4541 4.81976 15.4546 4.20215 15.3877C3.57204 15.3194 3.02468 15.1738 2.54883 14.8281C2.27111 14.6263 2.02606 14.3813 1.82422 14.1035C1.47883 13.6278 1.33293 13.08 1.26465 12.4502C1.19783 11.8327 1.19922 11.0579 1.19922 10.0986V5.90137C1.19922 4.94206 1.1978 4.16727 1.26465 3.54981C1.33295 2.91984 1.47867 2.37225 1.82422 1.89649C2.02613 1.61864 2.27098 1.37379 2.54883 1.17188C3.02472 0.826181 3.57197 0.6806 4.20215 0.612307C4.81976 0.545393 5.594 0.546877 6.55371 0.546878H9.02246ZM9.19629 9.14649H4.5459V7.84571H9.19629V9.14649ZM11.0303 6.10645H4.5459V4.80567H11.0303V6.10645Z"];
|
|
389
389
|
function SkillIcon({ size = 16,...props }) {
|
|
@@ -578,7 +578,7 @@ function apply(ctx) {
|
|
|
578
578
|
inspect,
|
|
579
579
|
inspectRemote,
|
|
580
580
|
checkUpdates,
|
|
581
|
-
pickDirectory: () => ctx.
|
|
581
|
+
pickDirectory: () => ctx.uiWorkspace.pickDirectory(),
|
|
582
582
|
loopback: connection.isLoopback
|
|
583
583
|
})
|
|
584
584
|
}, SkillManagerSection));
|
|
@@ -1198,8 +1198,8 @@ function EmptyState(props) {
|
|
|
1198
1198
|
} }, props.hasAny ? "没有匹配的 skill,试试调整搜索词。" : "还没有导入任何 skill。点击右上角「导入」,从本机目录开始。"));
|
|
1199
1199
|
}
|
|
1200
1200
|
function ComposerSkillButton(props) {
|
|
1201
|
-
const {
|
|
1202
|
-
const projectRoot = useSessions((state) => state.byId[
|
|
1201
|
+
const { sessionId, useSessions, list, mutate } = props;
|
|
1202
|
+
const projectRoot = useSessions((state) => state.byId[sessionId]?.cwd);
|
|
1203
1203
|
const [open, setOpen] = (0, react.useState)(false);
|
|
1204
1204
|
const containerRef = (0, react.useRef)(null);
|
|
1205
1205
|
(0, __deepseek_ai_dsh_client_ui_primitives.useDismissOnOutsidePointer)(containerRef, open, setOpen);
|
package/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":["__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","repository","Pill","AlertCircle","Icon"],"sources":["../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/defaultAttributes.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/context.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/Icon.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/createLucideIcon.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/plus.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/refresh-cw.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search-check.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/x.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/trash-2.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/globe.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/folder-git.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/git-branch.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/package-open.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-alert.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-down.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-right.mjs","types/client/popover.js","types/client/index.js"],"sourcesContent":["/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.mjs';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { createContext, useContext, useMemo, createElement } from 'react';\n\nconst LucideContext = createContext({});\nfunction LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n}) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, className]\n );\n return createElement(LucideContext.Provider, { value }, children);\n}\nconst useLucideContext = () => useContext(LucideContext);\n\nexport { LucideProvider, useLucideContext };\n//# sourceMappingURL=context.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.mjs';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.mjs';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { useLucideContext } from './context.mjs';\n\nconst Icon = forwardRef(\n ({ color, size, strokeWidth, absoluteStrokeWidth, className = \"\", children, iconNode, ...rest }, ref) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n color: contextColor = \"currentColor\",\n className: contextClass = \"\"\n } = useLucideContext() ?? {};\n const calculatedStrokeWidth = absoluteStrokeWidth ?? contextAbsoluteStrokeWidth ? Number(strokeWidth ?? contextStrokeWidth) * 24 / Number(size ?? contextSize) : strokeWidth ?? contextStrokeWidth;\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size ?? contextSize ?? defaultAttributes.width,\n height: size ?? contextSize ?? defaultAttributes.height,\n stroke: color ?? contextColor,\n strokeWidth: calculatedStrokeWidth,\n className: mergeClasses(\"lucide\", contextClass, className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.mjs';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.mjs';\nimport Icon from './Icon.mjs';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n];\nconst Plus = createLucideIcon(\"plus\", __iconNode);\n\nexport { __iconNode, Plus as default };\n//# sourceMappingURL=plus.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\", key: \"v9h5vc\" }],\n [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }],\n [\"path\", { d: \"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\", key: \"3uifl3\" }],\n [\"path\", { d: \"M8 16H3v5\", key: \"1cv678\" }]\n];\nconst RefreshCw = createLucideIcon(\"refresh-cw\", __iconNode);\n\nexport { __iconNode, RefreshCw as default };\n//# sourceMappingURL=refresh-cw.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m8 11 2 2 4-4\", key: \"1sed1v\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }],\n [\"path\", { d: \"m21 21-4.3-4.3\", key: \"1qie3q\" }]\n];\nconst SearchCheck = createLucideIcon(\"search-check\", __iconNode);\n\nexport { __iconNode, SearchCheck as default };\n//# sourceMappingURL=search-check.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash2 = createLucideIcon(\"trash-2\", __iconNode);\n\nexport { __iconNode, Trash2 as default };\n//# sourceMappingURL=trash-2.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\", key: \"13o1zl\" }],\n [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }]\n];\nconst Globe = createLucideIcon(\"globe\", __iconNode);\n\nexport { __iconNode, Globe as default };\n//# sourceMappingURL=globe.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"13\", r: \"2\", key: \"1c1ljs\" }],\n [\n \"path\",\n {\n d: \"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\",\n key: \"1kt360\"\n }\n ],\n [\"path\", { d: \"M14 13h3\", key: \"1dgedf\" }],\n [\"path\", { d: \"M7 13h3\", key: \"1pygq7\" }]\n];\nconst FolderGit = createLucideIcon(\"folder-git\", __iconNode);\n\nexport { __iconNode, FolderGit as default };\n//# sourceMappingURL=folder-git.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 6a9 9 0 0 0-9 9V3\", key: \"1cii5b\" }],\n [\"circle\", { cx: \"18\", cy: \"6\", r: \"3\", key: \"1h7g24\" }],\n [\"circle\", { cx: \"6\", cy: \"18\", r: \"3\", key: \"fqmcym\" }]\n];\nconst GitBranch = createLucideIcon(\"git-branch\", __iconNode);\n\nexport { __iconNode, GitBranch as default };\n//# sourceMappingURL=git-branch.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 22v-9\", key: \"x3hkom\" }],\n [\n \"path\",\n {\n d: \"M15.17 2.21a1.67 1.67 0 0 1 1.63 0L21 4.57a1.93 1.93 0 0 1 0 3.36L8.82 14.79a1.655 1.655 0 0 1-1.64 0L3 12.43a1.93 1.93 0 0 1 0-3.36z\",\n key: \"2ntwy6\"\n }\n ],\n [\n \"path\",\n {\n d: \"M20 13v3.87a2.06 2.06 0 0 1-1.11 1.83l-6 3.08a1.93 1.93 0 0 1-1.78 0l-6-3.08A2.06 2.06 0 0 1 4 16.87V13\",\n key: \"1pmm1c\"\n }\n ],\n [\n \"path\",\n {\n d: \"M21 12.43a1.93 1.93 0 0 0 0-3.36L8.83 2.2a1.64 1.64 0 0 0-1.63 0L3 4.57a1.93 1.93 0 0 0 0 3.36l12.18 6.86a1.636 1.636 0 0 0 1.63 0z\",\n key: \"12ttoo\"\n }\n ]\n];\nconst PackageOpen = createLucideIcon(\"package-open\", __iconNode);\n\nexport { __iconNode, PackageOpen as default };\n//# sourceMappingURL=package-open.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.mjs.map\n","export const projectPopoverEnabledCount = (entries) => entries.filter(entry => entry.effectiveEnabled).length;\nexport const projectPopoverRow = (entry, busy = false) => ({\n checked: entry.effectiveEnabled,\n disabled: busy || entry.globalEnabled,\n badge: entry.globalEnabled ? '全局' : null,\n checkboxTitle: entry.globalEnabled ? '全局已启用,请到 Skill 管理关闭' : '项目启用',\n});\n","import { createElement as h, useCallback, useEffect, useRef, useState } from 'react';\nimport { Pill, useDismissOnOutsidePointer } from '@deepseek-ai/dsh-client-ui-primitives';\nimport Plus from 'lucide-react/dist/esm/icons/plus.mjs';\nimport RefreshCw from 'lucide-react/dist/esm/icons/refresh-cw.mjs';\nimport SearchCheck from 'lucide-react/dist/esm/icons/search-check.mjs';\nimport Search from 'lucide-react/dist/esm/icons/search.mjs';\nimport X from 'lucide-react/dist/esm/icons/x.mjs';\nimport Trash2 from 'lucide-react/dist/esm/icons/trash-2.mjs';\nimport Globe from 'lucide-react/dist/esm/icons/globe.mjs';\nimport FolderGit from 'lucide-react/dist/esm/icons/folder-git.mjs';\nimport GitBranch from 'lucide-react/dist/esm/icons/git-branch.mjs';\nimport PackageOpen from 'lucide-react/dist/esm/icons/package-open.mjs';\nimport AlertCircle from 'lucide-react/dist/esm/icons/alert-circle.mjs';\nimport ChevronDown from 'lucide-react/dist/esm/icons/chevron-down.mjs';\nimport ChevronRight from 'lucide-react/dist/esm/icons/chevron-right.mjs';\nimport { projectPopoverEnabledCount, projectPopoverRow } from './popover.js';\n// 'workspaces' 仍需注入:项目范围列表已改用 catalog.projectRoots,但「本机导入」的目录选择器还依赖它\nexport const inject = ['connection', 'slots', 'workspaces'];\nconst SKILL_ICON_PATHS = [\n 'M12.5113 15.4067C12.4395 15.6249 12.1308 15.6249 12.059 15.4067L11.643 14.1416C11.454 13.567 11.0033 13.1164 10.4288 12.9274L9.16369 12.5113C8.94544 12.4395 8.94544 12.1308 9.16369 12.059L10.4288 11.643C11.0033 11.454 11.454 11.0033 11.643 10.4288L12.059 9.16369C12.1308 8.94544 12.4395 8.94544 12.5113 9.16369L12.9274 10.4288C13.1164 11.0033 13.567 11.454 14.1416 11.643L15.4067 12.059C15.6249 12.1308 15.6249 12.4395 15.4067 12.5113L14.1416 12.9274C13.567 13.1164 13.1164 13.567 12.9274 14.1416L12.5113 15.4067Z',\n 'M9.02246 0.546878C9.9822 0.546878 10.7564 0.545403 11.374 0.612307C12.0042 0.680586 12.5515 0.826244 13.0273 1.17188C13.3052 1.37376 13.5501 1.61868 13.752 1.89649C14.0975 2.37225 14.2432 2.91984 14.3115 3.54981C14.3784 4.16727 14.377 4.94206 14.377 5.90137V8.51367C13.9611 8.29533 13.5071 8.13985 13.0273 8.06055V5.90137C13.0273 4.9121 13.0259 4.22322 12.9688 3.69532C12.9129 3.18044 12.8098 2.89782 12.6592 2.69043C12.5406 2.52724 12.3966 2.38326 12.2334 2.26465C12.026 2.11404 11.7437 2.0109 11.2285 1.95508C10.7005 1.89789 10.0122 1.89649 9.02246 1.89649H6.55371C5.56395 1.89649 4.87569 1.89787 4.34766 1.95508C3.83242 2.01092 3.55022 2.11398 3.34278 2.26465C3.17953 2.38329 3.03564 2.52719 2.91699 2.69043C2.76642 2.89782 2.66325 3.18042 2.60742 3.69532C2.55027 4.22322 2.54883 4.9121 2.54883 5.90137V10.0986C2.54883 11.0878 2.55031 11.7768 2.60742 12.3047C2.66326 12.8196 2.76642 13.1032 2.91699 13.3105C3.03558 13.4736 3.17966 13.6178 3.34278 13.7363C3.5502 13.8869 3.83265 13.9901 4.34766 14.0459C4.87568 14.1031 5.56398 14.1035 6.55371 14.1035H8.08399C8.27443 14.6025 8.55077 15.0585 8.89551 15.4541H6.55371C5.59402 15.4541 4.81976 15.4546 4.20215 15.3877C3.57204 15.3194 3.02468 15.1738 2.54883 14.8281C2.27111 14.6263 2.02606 14.3813 1.82422 14.1035C1.47883 13.6278 1.33293 13.08 1.26465 12.4502C1.19783 11.8327 1.19922 11.0579 1.19922 10.0986V5.90137C1.19922 4.94206 1.1978 4.16727 1.26465 3.54981C1.33295 2.91984 1.47867 2.37225 1.82422 1.89649C2.02613 1.61864 2.27098 1.37379 2.54883 1.17188C3.02472 0.826181 3.57197 0.6806 4.20215 0.612307C4.81976 0.545393 5.594 0.546877 6.55371 0.546878H9.02246ZM9.19629 9.14649H4.5459V7.84571H9.19629V9.14649ZM11.0303 6.10645H4.5459V4.80567H11.0303V6.10645Z',\n];\nfunction SkillIcon({ size = 16, ...props }) {\n return h('svg', { ...props, width: size, height: size, viewBox: '0 0 16 16', fill: 'none', xmlns: 'http://www.w3.org/2000/svg' }, h('path', { d: SKILL_ICON_PATHS[0], fill: 'currentColor' }), h('path', { d: SKILL_ICON_PATHS[1], fill: 'currentColor' }));\n}\nfunction installSettingsNavIcon(ctx) {\n if (typeof document === 'undefined' || typeof MutationObserver === 'undefined')\n return;\n ctx.effect(() => {\n const attribute = 'data-dsh-skill-manager-nav-icon';\n const selector = `button[${attribute}]`;\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">${SKILL_ICON_PATHS.map(path => `<path d=\"${path}\"/>`).join('')}</svg>`;\n const mask = `url(\"data:image/svg+xml,${encodeURIComponent(svg)}\")`;\n const style = document.createElement('style');\n style.dataset.dshSkillManager = 'settings-nav-icon';\n style.textContent = `\n ${selector} > svg:first-of-type { display: none !important; }\n ${selector}::before {\n content: '';\n display: block;\n width: 16px;\n height: 16px;\n flex: 0 0 16px;\n background: currentColor;\n -webkit-mask: ${mask} center / contain no-repeat;\n mask: ${mask} center / contain no-repeat;\n }\n `;\n document.head.appendChild(style);\n const mark = () => {\n for (const button of document.querySelectorAll('nav button')) {\n if (button.textContent?.trim() === 'Skill 管理')\n button.setAttribute(attribute, '');\n }\n };\n const observer = new MutationObserver(mark);\n observer.observe(document.documentElement, { childList: true, subtree: true });\n mark();\n return () => {\n observer.disconnect();\n style.remove();\n document.querySelectorAll(selector).forEach(element => element.removeAttribute(attribute));\n };\n }, 'skill-manager: settings navigation icon');\n}\nconst ICON_SPIN = ['dsh-skill-manager-spin', 'to { transform: rotate(360deg); }'];\nfunction ensureKeyframes() {\n if (typeof document === 'undefined')\n return;\n if (document.getElementById(ICON_SPIN[0]))\n return;\n const style = document.createElement('style');\n style.id = ICON_SPIN[0];\n style.textContent = `\n @keyframes ${ICON_SPIN[0]} { ${ICON_SPIN[1]} }\n .dsh-skill-manager-row:hover {\n border-color: ${tokens.borderStrong} !important;\n background: ${tokens.surfaceHover} !important;\n }\n @container (max-width: 360px) {\n .dsh-skill-manager-row { grid-template-columns: minmax(0, 1fr) !important; }\n .dsh-skill-manager-row-icon { display: none !important; }\n .dsh-skill-manager-row-actions { grid-column: 1 !important; justify-content: flex-start !important; }\n }\n `;\n document.head.appendChild(style);\n}\nconst spinnerStyle = { animation: `${ICON_SPIN[0]} 1s linear infinite`, flex: '0 0 auto' };\nconst monoStyle = { fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace' };\nconst tokens = {\n border: 'var(--border-subtle, rgba(148, 163, 184, .22))',\n borderStrong: 'var(--border-strong, rgba(148, 163, 184, .38))',\n accent: 'var(--fg-accent, #6366f1)',\n success: 'var(--fg-success, #16a34a)',\n danger: 'var(--fg-danger, #dc2626)',\n secondary: 'var(--fg-secondary, #64748b)',\n surfaceHover: 'var(--bg-hover, rgba(148, 163, 184, .08))',\n};\nconst panelStyle = { containerType: 'inline-size', display: 'grid', gap: 18, width: '100%', minWidth: 0, maxWidth: 760, padding: '6px 0 36px' };\nfunction buttonStyle(tone, disabled) {\n const base = {\n display: 'inline-flex', alignItems: 'center', gap: 6, minHeight: 32, padding: '0 12px',\n borderRadius: 8, border: `1px solid transparent`, fontSize: 13, fontWeight: 500,\n cursor: disabled ? 'default' : 'pointer', opacity: disabled ? 0.55 : 1, whiteSpace: 'nowrap',\n transition: 'background .15s ease, border-color .15s ease',\n };\n if (tone === 'primary')\n return { ...base, background: tokens.accent, color: 'var(--fg-on-accent, #fff)', border: 'none' };\n return { ...base, background: 'transparent', color: 'inherit', border: `1px solid ${tokens.border}` };\n}\nconst iconButtonStyle = {\n display: 'grid', placeItems: 'center', width: 28, height: 28, padding: 0,\n border: 'none', borderRadius: 7, background: 'transparent', color: tokens.secondary, cursor: 'pointer',\n};\nconst inputStyle = {\n width: '100%', minHeight: 34, padding: '0 10px 0 30px', borderRadius: 8,\n border: `1px solid ${tokens.border}`, background: 'var(--bg-primary, transparent)', color: 'inherit',\n fontSize: 13, outline: 'none', boxSizing: 'border-box',\n};\nconst selectStyle = {\n minHeight: 34, maxWidth: 300, padding: '0 8px', borderRadius: 8,\n border: `1px solid ${tokens.border}`, background: 'var(--bg-primary, transparent)', color: 'inherit', fontSize: 13,\n};\nconst checkboxStyle = { width: 16, height: 16, margin: 0, accentColor: tokens.accent, flex: '0 0 auto' };\nexport function apply(ctx) {\n installSettingsNavIcon(ctx);\n const connection = ctx.connection;\n const request = async (endpoint, payload = {}) => {\n const result = await connection.rpc.call('/skill-manager', endpoint, payload);\n if (!result.ok)\n throw new Error(result.error.message);\n return result.value;\n };\n const list = (projectRoot) => request('list', projectRoot ? { projectRoot } : {});\n const mutate = (endpoint, payload) => request(endpoint, payload);\n const inspect = (path) => request('inspect', { path });\n const inspectRemote = (repository) => request('inspect-remote', { repository });\n const checkUpdates = (name) => request('check-updates', name ? { name } : {});\n ctx.slots.inject('settings.section', () => ctx.slots.register({\n name: 'settings.section',\n id: 'skills',\n order: 35,\n label: 'Skill 管理',\n inject: () => ({ list, mutate, inspect, inspectRemote, checkUpdates, pickDirectory: () => ctx.workspaces.pickDirectory(), loopback: connection.isLoopback }),\n }, SkillManagerSection));\n ctx.slots.inject('conversation.input.left', () => ctx.slots.register({\n name: 'conversation.input.left',\n id: 'skill-manager',\n order: 10,\n inject: () => ({ list, mutate }),\n }, ComposerSkillButton));\n}\nfunction SkillManagerSection(props) {\n const { list, mutate, inspect, inspectRemote, checkUpdates, pickDirectory, loopback } = props;\n const [projectRoot, setProjectRoot] = useState(undefined);\n const [catalog, setCatalog] = useState(null);\n const [query, setQuery] = useState('');\n const [busy, setBusy] = useState(false);\n // 逐个 skill 记账正在检测的名字:单一全局布尔会把其它行的检测按钮一起置灰,\n // 快速连点时第二次点击落在 disabled 按钮上直接被吞掉。\n const [checkingNames, setCheckingNames] = useState(() => new Set());\n const [statuses, setStatuses] = useState({});\n const [error, setError] = useState(null);\n const [repositoryOpen, setRepositoryOpen] = useState(false);\n const [repository, setRepository] = useState('');\n const [grouped, setGrouped] = useState(false);\n const [collapsed, setCollapsed] = useState({});\n // 已点删除、等服务端确认的 skill:立刻从列表隐藏,失败再放回\n const [removing, setRemoving] = useState(() => new Set());\n // 待确认导入:inspect 结果 + 已勾选集合;提交后清空。\n const [selection, setSelection] = useState(null);\n useEffect(() => { ensureKeyframes(); }, []);\n // 追踪用户是否主动选过「只看全局」,避免 useEffect 把它重置回第一个项目\n const userChoseGlobal = useRef(false);\n const projectRoots = catalog?.projectRoots ?? [];\n useEffect(() => {\n // 仅当用户未主动选择「只看全局」时,才自动选中第一个有项目级 skill 的文件夹\n if (projectRoot === undefined && !userChoseGlobal.current && projectRoots.length > 0)\n setProjectRoot(projectRoots[0]);\n // 当前选中的文件夹不再有项目级 skill 时,回退到第一个\n if (projectRoot !== undefined && !projectRoots.includes(projectRoot))\n setProjectRoot(projectRoots[0]);\n }, [projectRoot, projectRoots]);\n const refresh = useCallback(async () => {\n setBusy(true);\n setError(null);\n try {\n setCatalog(await list(projectRoot));\n }\n catch (reason) {\n setError(messageOf(reason));\n }\n finally {\n setBusy(false);\n }\n }, [list, projectRoot]);\n useEffect(() => { void refresh(); }, [refresh]);\n const run = useCallback(async (action) => {\n setBusy(true);\n setError(null);\n try {\n setCatalog(await action());\n return true;\n }\n catch (reason) {\n setError(messageOf(reason));\n return false;\n }\n finally {\n setBusy(false);\n }\n }, []);\n const normalizedQuery = query.trim().toLocaleLowerCase();\n const filtered = (catalog?.entries ?? []).filter(entry => !removing.has(entry.name)\n && (normalizedQuery.length === 0 || `${entry.name} ${entry.description}`.toLocaleLowerCase().includes(normalizedQuery)));\n // 乐观删除:先隐藏该行(不锁整页),服务端确认后写回目录;失败则放回并报错。\n const removeSkill = (entry) => {\n setRemoving(prev => new Set(prev).add(entry.name));\n setError(null);\n void mutate('remove', { name: entry.name, projectRoot }).then(next => {\n setCatalog(next);\n setRemoving(prev => { const rest = new Set(prev); rest.delete(entry.name); return rest; });\n }, reason => {\n setError(messageOf(reason));\n setRemoving(prev => { const rest = new Set(prev); rest.delete(entry.name); return rest; });\n });\n };\n const importSkill = async () => {\n const path = await pickDirectory();\n if (!path)\n return;\n await inspectForInstall(() => inspect(path), path, undefined);\n };\n const importRepository = async (event) => {\n event.preventDefault();\n const source = repository.trim();\n if (!source)\n return;\n if (await inspectForInstall(() => inspectRemote(source), undefined, source)) {\n setRepository('');\n setRepositoryOpen(false);\n }\n };\n // 拿到来源的 skill 列表后进入勾选面板;来源只有一个 skill 时跳过勾选直接装。\n const inspectForInstall = async (call, path, repository) => {\n setBusy(true);\n setError(null);\n try {\n const result = await call();\n if (result.entries.length === 0)\n throw new Error('来源中没有可安装的 skill');\n if (result.entries.length === 1) {\n await installSelection([result.entries[0].name], path, repository);\n return true;\n }\n setSelection({ entries: result.entries, chosen: new Set(result.entries.map(entry => entry.name)), path, repository });\n return true;\n }\n catch (reason) {\n setError(messageOf(reason));\n return false;\n }\n finally {\n setBusy(false);\n }\n };\n const installSelection = async (names, path, repository) => {\n setBusy(true);\n setError(null);\n try {\n setCatalog(await mutate(repository !== undefined ? 'install-remote' : 'install', {\n ...(repository !== undefined ? { repository } : { path }),\n skills: names,\n projectRoot,\n }));\n setSelection(null);\n }\n catch (reason) {\n setError(messageOf(reason));\n }\n finally {\n setBusy(false);\n }\n };\n const updateSkill = async (entry) => {\n const path = entry.updateSupported ? undefined : await pickDirectory() ?? undefined;\n if (!entry.updateSupported && !path)\n return;\n if (await run(() => mutate('update', { name: entry.name, path, projectRoot }))) {\n setStatuses(prev => ({ ...prev, [entry.name]: 'current' }));\n }\n };\n const markChecking = (names, active) => setCheckingNames(prev => {\n const next = new Set(prev);\n for (const name of names) {\n if (active)\n next.add(name);\n else\n next.delete(name);\n }\n return next;\n });\n const checking = checkingNames.size > 0;\n const checkAll = async () => {\n const names = (catalog?.entries ?? []).map(entry => entry.name);\n markChecking(names, true);\n setError(null);\n try {\n const report = await checkUpdates();\n const reported = Object.fromEntries(report.entries.map(entry => [entry.name, entry.status]));\n setStatuses(Object.fromEntries(names.map(name => [name, reported[name] ?? 'unknown'])));\n }\n catch (reason) {\n setError(messageOf(reason));\n }\n finally {\n markChecking(names, false);\n }\n };\n const checkSkill = async (name) => {\n markChecking([name], true);\n setError(null);\n try {\n const report = await checkUpdates(name);\n setStatuses(prev => ({ ...prev, [name]: report.entries.find(entry => entry.name === name)?.status ?? 'unknown' }));\n }\n catch (reason) {\n setError(messageOf(reason));\n }\n finally {\n markChecking([name], false);\n }\n };\n const updatable = (catalog?.entries ?? []).filter(entry => !removing.has(entry.name) && statuses[entry.name] === 'update-available' && entry.updateSupported);\n const updateAll = async () => {\n setBusy(true);\n setError(null);\n try {\n for (const entry of updatable)\n setCatalog(await mutate('update', { name: entry.name, projectRoot }));\n await checkAll();\n }\n catch (reason) {\n setError(messageOf(reason));\n }\n finally {\n setBusy(false);\n }\n };\n const rowProps = (entry) => ({\n key: entry.name,\n entry,\n projectAvailable: projectRoot !== undefined,\n busy,\n checking: checkingNames.has(entry.name),\n updateStatus: statuses[entry.name],\n onScopeChange: (scope, enabled) => void run(() => mutate('set-enabled', { name: entry.name, scope, projectRoot, enabled })),\n onModelInvocationChange: (modelInvocable) => void run(() => mutate('set-model-invocation', { name: entry.name, modelInvocable, projectRoot })),\n onCheck: () => void checkSkill(entry.name),\n onUpdate: () => void updateSkill(entry),\n onRemove: () => removeSkill(entry),\n });\n return h('div', { style: panelStyle, 'aria-busy': busy }, h('header', { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', gap: 16, flexWrap: 'wrap' } }, h('div', { style: { display: 'flex', alignItems: 'center', gap: 10, minWidth: 0 } }, h(SkillIcon, { size: 20, 'aria-hidden': true }), h('h2', { style: { margin: 0, fontSize: 18, fontWeight: 600 } }, 'Skill 管理'), busy ? h(RefreshCw, { size: 14, 'aria-hidden': true, style: spinnerStyle }) : null), h('div', { style: { display: 'flex', gap: 8, flexWrap: 'wrap' } }, h('button', { type: 'button', style: buttonStyle('ghost', busy || checking), onClick: () => void checkAll(), disabled: busy || checking, title: '检测全部 skill 是否有更新(只检测,不更新)' }, h(SearchCheck, { size: 14, 'aria-hidden': true }), checking ? '检测中…' : '检测'), updatable.length > 0 ? h('button', { type: 'button', style: buttonStyle('primary', busy || checking || !loopback), onClick: () => void updateAll(), disabled: busy || checking || !loopback, title: loopback ? `更新全部 ${updatable.length} 个有更新的 skill` : '仅在本机连接时可更新' }, h(RefreshCw, { size: 14, 'aria-hidden': true }), `全部更新 (${updatable.length})`) : null, h('button', { type: 'button', style: buttonStyle('ghost', busy || !loopback), onClick: () => setRepositoryOpen(value => !value), disabled: busy || !loopback, title: loopback ? '从 Git 仓库导入 skill' : '仅在本机连接时可导入' }, h(GitBranch, { size: 14, 'aria-hidden': true }), '仓库'), h('button', { type: 'button', style: buttonStyle('primary', busy || !loopback), onClick: importSkill, disabled: busy || !loopback, title: loopback ? '从本机目录导入 skill' : '仅在本机连接时可导入' }, h(Plus, { size: 14, 'aria-hidden': true }), '本机'))), h('p', { style: { margin: '-8px 0 0', fontSize: 13, color: tokens.secondary, lineHeight: 1.5 } }, '从本机目录或 Git 仓库导入 skill,并按「全局」或「项目」范围启用。'), repositoryOpen ? h('form', { onSubmit: importRepository, style: { display: 'flex', flexWrap: 'wrap', gap: 8, alignItems: 'center' } }, h('input', {\n type: 'text',\n value: repository,\n onChange: (event) => setRepository(event.currentTarget.value),\n placeholder: 'owner/repo 或 Git URL',\n 'aria-label': 'Git 仓库地址',\n autoFocus: true,\n disabled: busy,\n style: { ...inputStyle, flex: '1 1 260px', minWidth: 0, paddingLeft: 10 },\n }), h('button', { type: 'submit', style: buttonStyle('primary', busy || !repository.trim()), disabled: busy || !repository.trim() }, h(GitBranch, { size: 14, 'aria-hidden': true }), '导入'), h('button', { type: 'button', style: iconButtonStyle, onClick: () => setRepositoryOpen(false), disabled: busy, title: '关闭仓库导入', 'aria-label': '关闭仓库导入' }, h(X, { size: 15, 'aria-hidden': true }))) : null, selection ? h('section', { 'aria-label': '选择要导入的 skill', style: { display: 'grid', gap: 8, padding: '12px 14px', borderRadius: 10, border: `1px solid ${tokens.borderStrong}` } }, h('div', { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', gap: 8 } }, h('strong', { style: { fontSize: 13, fontWeight: 600 } }, `来源提供 ${selection.entries.length} 个 skill,勾选要导入的:`), h('button', { type: 'button', style: iconButtonStyle, onClick: () => setSelection(null), disabled: busy, title: '取消导入', 'aria-label': '取消导入' }, h(X, { size: 15, 'aria-hidden': true }))), h('div', { style: { display: 'grid', gap: 4, maxHeight: 260, overflowY: 'auto', margin: '0 -4px', padding: '0 4px' } }, selection.entries.map(entry => h('label', { key: entry.name, style: { display: 'flex', alignItems: 'center', gap: 8, padding: '7px 6px', borderRadius: 7, cursor: busy ? 'default' : 'pointer', fontSize: 13 }, title: entry.description || entry.name }, h('input', { type: 'checkbox', checked: selection.chosen.has(entry.name), disabled: busy, onChange: () => setSelection(prev => prev && {\n ...prev,\n chosen: prev.chosen.has(entry.name)\n ? new Set([...prev.chosen].filter(name => name !== entry.name))\n : new Set([...prev.chosen, entry.name]),\n }), 'aria-label': `导入 ${entry.name}`, style: checkboxStyle }), h('span', { style: { ...monoStyle, minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' } }, entry.name), h('span', { style: { color: tokens.secondary, fontSize: 12, minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', flex: '1 1 auto' } }, entry.description)))), h('div', { style: { display: 'flex', justifyContent: 'flex-end', gap: 8 } }, h('button', { type: 'button', style: buttonStyle('primary', busy || selection.chosen.size === 0), disabled: busy || selection.chosen.size === 0, onClick: () => void installSelection([...selection.chosen], selection.path, selection.repository) }, h(Plus, { size: 14, 'aria-hidden': true }), `导入所选 (${selection.chosen.size})`))) : null, h('div', { style: { display: 'flex', gap: 10, flexWrap: 'wrap', alignItems: 'center' } }, h('div', { style: { position: 'relative', flex: '1 1 220px', display: 'flex', alignItems: 'center' } }, h(Search, { size: 14, 'aria-hidden': true, style: { position: 'absolute', left: 9, color: tokens.secondary, pointerEvents: 'none' } }), h('input', { type: 'search', value: query, placeholder: '搜索 skill…', 'aria-label': '搜索 skill', onChange: (event) => setQuery(event.currentTarget.value), style: inputStyle })), h('label', { style: { display: 'flex', flex: '1 1 220px', minWidth: 0, alignItems: 'center', gap: 8, fontSize: 13, color: tokens.secondary } }, h('span', { style: { flex: '0 0 auto' } }, '项目范围'), h('select', { value: projectRoot ?? '__global__', onChange: (event) => { const value = event.currentTarget.value; if (value === '__global__') {\n userChoseGlobal.current = true;\n setProjectRoot(undefined);\n }\n else {\n userChoseGlobal.current = false;\n setProjectRoot(value);\n } }, style: { ...selectStyle, flex: '1 1 auto', minWidth: 0, maxWidth: 'none' } }, h('option', { value: '__global__' }, '只看全局'), \n // 当前选中的文件夹可能已不在 projectRoots(刚被清空),保留显示以免选中态凭空消失\n ...(projectRoot !== undefined && !projectRoots.includes(projectRoot) ? [projectRoot] : projectRoots).map(root => h('option', { key: root, value: root, title: root }, root.split('/').filter(Boolean).pop() ?? root)))), h(Pill, { active: grouped, onClick: () => setGrouped(value => !value), title: '按来源仓库分组', 'aria-pressed': grouped, style: { flex: '0 0 auto' } }, h(GitBranch, { size: 12, 'aria-hidden': true }), '按仓库')), error ? h('div', { role: 'alert', style: { display: 'flex', gap: 8, alignItems: 'center', margin: 0, padding: '9px 12px', borderRadius: 8, fontSize: 13, color: tokens.danger, background: 'rgba(220, 38, 38, .08)', border: '1px solid rgba(220, 38, 38, .28)' } }, h(AlertCircle, { size: 15, 'aria-hidden': true }), error) : null, h('section', { style: { display: 'grid', width: '100%', minWidth: 0, gap: 8 }, 'aria-label': '已安装 skill' }, catalog === null\n ? h('p', { style: { margin: 0, padding: '24px 0', textAlign: 'center', fontSize: 13, color: tokens.secondary } }, '正在读取…')\n : filtered.length === 0\n ? h(EmptyState, { hasAny: catalog.entries.some(entry => !removing.has(entry.name)) })\n : grouped\n ? groupBySource(filtered).map(group => h('div', { key: group.key, style: { display: 'grid', gap: 8 } }, h('button', {\n type: 'button',\n onClick: () => setCollapsed(prev => ({ ...prev, [group.key]: !prev[group.key] })),\n 'aria-expanded': !collapsed[group.key],\n style: { display: 'flex', alignItems: 'center', gap: 8, padding: '6px 4px', border: 'none', background: 'transparent', color: 'inherit', cursor: 'pointer', fontSize: 13, fontWeight: 600, textAlign: 'left' },\n }, collapsed[group.key] ? h(ChevronRight, { size: 14, 'aria-hidden': true, style: { color: tokens.secondary, flex: '0 0 auto' } }) : h(ChevronDown, { size: 14, 'aria-hidden': true, style: { color: tokens.secondary, flex: '0 0 auto' } }), h(GitBranch, { size: 13, 'aria-hidden': true, style: { color: tokens.secondary, flex: '0 0 auto' } }), h('span', { title: group.key === '__local__' ? undefined : group.key, style: { ...monoStyle, minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' } }, group.label), h('span', { style: { color: tokens.secondary, fontWeight: 400, flex: '0 0 auto' } }, `${group.entries.length} 个`)), collapsed[group.key] ? null : group.entries.map(entry => h(SkillRow, rowProps(entry)))))\n : filtered.map(entry => h(SkillRow, rowProps(entry)))));\n}\nfunction groupBySource(entries) {\n const groups = new Map();\n for (const entry of entries) {\n const key = entry.sourceType === 'git' && entry.sourceUrl ? entry.sourceUrl : '__local__';\n const label = key === '__local__' ? '本机导入' : shortRepoLabel(key);\n const group = groups.get(key) ?? { label, entries: [] };\n group.entries.push(entry);\n groups.set(key, group);\n }\n return [...groups.entries()]\n .map(([key, group]) => ({ key, label: group.label, entries: group.entries }))\n .sort((a, b) => (a.key === '__local__' ? 1 : b.key === '__local__' ? -1 : a.label.localeCompare(b.label)));\n}\nfunction shortRepoLabel(url) {\n const match = /^(?:https?:\\/\\/|git@|ssh:\\/\\/git@)?([^/:]+)[:/]([^/]+\\/[^/]+?)(?:\\.git)?\\/?$/.exec(url);\n return match ? `${match[2]} (${match[1]})` : url;\n}\nfunction EmptyState(props) {\n return h('div', { style: { display: 'grid', justifyItems: 'center', gap: 8, padding: '36px 16px', borderRadius: 10, border: `1px dashed ${tokens.borderStrong}`, color: tokens.secondary, textAlign: 'center' } }, h(PackageOpen, { size: 26, 'aria-hidden': true }), h('p', { style: { margin: 0, fontSize: 13, lineHeight: 1.5 } }, props.hasAny ? '没有匹配的 skill,试试调整搜索词。' : '还没有导入任何 skill。点击右上角「导入」,从本机目录开始。'));\n}\nfunction ComposerSkillButton(props) {\n const { session, useSessions, list, mutate } = props;\n const projectRoot = useSessions(state => state.byId[session.sessionId]?.cwd);\n const [open, setOpen] = useState(false);\n const containerRef = useRef(null);\n useDismissOnOutsidePointer(containerRef, open, setOpen);\n return h('div', { ref: containerRef, style: { position: 'relative', display: 'inline-flex', marginLeft: -25 } }, h('button', {\n type: 'button',\n title: projectRoot ? '配置当前项目的 Skill' : '当前会话没有工作区',\n 'aria-label': '配置当前项目的 Skill',\n 'aria-expanded': open,\n disabled: !projectRoot,\n onClick: () => setOpen(value => !value),\n style: {\n display: 'grid',\n placeItems: 'center',\n flex: '0 0 auto',\n width: 28,\n height: 28,\n padding: 0,\n border: 'none',\n borderRadius: 999,\n background: open ? 'var(--dsw-alias-bg-active, rgba(255, 255, 255, .16))' : 'var(--dsw-specific-selector, rgba(255, 255, 255, .08))',\n color: 'var(--dsw-alias-label-primary, inherit)',\n cursor: projectRoot ? 'pointer' : 'default',\n opacity: projectRoot ? 1 : 0.5,\n },\n }, h(SkillIcon, { size: 16, 'aria-hidden': true })), open && projectRoot ? h(ProjectSkillPopover, { projectRoot, list, mutate, onClose: () => setOpen(false) }) : null);\n}\nfunction ProjectSkillPopover(props) {\n const { projectRoot, list, mutate, onClose } = props;\n const theme = currentThemeColors();\n const [catalog, setCatalog] = useState(null);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState(null);\n useEffect(() => { ensureKeyframes(); }, []);\n const refresh = useCallback(async () => {\n setBusy(true);\n setError(null);\n try {\n setCatalog(await list(projectRoot));\n }\n catch (reason) {\n setError(messageOf(reason));\n }\n finally {\n setBusy(false);\n }\n }, [list, projectRoot]);\n useEffect(() => { void refresh(); }, [refresh]);\n const toggle = async (entry, enabled) => {\n setBusy(true);\n setError(null);\n try {\n setCatalog(await mutate('set-enabled', { name: entry.name, scope: 'project', projectRoot, enabled }));\n }\n catch (reason) {\n setError(messageOf(reason));\n }\n finally {\n setBusy(false);\n }\n };\n const enabledCount = projectPopoverEnabledCount(catalog?.entries ?? []);\n return h('section', { style: { position: 'absolute', zIndex: 50, left: 0, bottom: 40, width: 320, display: 'grid', gap: 6, padding: 12, border: `1px solid ${tokens.borderStrong}`, borderRadius: 12, background: theme.background, color: theme.color, boxShadow: '0 16px 40px rgba(0, 0, 0, .4)' }, 'aria-label': '当前项目 Skill' }, h('header', { style: { display: 'flex', justifyContent: 'space-between', gap: 8, alignItems: 'center', paddingBottom: 4 } }, h('div', { style: { display: 'flex', alignItems: 'center', gap: 7, minWidth: 0 } }, h(FolderGit, { size: 14, 'aria-hidden': true, style: { color: tokens.secondary, flex: '0 0 auto' } }), h('strong', { style: { fontSize: 13, fontWeight: 600 } }, '项目 Skill'), h('span', { style: { fontSize: 12, color: tokens.secondary } }, `${enabledCount}/${catalog?.entries.length ?? 0} 已启用`)), h('button', { type: 'button', onClick: onClose, style: iconButtonStyle, 'aria-label': '关闭项目 Skill', title: '关闭' }, h(X, { size: 14, 'aria-hidden': true }))), error ? h('div', { role: 'alert', style: { display: 'flex', gap: 6, alignItems: 'center', margin: 0, padding: '7px 9px', borderRadius: 7, fontSize: 12, color: tokens.danger, background: 'rgba(220, 38, 38, .08)' } }, h(AlertCircle, { size: 13, 'aria-hidden': true }), error) : null, h('div', { style: { display: 'grid', gap: 1, maxHeight: 280, overflowY: 'auto', margin: '0 -4px', padding: '0 4px' } }, catalog === null\n ? h('p', { style: { margin: 0, padding: '18px 0', textAlign: 'center', fontSize: 12, color: tokens.secondary } }, '正在读取…')\n : catalog.entries.length === 0\n ? h('p', { style: { margin: 0, padding: '18px 0', textAlign: 'center', fontSize: 12, color: tokens.secondary } }, '未导入 skill。请到「设置 → Skill 管理」导入。')\n : catalog.entries.map(entry => {\n const row = projectPopoverRow(entry, busy);\n return h('label', { key: entry.name, style: { display: 'grid', gridTemplateColumns: '14px minmax(0, 1fr) 30px', gap: 8, alignItems: 'center', padding: '7px 6px', borderRadius: 7, fontSize: 13, cursor: row.disabled ? 'default' : 'pointer' }, title: entry.description || entry.name }, h(SkillIcon, { size: 13, 'aria-hidden': true, style: { color: entry.effectiveEnabled ? tokens.accent : tokens.secondary } }), h('div', { style: { display: 'flex', alignItems: 'center', gap: 6, minWidth: 0 } }, h('span', { style: { minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' } }, entry.name), row.badge ? h(StatusBadge, { active: true, icon: Globe, label: row.badge }) : null), h('input', { type: 'checkbox', checked: row.checked, disabled: row.disabled, onChange: (event) => void toggle(entry, event.currentTarget.checked), 'aria-label': `${entry.name} 项目开关`, title: row.checkboxTitle, style: checkboxStyle }));\n })), busy ? h('div', { style: { display: 'flex', justifyContent: 'flex-end', paddingTop: 2 } }, h(RefreshCw, { size: 12, 'aria-hidden': true, style: spinnerStyle })) : null);\n}\nconst UPDATE_BADGE = {\n 'update-available': { label: '有更新', color: tokens.accent, background: 'rgba(99, 102, 241, .1)', border: '1px solid rgba(99, 102, 241, .35)' },\n 'deleted-upstream': { label: '上游已删除', color: tokens.danger, background: 'rgba(220, 38, 38, .08)', border: '1px solid rgba(220, 38, 38, .3)' },\n 'unknown': { label: '无法检测', color: tokens.secondary, background: 'rgba(148, 163, 184, .09)', border: '1px solid transparent' },\n};\nfunction SkillRow(props) {\n const { entry, projectAvailable, busy, checking, updateStatus, onScopeChange, onModelInvocationChange, onCheck, onUpdate, onRemove } = props;\n const badge = updateStatus ? UPDATE_BADGE[updateStatus] : undefined;\n const manualOnly = entry.modelInvocable === false;\n return h('article', {\n className: 'dsh-skill-manager-row',\n style: {\n display: 'grid', gridTemplateColumns: '32px minmax(0, 1fr)', gap: 12, alignItems: 'center',\n width: '100%', minWidth: 0, maxWidth: '100%', overflow: 'hidden', boxSizing: 'border-box',\n padding: '12px 14px', borderRadius: 10, border: `1px solid ${tokens.border}`,\n background: 'transparent', transition: 'border-color .15s ease, background .15s ease',\n },\n }, h('div', { className: 'dsh-skill-manager-row-icon', style: { display: 'grid', placeItems: 'center', width: 32, height: 32, borderRadius: 8, color: entry.effectiveEnabled ? tokens.accent : tokens.secondary, background: entry.effectiveEnabled ? 'rgba(99, 102, 241, .1)' : 'rgba(148, 163, 184, .1)' } }, h(SkillIcon, { size: 16, 'aria-hidden': true })), h('div', { style: { minWidth: 0, display: 'grid', gap: 4 } }, h('div', { style: { display: 'flex', alignItems: 'center', gap: 8, minWidth: 0, flexWrap: 'wrap' } }, h('strong', { style: { ...monoStyle, fontSize: 13, fontWeight: 600, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' } }, entry.name), badge ? h('span', { style: { display: 'inline-flex', alignItems: 'center', flex: '0 1 auto', padding: '2px 6px', borderRadius: 999, fontSize: 11, lineHeight: '16px', whiteSpace: 'nowrap', color: badge.color, background: badge.background, border: badge.border } }, badge.label) : null, h(SourceBadge, { entry }), manualOnly ? h('span', { title: '仅手动:模型不会自动调用,只能用 /名字 手动引用', style: { display: 'inline-flex', alignItems: 'center', flex: '0 1 auto', padding: '2px 6px', borderRadius: 999, fontSize: 11, lineHeight: '16px', whiteSpace: 'nowrap', color: tokens.secondary, background: 'rgba(148, 163, 184, .09)' } }, '仅手动') : null, h(StatusBadge, { active: entry.globalEnabled, icon: Globe, label: '全局' }), projectAvailable ? h(StatusBadge, { active: entry.projectEnabled, icon: FolderGit, label: '项目' }) : null), entry.description ? h('p', { style: { margin: 0, color: tokens.secondary, lineHeight: 1.45, fontSize: 12.5, display: '-webkit-box', WebkitLineClamp: 2, WebkitBoxOrient: 'vertical', overflow: 'hidden' } }, entry.description) : null), h('div', { className: 'dsh-skill-manager-row-actions', style: { gridColumn: '1 / -1', display: 'flex', width: '100%', minWidth: 0, justifyContent: 'flex-end', alignItems: 'center', gap: 10, flexWrap: 'wrap' } }, h('div', {\n role: 'radiogroup',\n 'aria-label': `${entry.name} ${projectAvailable ? '项目' : '全局'}开关`,\n title: projectAvailable ? '项目开关' : '全局开关',\n style: { display: 'inline-flex', gap: 4, flex: '0 0 auto' },\n }, (projectAvailable\n ? [['project-off', '项目关', false], ['project-on', '项目开', true]]\n : [['global-off', '关闭', false], ['global-on', '全局', true]]).map(([key, label, enabled]) => {\n const active = (projectAvailable ? entry.projectEnabled : entry.globalEnabled) === enabled;\n return h(Pill, {\n key,\n active,\n disabled: busy,\n role: 'radio',\n 'aria-checked': active,\n onClick: () => { if (!active)\n onScopeChange(projectAvailable ? 'project' : 'global', enabled); },\n }, label);\n })), h(Pill, {\n active: manualOnly,\n disabled: busy,\n 'aria-pressed': manualOnly,\n title: manualOnly\n ? '当前仅手动:模型不会自动调用;点按恢复为模型可自动调用'\n : '点按改为仅手动:模型不再自动调用,只能用 /名字 手动引用',\n onClick: () => onModelInvocationChange(manualOnly),\n style: { flex: '0 0 auto' },\n }, '仅手动'), updateStatus === 'current'\n ? h('span', { title: '已是最新', style: { color: tokens.success, fontSize: 12, fontWeight: 500, padding: '0 4px', whiteSpace: 'nowrap' } }, '最新')\n : updateStatus === 'update-available' || updateStatus === 'unknown'\n ? h('button', { type: 'button', style: { ...iconButtonStyle, color: tokens.accent }, disabled: busy || checking, onClick: onUpdate, title: entry.updateSupported ? (entry.sourceType === 'git' ? '从远程仓库更新' : '从原始目录更新') : '选择来源目录并更新', 'aria-label': `更新 ${entry.name}` }, h(RefreshCw, { size: 15, 'aria-hidden': true }))\n : h('button', { type: 'button', style: { ...iconButtonStyle, color: tokens.secondary }, disabled: busy || checking, onClick: onCheck, title: checking ? '检测中…' : `检测 ${entry.name} 是否有更新`, 'aria-label': `检测 ${entry.name} 更新` }, checking\n ? h(RefreshCw, { size: 15, 'aria-hidden': true, style: spinnerStyle })\n : h(SearchCheck, { size: 15, 'aria-hidden': true })), h('button', { type: 'button', style: { ...iconButtonStyle, color: tokens.danger }, onClick: onRemove, title: '从库中移除', 'aria-label': `移除 ${entry.name}` }, h(Trash2, { size: 15, 'aria-hidden': true }))));\n}\nfunction SourceBadge(props) {\n const remote = props.entry.sourceType === 'git';\n const local = props.entry.sourceType === 'local';\n const Icon = remote ? GitBranch : local ? FolderGit : AlertCircle;\n const label = remote ? 'Git' : local ? '本机' : '未知';\n const title = remote ? props.entry.sourceUrl : local ? props.entry.sourcePath : '来源未知,更新时需选择本机来源目录';\n return h('span', {\n title,\n style: {\n display: 'inline-flex', alignItems: 'center', gap: 4, flex: '0 1 auto', maxWidth: '100%', overflow: 'hidden',\n padding: '2px 6px', borderRadius: 999, fontSize: 11, lineHeight: '16px', whiteSpace: 'nowrap',\n color: tokens.secondary, background: 'rgba(148, 163, 184, .09)',\n },\n }, h(Icon, { size: 11, 'aria-hidden': true }), label);\n}\nfunction StatusBadge(props) {\n const Icon = props.icon;\n return h('span', {\n title: props.active ? `${props.label}已启用` : `${props.label}未启用`,\n style: {\n display: 'inline-flex', alignItems: 'center', gap: 4, flex: '0 1 auto', maxWidth: '100%', overflow: 'hidden',\n padding: '2px 6px', borderRadius: 999, fontSize: 11, lineHeight: '16px', whiteSpace: 'nowrap',\n color: props.active ? tokens.success : tokens.secondary,\n background: props.active ? 'rgba(22, 163, 74, .1)' : 'rgba(148, 163, 184, .09)',\n border: `1px solid ${props.active ? 'rgba(22, 163, 74, .3)' : 'transparent'}`,\n },\n }, h(Icon, { size: 11, 'aria-hidden': true }), props.active ? `${props.label}开` : `${props.label}关`);\n}\nfunction currentThemeColors() {\n if (typeof document === 'undefined')\n return { background: '#151517', color: '#f9fafb' };\n const style = getComputedStyle(document.body);\n return {\n background: style.backgroundColor || '#151517',\n color: style.color || '#f9fafb',\n };\n}\nfunction messageOf(reason) {\n return reason instanceof Error ? reason.message : String(reason);\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","names":["__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","repository","Pill","AlertCircle","Icon"],"sources":["../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/defaultAttributes.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/context.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/Icon.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/createLucideIcon.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/plus.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/refresh-cw.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search-check.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/x.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/trash-2.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/globe.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/folder-git.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/git-branch.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/package-open.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-alert.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-down.mjs","../node_modules/.pnpm/lucide-react@1.39.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-right.mjs","types/client/popover.js","types/client/index.js"],"sourcesContent":["/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.mjs';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { createContext, useContext, useMemo, createElement } from 'react';\n\nconst LucideContext = createContext({});\nfunction LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n}) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, className]\n );\n return createElement(LucideContext.Provider, { value }, children);\n}\nconst useLucideContext = () => useContext(LucideContext);\n\nexport { LucideProvider, useLucideContext };\n//# sourceMappingURL=context.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.mjs';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.mjs';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { useLucideContext } from './context.mjs';\n\nconst Icon = forwardRef(\n ({ color, size, strokeWidth, absoluteStrokeWidth, className = \"\", children, iconNode, ...rest }, ref) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n color: contextColor = \"currentColor\",\n className: contextClass = \"\"\n } = useLucideContext() ?? {};\n const calculatedStrokeWidth = absoluteStrokeWidth ?? contextAbsoluteStrokeWidth ? Number(strokeWidth ?? contextStrokeWidth) * 24 / Number(size ?? contextSize) : strokeWidth ?? contextStrokeWidth;\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size ?? contextSize ?? defaultAttributes.width,\n height: size ?? contextSize ?? defaultAttributes.height,\n stroke: color ?? contextColor,\n strokeWidth: calculatedStrokeWidth,\n className: mergeClasses(\"lucide\", contextClass, className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.mjs';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.mjs';\nimport Icon from './Icon.mjs';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n];\nconst Plus = createLucideIcon(\"plus\", __iconNode);\n\nexport { __iconNode, Plus as default };\n//# sourceMappingURL=plus.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\", key: \"v9h5vc\" }],\n [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }],\n [\"path\", { d: \"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\", key: \"3uifl3\" }],\n [\"path\", { d: \"M8 16H3v5\", key: \"1cv678\" }]\n];\nconst RefreshCw = createLucideIcon(\"refresh-cw\", __iconNode);\n\nexport { __iconNode, RefreshCw as default };\n//# sourceMappingURL=refresh-cw.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m8 11 2 2 4-4\", key: \"1sed1v\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }],\n [\"path\", { d: \"m21 21-4.3-4.3\", key: \"1qie3q\" }]\n];\nconst SearchCheck = createLucideIcon(\"search-check\", __iconNode);\n\nexport { __iconNode, SearchCheck as default };\n//# sourceMappingURL=search-check.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash2 = createLucideIcon(\"trash-2\", __iconNode);\n\nexport { __iconNode, Trash2 as default };\n//# sourceMappingURL=trash-2.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\", key: \"13o1zl\" }],\n [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }]\n];\nconst Globe = createLucideIcon(\"globe\", __iconNode);\n\nexport { __iconNode, Globe as default };\n//# sourceMappingURL=globe.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"13\", r: \"2\", key: \"1c1ljs\" }],\n [\n \"path\",\n {\n d: \"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\",\n key: \"1kt360\"\n }\n ],\n [\"path\", { d: \"M14 13h3\", key: \"1dgedf\" }],\n [\"path\", { d: \"M7 13h3\", key: \"1pygq7\" }]\n];\nconst FolderGit = createLucideIcon(\"folder-git\", __iconNode);\n\nexport { __iconNode, FolderGit as default };\n//# sourceMappingURL=folder-git.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 6a9 9 0 0 0-9 9V3\", key: \"1cii5b\" }],\n [\"circle\", { cx: \"18\", cy: \"6\", r: \"3\", key: \"1h7g24\" }],\n [\"circle\", { cx: \"6\", cy: \"18\", r: \"3\", key: \"fqmcym\" }]\n];\nconst GitBranch = createLucideIcon(\"git-branch\", __iconNode);\n\nexport { __iconNode, GitBranch as default };\n//# sourceMappingURL=git-branch.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 22v-9\", key: \"x3hkom\" }],\n [\n \"path\",\n {\n d: \"M15.17 2.21a1.67 1.67 0 0 1 1.63 0L21 4.57a1.93 1.93 0 0 1 0 3.36L8.82 14.79a1.655 1.655 0 0 1-1.64 0L3 12.43a1.93 1.93 0 0 1 0-3.36z\",\n key: \"2ntwy6\"\n }\n ],\n [\n \"path\",\n {\n d: \"M20 13v3.87a2.06 2.06 0 0 1-1.11 1.83l-6 3.08a1.93 1.93 0 0 1-1.78 0l-6-3.08A2.06 2.06 0 0 1 4 16.87V13\",\n key: \"1pmm1c\"\n }\n ],\n [\n \"path\",\n {\n d: \"M21 12.43a1.93 1.93 0 0 0 0-3.36L8.83 2.2a1.64 1.64 0 0 0-1.63 0L3 4.57a1.93 1.93 0 0 0 0 3.36l12.18 6.86a1.636 1.636 0 0 0 1.63 0z\",\n key: \"12ttoo\"\n }\n ]\n];\nconst PackageOpen = createLucideIcon(\"package-open\", __iconNode);\n\nexport { __iconNode, PackageOpen as default };\n//# sourceMappingURL=package-open.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.mjs.map\n","/**\n * @license lucide-react v1.39.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.mjs.map\n","export const projectPopoverEnabledCount = (entries) => entries.filter(entry => entry.effectiveEnabled).length;\nexport const projectPopoverRow = (entry, busy = false) => ({\n checked: entry.effectiveEnabled,\n disabled: busy || entry.globalEnabled,\n badge: entry.globalEnabled ? '全局' : null,\n checkboxTitle: entry.globalEnabled ? '全局已启用,请到 Skill 管理关闭' : '项目启用',\n});\n","import { createElement as h, useCallback, useEffect, useRef, useState } from 'react';\nimport { Pill, useDismissOnOutsidePointer } from '@deepseek-ai/dsh-client-ui-primitives';\nimport Plus from 'lucide-react/dist/esm/icons/plus.mjs';\nimport RefreshCw from 'lucide-react/dist/esm/icons/refresh-cw.mjs';\nimport SearchCheck from 'lucide-react/dist/esm/icons/search-check.mjs';\nimport Search from 'lucide-react/dist/esm/icons/search.mjs';\nimport X from 'lucide-react/dist/esm/icons/x.mjs';\nimport Trash2 from 'lucide-react/dist/esm/icons/trash-2.mjs';\nimport Globe from 'lucide-react/dist/esm/icons/globe.mjs';\nimport FolderGit from 'lucide-react/dist/esm/icons/folder-git.mjs';\nimport GitBranch from 'lucide-react/dist/esm/icons/git-branch.mjs';\nimport PackageOpen from 'lucide-react/dist/esm/icons/package-open.mjs';\nimport AlertCircle from 'lucide-react/dist/esm/icons/alert-circle.mjs';\nimport ChevronDown from 'lucide-react/dist/esm/icons/chevron-down.mjs';\nimport ChevronRight from 'lucide-react/dist/esm/icons/chevron-right.mjs';\nimport { projectPopoverEnabledCount, projectPopoverRow } from './popover.js';\n// uiWorkspace 仍需注入:「本机导入」走目录选择器\nexport const inject = ['connection', 'slots', 'uiWorkspace'];\nconst SKILL_ICON_PATHS = [\n 'M12.5113 15.4067C12.4395 15.6249 12.1308 15.6249 12.059 15.4067L11.643 14.1416C11.454 13.567 11.0033 13.1164 10.4288 12.9274L9.16369 12.5113C8.94544 12.4395 8.94544 12.1308 9.16369 12.059L10.4288 11.643C11.0033 11.454 11.454 11.0033 11.643 10.4288L12.059 9.16369C12.1308 8.94544 12.4395 8.94544 12.5113 9.16369L12.9274 10.4288C13.1164 11.0033 13.567 11.454 14.1416 11.643L15.4067 12.059C15.6249 12.1308 15.6249 12.4395 15.4067 12.5113L14.1416 12.9274C13.567 13.1164 13.1164 13.567 12.9274 14.1416L12.5113 15.4067Z',\n 'M9.02246 0.546878C9.9822 0.546878 10.7564 0.545403 11.374 0.612307C12.0042 0.680586 12.5515 0.826244 13.0273 1.17188C13.3052 1.37376 13.5501 1.61868 13.752 1.89649C14.0975 2.37225 14.2432 2.91984 14.3115 3.54981C14.3784 4.16727 14.377 4.94206 14.377 5.90137V8.51367C13.9611 8.29533 13.5071 8.13985 13.0273 8.06055V5.90137C13.0273 4.9121 13.0259 4.22322 12.9688 3.69532C12.9129 3.18044 12.8098 2.89782 12.6592 2.69043C12.5406 2.52724 12.3966 2.38326 12.2334 2.26465C12.026 2.11404 11.7437 2.0109 11.2285 1.95508C10.7005 1.89789 10.0122 1.89649 9.02246 1.89649H6.55371C5.56395 1.89649 4.87569 1.89787 4.34766 1.95508C3.83242 2.01092 3.55022 2.11398 3.34278 2.26465C3.17953 2.38329 3.03564 2.52719 2.91699 2.69043C2.76642 2.89782 2.66325 3.18042 2.60742 3.69532C2.55027 4.22322 2.54883 4.9121 2.54883 5.90137V10.0986C2.54883 11.0878 2.55031 11.7768 2.60742 12.3047C2.66326 12.8196 2.76642 13.1032 2.91699 13.3105C3.03558 13.4736 3.17966 13.6178 3.34278 13.7363C3.5502 13.8869 3.83265 13.9901 4.34766 14.0459C4.87568 14.1031 5.56398 14.1035 6.55371 14.1035H8.08399C8.27443 14.6025 8.55077 15.0585 8.89551 15.4541H6.55371C5.59402 15.4541 4.81976 15.4546 4.20215 15.3877C3.57204 15.3194 3.02468 15.1738 2.54883 14.8281C2.27111 14.6263 2.02606 14.3813 1.82422 14.1035C1.47883 13.6278 1.33293 13.08 1.26465 12.4502C1.19783 11.8327 1.19922 11.0579 1.19922 10.0986V5.90137C1.19922 4.94206 1.1978 4.16727 1.26465 3.54981C1.33295 2.91984 1.47867 2.37225 1.82422 1.89649C2.02613 1.61864 2.27098 1.37379 2.54883 1.17188C3.02472 0.826181 3.57197 0.6806 4.20215 0.612307C4.81976 0.545393 5.594 0.546877 6.55371 0.546878H9.02246ZM9.19629 9.14649H4.5459V7.84571H9.19629V9.14649ZM11.0303 6.10645H4.5459V4.80567H11.0303V6.10645Z',\n];\nfunction SkillIcon({ size = 16, ...props }) {\n return h('svg', { ...props, width: size, height: size, viewBox: '0 0 16 16', fill: 'none', xmlns: 'http://www.w3.org/2000/svg' }, h('path', { d: SKILL_ICON_PATHS[0], fill: 'currentColor' }), h('path', { d: SKILL_ICON_PATHS[1], fill: 'currentColor' }));\n}\nfunction installSettingsNavIcon(ctx) {\n if (typeof document === 'undefined' || typeof MutationObserver === 'undefined')\n return;\n ctx.effect(() => {\n const attribute = 'data-dsh-skill-manager-nav-icon';\n const selector = `button[${attribute}]`;\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">${SKILL_ICON_PATHS.map(path => `<path d=\"${path}\"/>`).join('')}</svg>`;\n const mask = `url(\"data:image/svg+xml,${encodeURIComponent(svg)}\")`;\n const style = document.createElement('style');\n style.dataset.dshSkillManager = 'settings-nav-icon';\n style.textContent = `\n ${selector} > svg:first-of-type { display: none !important; }\n ${selector}::before {\n content: '';\n display: block;\n width: 16px;\n height: 16px;\n flex: 0 0 16px;\n background: currentColor;\n -webkit-mask: ${mask} center / contain no-repeat;\n mask: ${mask} center / contain no-repeat;\n }\n `;\n document.head.appendChild(style);\n const mark = () => {\n for (const button of document.querySelectorAll('nav button')) {\n if (button.textContent?.trim() === 'Skill 管理')\n button.setAttribute(attribute, '');\n }\n };\n const observer = new MutationObserver(mark);\n observer.observe(document.documentElement, { childList: true, subtree: true });\n mark();\n return () => {\n observer.disconnect();\n style.remove();\n document.querySelectorAll(selector).forEach(element => element.removeAttribute(attribute));\n };\n }, 'skill-manager: settings navigation icon');\n}\nconst ICON_SPIN = ['dsh-skill-manager-spin', 'to { transform: rotate(360deg); }'];\nfunction ensureKeyframes() {\n if (typeof document === 'undefined')\n return;\n if (document.getElementById(ICON_SPIN[0]))\n return;\n const style = document.createElement('style');\n style.id = ICON_SPIN[0];\n style.textContent = `\n @keyframes ${ICON_SPIN[0]} { ${ICON_SPIN[1]} }\n .dsh-skill-manager-row:hover {\n border-color: ${tokens.borderStrong} !important;\n background: ${tokens.surfaceHover} !important;\n }\n @container (max-width: 360px) {\n .dsh-skill-manager-row { grid-template-columns: minmax(0, 1fr) !important; }\n .dsh-skill-manager-row-icon { display: none !important; }\n .dsh-skill-manager-row-actions { grid-column: 1 !important; justify-content: flex-start !important; }\n }\n `;\n document.head.appendChild(style);\n}\nconst spinnerStyle = { animation: `${ICON_SPIN[0]} 1s linear infinite`, flex: '0 0 auto' };\nconst monoStyle = { fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace' };\nconst tokens = {\n border: 'var(--border-subtle, rgba(148, 163, 184, .22))',\n borderStrong: 'var(--border-strong, rgba(148, 163, 184, .38))',\n accent: 'var(--fg-accent, #6366f1)',\n success: 'var(--fg-success, #16a34a)',\n danger: 'var(--fg-danger, #dc2626)',\n secondary: 'var(--fg-secondary, #64748b)',\n surfaceHover: 'var(--bg-hover, rgba(148, 163, 184, .08))',\n};\nconst panelStyle = { containerType: 'inline-size', display: 'grid', gap: 18, width: '100%', minWidth: 0, maxWidth: 760, padding: '6px 0 36px' };\nfunction buttonStyle(tone, disabled) {\n const base = {\n display: 'inline-flex', alignItems: 'center', gap: 6, minHeight: 32, padding: '0 12px',\n borderRadius: 8, border: `1px solid transparent`, fontSize: 13, fontWeight: 500,\n cursor: disabled ? 'default' : 'pointer', opacity: disabled ? 0.55 : 1, whiteSpace: 'nowrap',\n transition: 'background .15s ease, border-color .15s ease',\n };\n if (tone === 'primary')\n return { ...base, background: tokens.accent, color: 'var(--fg-on-accent, #fff)', border: 'none' };\n return { ...base, background: 'transparent', color: 'inherit', border: `1px solid ${tokens.border}` };\n}\nconst iconButtonStyle = {\n display: 'grid', placeItems: 'center', width: 28, height: 28, padding: 0,\n border: 'none', borderRadius: 7, background: 'transparent', color: tokens.secondary, cursor: 'pointer',\n};\nconst inputStyle = {\n width: '100%', minHeight: 34, padding: '0 10px 0 30px', borderRadius: 8,\n border: `1px solid ${tokens.border}`, background: 'var(--bg-primary, transparent)', color: 'inherit',\n fontSize: 13, outline: 'none', boxSizing: 'border-box',\n};\nconst selectStyle = {\n minHeight: 34, maxWidth: 300, padding: '0 8px', borderRadius: 8,\n border: `1px solid ${tokens.border}`, background: 'var(--bg-primary, transparent)', color: 'inherit', fontSize: 13,\n};\nconst checkboxStyle = { width: 16, height: 16, margin: 0, accentColor: tokens.accent, flex: '0 0 auto' };\nexport function apply(ctx) {\n installSettingsNavIcon(ctx);\n const connection = ctx.connection;\n const request = async (endpoint, payload = {}) => {\n const result = await connection.rpc.call('/skill-manager', endpoint, payload);\n if (!result.ok)\n throw new Error(result.error.message);\n return result.value;\n };\n const list = (projectRoot) => request('list', projectRoot ? { projectRoot } : {});\n const mutate = (endpoint, payload) => request(endpoint, payload);\n const inspect = (path) => request('inspect', { path });\n const inspectRemote = (repository) => request('inspect-remote', { repository });\n const checkUpdates = (name) => request('check-updates', name ? { name } : {});\n ctx.slots.inject('settings.section', () => ctx.slots.register({\n name: 'settings.section',\n id: 'skills',\n order: 35,\n label: 'Skill 管理',\n inject: () => ({ list, mutate, inspect, inspectRemote, checkUpdates, pickDirectory: () => ctx.uiWorkspace.pickDirectory(), loopback: connection.isLoopback }),\n }, SkillManagerSection));\n ctx.slots.inject('conversation.input.left', () => ctx.slots.register({\n name: 'conversation.input.left',\n id: 'skill-manager',\n order: 10,\n inject: () => ({ list, mutate }),\n }, ComposerSkillButton));\n}\nfunction SkillManagerSection(props) {\n const { list, mutate, inspect, inspectRemote, checkUpdates, pickDirectory, loopback } = props;\n const [projectRoot, setProjectRoot] = useState(undefined);\n const [catalog, setCatalog] = useState(null);\n const [query, setQuery] = useState('');\n const [busy, setBusy] = useState(false);\n // 逐个 skill 记账正在检测的名字:单一全局布尔会把其它行的检测按钮一起置灰,\n // 快速连点时第二次点击落在 disabled 按钮上直接被吞掉。\n const [checkingNames, setCheckingNames] = useState(() => new Set());\n const [statuses, setStatuses] = useState({});\n const [error, setError] = useState(null);\n const [repositoryOpen, setRepositoryOpen] = useState(false);\n const [repository, setRepository] = useState('');\n const [grouped, setGrouped] = useState(false);\n const [collapsed, setCollapsed] = useState({});\n // 已点删除、等服务端确认的 skill:立刻从列表隐藏,失败再放回\n const [removing, setRemoving] = useState(() => new Set());\n // 待确认导入:inspect 结果 + 已勾选集合;提交后清空。\n const [selection, setSelection] = useState(null);\n useEffect(() => { ensureKeyframes(); }, []);\n // 追踪用户是否主动选过「只看全局」,避免 useEffect 把它重置回第一个项目\n const userChoseGlobal = useRef(false);\n const projectRoots = catalog?.projectRoots ?? [];\n useEffect(() => {\n // 仅当用户未主动选择「只看全局」时,才自动选中第一个有项目级 skill 的文件夹\n if (projectRoot === undefined && !userChoseGlobal.current && projectRoots.length > 0)\n setProjectRoot(projectRoots[0]);\n // 当前选中的文件夹不再有项目级 skill 时,回退到第一个\n if (projectRoot !== undefined && !projectRoots.includes(projectRoot))\n setProjectRoot(projectRoots[0]);\n }, [projectRoot, projectRoots]);\n const refresh = useCallback(async () => {\n setBusy(true);\n setError(null);\n try {\n setCatalog(await list(projectRoot));\n }\n catch (reason) {\n setError(messageOf(reason));\n }\n finally {\n setBusy(false);\n }\n }, [list, projectRoot]);\n useEffect(() => { void refresh(); }, [refresh]);\n const run = useCallback(async (action) => {\n setBusy(true);\n setError(null);\n try {\n setCatalog(await action());\n return true;\n }\n catch (reason) {\n setError(messageOf(reason));\n return false;\n }\n finally {\n setBusy(false);\n }\n }, []);\n const normalizedQuery = query.trim().toLocaleLowerCase();\n const filtered = (catalog?.entries ?? []).filter(entry => !removing.has(entry.name)\n && (normalizedQuery.length === 0 || `${entry.name} ${entry.description}`.toLocaleLowerCase().includes(normalizedQuery)));\n // 乐观删除:先隐藏该行(不锁整页),服务端确认后写回目录;失败则放回并报错。\n const removeSkill = (entry) => {\n setRemoving(prev => new Set(prev).add(entry.name));\n setError(null);\n void mutate('remove', { name: entry.name, projectRoot }).then(next => {\n setCatalog(next);\n setRemoving(prev => { const rest = new Set(prev); rest.delete(entry.name); return rest; });\n }, reason => {\n setError(messageOf(reason));\n setRemoving(prev => { const rest = new Set(prev); rest.delete(entry.name); return rest; });\n });\n };\n const importSkill = async () => {\n const path = await pickDirectory();\n if (!path)\n return;\n await inspectForInstall(() => inspect(path), path, undefined);\n };\n const importRepository = async (event) => {\n event.preventDefault();\n const source = repository.trim();\n if (!source)\n return;\n if (await inspectForInstall(() => inspectRemote(source), undefined, source)) {\n setRepository('');\n setRepositoryOpen(false);\n }\n };\n // 拿到来源的 skill 列表后进入勾选面板;来源只有一个 skill 时跳过勾选直接装。\n const inspectForInstall = async (call, path, repository) => {\n setBusy(true);\n setError(null);\n try {\n const result = await call();\n if (result.entries.length === 0)\n throw new Error('来源中没有可安装的 skill');\n if (result.entries.length === 1) {\n await installSelection([result.entries[0].name], path, repository);\n return true;\n }\n setSelection({ entries: result.entries, chosen: new Set(result.entries.map(entry => entry.name)), path, repository });\n return true;\n }\n catch (reason) {\n setError(messageOf(reason));\n return false;\n }\n finally {\n setBusy(false);\n }\n };\n const installSelection = async (names, path, repository) => {\n setBusy(true);\n setError(null);\n try {\n setCatalog(await mutate(repository !== undefined ? 'install-remote' : 'install', {\n ...(repository !== undefined ? { repository } : { path }),\n skills: names,\n projectRoot,\n }));\n setSelection(null);\n }\n catch (reason) {\n setError(messageOf(reason));\n }\n finally {\n setBusy(false);\n }\n };\n const updateSkill = async (entry) => {\n const path = entry.updateSupported ? undefined : await pickDirectory() ?? undefined;\n if (!entry.updateSupported && !path)\n return;\n if (await run(() => mutate('update', { name: entry.name, path, projectRoot }))) {\n setStatuses(prev => ({ ...prev, [entry.name]: 'current' }));\n }\n };\n const markChecking = (names, active) => setCheckingNames(prev => {\n const next = new Set(prev);\n for (const name of names) {\n if (active)\n next.add(name);\n else\n next.delete(name);\n }\n return next;\n });\n const checking = checkingNames.size > 0;\n const checkAll = async () => {\n const names = (catalog?.entries ?? []).map(entry => entry.name);\n markChecking(names, true);\n setError(null);\n try {\n const report = await checkUpdates();\n const reported = Object.fromEntries(report.entries.map(entry => [entry.name, entry.status]));\n setStatuses(Object.fromEntries(names.map(name => [name, reported[name] ?? 'unknown'])));\n }\n catch (reason) {\n setError(messageOf(reason));\n }\n finally {\n markChecking(names, false);\n }\n };\n const checkSkill = async (name) => {\n markChecking([name], true);\n setError(null);\n try {\n const report = await checkUpdates(name);\n setStatuses(prev => ({ ...prev, [name]: report.entries.find(entry => entry.name === name)?.status ?? 'unknown' }));\n }\n catch (reason) {\n setError(messageOf(reason));\n }\n finally {\n markChecking([name], false);\n }\n };\n const updatable = (catalog?.entries ?? []).filter(entry => !removing.has(entry.name) && statuses[entry.name] === 'update-available' && entry.updateSupported);\n const updateAll = async () => {\n setBusy(true);\n setError(null);\n try {\n for (const entry of updatable)\n setCatalog(await mutate('update', { name: entry.name, projectRoot }));\n await checkAll();\n }\n catch (reason) {\n setError(messageOf(reason));\n }\n finally {\n setBusy(false);\n }\n };\n const rowProps = (entry) => ({\n key: entry.name,\n entry,\n projectAvailable: projectRoot !== undefined,\n busy,\n checking: checkingNames.has(entry.name),\n updateStatus: statuses[entry.name],\n onScopeChange: (scope, enabled) => void run(() => mutate('set-enabled', { name: entry.name, scope, projectRoot, enabled })),\n onModelInvocationChange: (modelInvocable) => void run(() => mutate('set-model-invocation', { name: entry.name, modelInvocable, projectRoot })),\n onCheck: () => void checkSkill(entry.name),\n onUpdate: () => void updateSkill(entry),\n onRemove: () => removeSkill(entry),\n });\n return h('div', { style: panelStyle, 'aria-busy': busy }, h('header', { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', gap: 16, flexWrap: 'wrap' } }, h('div', { style: { display: 'flex', alignItems: 'center', gap: 10, minWidth: 0 } }, h(SkillIcon, { size: 20, 'aria-hidden': true }), h('h2', { style: { margin: 0, fontSize: 18, fontWeight: 600 } }, 'Skill 管理'), busy ? h(RefreshCw, { size: 14, 'aria-hidden': true, style: spinnerStyle }) : null), h('div', { style: { display: 'flex', gap: 8, flexWrap: 'wrap' } }, h('button', { type: 'button', style: buttonStyle('ghost', busy || checking), onClick: () => void checkAll(), disabled: busy || checking, title: '检测全部 skill 是否有更新(只检测,不更新)' }, h(SearchCheck, { size: 14, 'aria-hidden': true }), checking ? '检测中…' : '检测'), updatable.length > 0 ? h('button', { type: 'button', style: buttonStyle('primary', busy || checking || !loopback), onClick: () => void updateAll(), disabled: busy || checking || !loopback, title: loopback ? `更新全部 ${updatable.length} 个有更新的 skill` : '仅在本机连接时可更新' }, h(RefreshCw, { size: 14, 'aria-hidden': true }), `全部更新 (${updatable.length})`) : null, h('button', { type: 'button', style: buttonStyle('ghost', busy || !loopback), onClick: () => setRepositoryOpen(value => !value), disabled: busy || !loopback, title: loopback ? '从 Git 仓库导入 skill' : '仅在本机连接时可导入' }, h(GitBranch, { size: 14, 'aria-hidden': true }), '仓库'), h('button', { type: 'button', style: buttonStyle('primary', busy || !loopback), onClick: importSkill, disabled: busy || !loopback, title: loopback ? '从本机目录导入 skill' : '仅在本机连接时可导入' }, h(Plus, { size: 14, 'aria-hidden': true }), '本机'))), h('p', { style: { margin: '-8px 0 0', fontSize: 13, color: tokens.secondary, lineHeight: 1.5 } }, '从本机目录或 Git 仓库导入 skill,并按「全局」或「项目」范围启用。'), repositoryOpen ? h('form', { onSubmit: importRepository, style: { display: 'flex', flexWrap: 'wrap', gap: 8, alignItems: 'center' } }, h('input', {\n type: 'text',\n value: repository,\n onChange: (event) => setRepository(event.currentTarget.value),\n placeholder: 'owner/repo 或 Git URL',\n 'aria-label': 'Git 仓库地址',\n autoFocus: true,\n disabled: busy,\n style: { ...inputStyle, flex: '1 1 260px', minWidth: 0, paddingLeft: 10 },\n }), h('button', { type: 'submit', style: buttonStyle('primary', busy || !repository.trim()), disabled: busy || !repository.trim() }, h(GitBranch, { size: 14, 'aria-hidden': true }), '导入'), h('button', { type: 'button', style: iconButtonStyle, onClick: () => setRepositoryOpen(false), disabled: busy, title: '关闭仓库导入', 'aria-label': '关闭仓库导入' }, h(X, { size: 15, 'aria-hidden': true }))) : null, selection ? h('section', { 'aria-label': '选择要导入的 skill', style: { display: 'grid', gap: 8, padding: '12px 14px', borderRadius: 10, border: `1px solid ${tokens.borderStrong}` } }, h('div', { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', gap: 8 } }, h('strong', { style: { fontSize: 13, fontWeight: 600 } }, `来源提供 ${selection.entries.length} 个 skill,勾选要导入的:`), h('button', { type: 'button', style: iconButtonStyle, onClick: () => setSelection(null), disabled: busy, title: '取消导入', 'aria-label': '取消导入' }, h(X, { size: 15, 'aria-hidden': true }))), h('div', { style: { display: 'grid', gap: 4, maxHeight: 260, overflowY: 'auto', margin: '0 -4px', padding: '0 4px' } }, selection.entries.map(entry => h('label', { key: entry.name, style: { display: 'flex', alignItems: 'center', gap: 8, padding: '7px 6px', borderRadius: 7, cursor: busy ? 'default' : 'pointer', fontSize: 13 }, title: entry.description || entry.name }, h('input', { type: 'checkbox', checked: selection.chosen.has(entry.name), disabled: busy, onChange: () => setSelection(prev => prev && {\n ...prev,\n chosen: prev.chosen.has(entry.name)\n ? new Set([...prev.chosen].filter(name => name !== entry.name))\n : new Set([...prev.chosen, entry.name]),\n }), 'aria-label': `导入 ${entry.name}`, style: checkboxStyle }), h('span', { style: { ...monoStyle, minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' } }, entry.name), h('span', { style: { color: tokens.secondary, fontSize: 12, minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', flex: '1 1 auto' } }, entry.description)))), h('div', { style: { display: 'flex', justifyContent: 'flex-end', gap: 8 } }, h('button', { type: 'button', style: buttonStyle('primary', busy || selection.chosen.size === 0), disabled: busy || selection.chosen.size === 0, onClick: () => void installSelection([...selection.chosen], selection.path, selection.repository) }, h(Plus, { size: 14, 'aria-hidden': true }), `导入所选 (${selection.chosen.size})`))) : null, h('div', { style: { display: 'flex', gap: 10, flexWrap: 'wrap', alignItems: 'center' } }, h('div', { style: { position: 'relative', flex: '1 1 220px', display: 'flex', alignItems: 'center' } }, h(Search, { size: 14, 'aria-hidden': true, style: { position: 'absolute', left: 9, color: tokens.secondary, pointerEvents: 'none' } }), h('input', { type: 'search', value: query, placeholder: '搜索 skill…', 'aria-label': '搜索 skill', onChange: (event) => setQuery(event.currentTarget.value), style: inputStyle })), h('label', { style: { display: 'flex', flex: '1 1 220px', minWidth: 0, alignItems: 'center', gap: 8, fontSize: 13, color: tokens.secondary } }, h('span', { style: { flex: '0 0 auto' } }, '项目范围'), h('select', { value: projectRoot ?? '__global__', onChange: (event) => { const value = event.currentTarget.value; if (value === '__global__') {\n userChoseGlobal.current = true;\n setProjectRoot(undefined);\n }\n else {\n userChoseGlobal.current = false;\n setProjectRoot(value);\n } }, style: { ...selectStyle, flex: '1 1 auto', minWidth: 0, maxWidth: 'none' } }, h('option', { value: '__global__' }, '只看全局'), \n // 当前选中的文件夹可能已不在 projectRoots(刚被清空),保留显示以免选中态凭空消失\n ...(projectRoot !== undefined && !projectRoots.includes(projectRoot) ? [projectRoot] : projectRoots).map(root => h('option', { key: root, value: root, title: root }, root.split('/').filter(Boolean).pop() ?? root)))), h(Pill, { active: grouped, onClick: () => setGrouped(value => !value), title: '按来源仓库分组', 'aria-pressed': grouped, style: { flex: '0 0 auto' } }, h(GitBranch, { size: 12, 'aria-hidden': true }), '按仓库')), error ? h('div', { role: 'alert', style: { display: 'flex', gap: 8, alignItems: 'center', margin: 0, padding: '9px 12px', borderRadius: 8, fontSize: 13, color: tokens.danger, background: 'rgba(220, 38, 38, .08)', border: '1px solid rgba(220, 38, 38, .28)' } }, h(AlertCircle, { size: 15, 'aria-hidden': true }), error) : null, h('section', { style: { display: 'grid', width: '100%', minWidth: 0, gap: 8 }, 'aria-label': '已安装 skill' }, catalog === null\n ? h('p', { style: { margin: 0, padding: '24px 0', textAlign: 'center', fontSize: 13, color: tokens.secondary } }, '正在读取…')\n : filtered.length === 0\n ? h(EmptyState, { hasAny: catalog.entries.some(entry => !removing.has(entry.name)) })\n : grouped\n ? groupBySource(filtered).map(group => h('div', { key: group.key, style: { display: 'grid', gap: 8 } }, h('button', {\n type: 'button',\n onClick: () => setCollapsed(prev => ({ ...prev, [group.key]: !prev[group.key] })),\n 'aria-expanded': !collapsed[group.key],\n style: { display: 'flex', alignItems: 'center', gap: 8, padding: '6px 4px', border: 'none', background: 'transparent', color: 'inherit', cursor: 'pointer', fontSize: 13, fontWeight: 600, textAlign: 'left' },\n }, collapsed[group.key] ? h(ChevronRight, { size: 14, 'aria-hidden': true, style: { color: tokens.secondary, flex: '0 0 auto' } }) : h(ChevronDown, { size: 14, 'aria-hidden': true, style: { color: tokens.secondary, flex: '0 0 auto' } }), h(GitBranch, { size: 13, 'aria-hidden': true, style: { color: tokens.secondary, flex: '0 0 auto' } }), h('span', { title: group.key === '__local__' ? undefined : group.key, style: { ...monoStyle, minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' } }, group.label), h('span', { style: { color: tokens.secondary, fontWeight: 400, flex: '0 0 auto' } }, `${group.entries.length} 个`)), collapsed[group.key] ? null : group.entries.map(entry => h(SkillRow, rowProps(entry)))))\n : filtered.map(entry => h(SkillRow, rowProps(entry)))));\n}\nfunction groupBySource(entries) {\n const groups = new Map();\n for (const entry of entries) {\n const key = entry.sourceType === 'git' && entry.sourceUrl ? entry.sourceUrl : '__local__';\n const label = key === '__local__' ? '本机导入' : shortRepoLabel(key);\n const group = groups.get(key) ?? { label, entries: [] };\n group.entries.push(entry);\n groups.set(key, group);\n }\n return [...groups.entries()]\n .map(([key, group]) => ({ key, label: group.label, entries: group.entries }))\n .sort((a, b) => (a.key === '__local__' ? 1 : b.key === '__local__' ? -1 : a.label.localeCompare(b.label)));\n}\nfunction shortRepoLabel(url) {\n const match = /^(?:https?:\\/\\/|git@|ssh:\\/\\/git@)?([^/:]+)[:/]([^/]+\\/[^/]+?)(?:\\.git)?\\/?$/.exec(url);\n return match ? `${match[2]} (${match[1]})` : url;\n}\nfunction EmptyState(props) {\n return h('div', { style: { display: 'grid', justifyItems: 'center', gap: 8, padding: '36px 16px', borderRadius: 10, border: `1px dashed ${tokens.borderStrong}`, color: tokens.secondary, textAlign: 'center' } }, h(PackageOpen, { size: 26, 'aria-hidden': true }), h('p', { style: { margin: 0, fontSize: 13, lineHeight: 1.5 } }, props.hasAny ? '没有匹配的 skill,试试调整搜索词。' : '还没有导入任何 skill。点击右上角「导入」,从本机目录开始。'));\n}\nfunction ComposerSkillButton(props) {\n const { sessionId, useSessions, list, mutate } = props;\n const projectRoot = useSessions(state => state.byId[sessionId]?.cwd);\n const [open, setOpen] = useState(false);\n const containerRef = useRef(null);\n useDismissOnOutsidePointer(containerRef, open, setOpen);\n return h('div', { ref: containerRef, style: { position: 'relative', display: 'inline-flex', marginLeft: -25 } }, h('button', {\n type: 'button',\n title: projectRoot ? '配置当前项目的 Skill' : '当前会话没有工作区',\n 'aria-label': '配置当前项目的 Skill',\n 'aria-expanded': open,\n disabled: !projectRoot,\n onClick: () => setOpen(value => !value),\n style: {\n display: 'grid',\n placeItems: 'center',\n flex: '0 0 auto',\n width: 28,\n height: 28,\n padding: 0,\n border: 'none',\n borderRadius: 999,\n background: open ? 'var(--dsw-alias-bg-active, rgba(255, 255, 255, .16))' : 'var(--dsw-specific-selector, rgba(255, 255, 255, .08))',\n color: 'var(--dsw-alias-label-primary, inherit)',\n cursor: projectRoot ? 'pointer' : 'default',\n opacity: projectRoot ? 1 : 0.5,\n },\n }, h(SkillIcon, { size: 16, 'aria-hidden': true })), open && projectRoot ? h(ProjectSkillPopover, { projectRoot, list, mutate, onClose: () => setOpen(false) }) : null);\n}\nfunction ProjectSkillPopover(props) {\n const { projectRoot, list, mutate, onClose } = props;\n const theme = currentThemeColors();\n const [catalog, setCatalog] = useState(null);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState(null);\n useEffect(() => { ensureKeyframes(); }, []);\n const refresh = useCallback(async () => {\n setBusy(true);\n setError(null);\n try {\n setCatalog(await list(projectRoot));\n }\n catch (reason) {\n setError(messageOf(reason));\n }\n finally {\n setBusy(false);\n }\n }, [list, projectRoot]);\n useEffect(() => { void refresh(); }, [refresh]);\n const toggle = async (entry, enabled) => {\n setBusy(true);\n setError(null);\n try {\n setCatalog(await mutate('set-enabled', { name: entry.name, scope: 'project', projectRoot, enabled }));\n }\n catch (reason) {\n setError(messageOf(reason));\n }\n finally {\n setBusy(false);\n }\n };\n const enabledCount = projectPopoverEnabledCount(catalog?.entries ?? []);\n return h('section', { style: { position: 'absolute', zIndex: 50, left: 0, bottom: 40, width: 320, display: 'grid', gap: 6, padding: 12, border: `1px solid ${tokens.borderStrong}`, borderRadius: 12, background: theme.background, color: theme.color, boxShadow: '0 16px 40px rgba(0, 0, 0, .4)' }, 'aria-label': '当前项目 Skill' }, h('header', { style: { display: 'flex', justifyContent: 'space-between', gap: 8, alignItems: 'center', paddingBottom: 4 } }, h('div', { style: { display: 'flex', alignItems: 'center', gap: 7, minWidth: 0 } }, h(FolderGit, { size: 14, 'aria-hidden': true, style: { color: tokens.secondary, flex: '0 0 auto' } }), h('strong', { style: { fontSize: 13, fontWeight: 600 } }, '项目 Skill'), h('span', { style: { fontSize: 12, color: tokens.secondary } }, `${enabledCount}/${catalog?.entries.length ?? 0} 已启用`)), h('button', { type: 'button', onClick: onClose, style: iconButtonStyle, 'aria-label': '关闭项目 Skill', title: '关闭' }, h(X, { size: 14, 'aria-hidden': true }))), error ? h('div', { role: 'alert', style: { display: 'flex', gap: 6, alignItems: 'center', margin: 0, padding: '7px 9px', borderRadius: 7, fontSize: 12, color: tokens.danger, background: 'rgba(220, 38, 38, .08)' } }, h(AlertCircle, { size: 13, 'aria-hidden': true }), error) : null, h('div', { style: { display: 'grid', gap: 1, maxHeight: 280, overflowY: 'auto', margin: '0 -4px', padding: '0 4px' } }, catalog === null\n ? h('p', { style: { margin: 0, padding: '18px 0', textAlign: 'center', fontSize: 12, color: tokens.secondary } }, '正在读取…')\n : catalog.entries.length === 0\n ? h('p', { style: { margin: 0, padding: '18px 0', textAlign: 'center', fontSize: 12, color: tokens.secondary } }, '未导入 skill。请到「设置 → Skill 管理」导入。')\n : catalog.entries.map(entry => {\n const row = projectPopoverRow(entry, busy);\n return h('label', { key: entry.name, style: { display: 'grid', gridTemplateColumns: '14px minmax(0, 1fr) 30px', gap: 8, alignItems: 'center', padding: '7px 6px', borderRadius: 7, fontSize: 13, cursor: row.disabled ? 'default' : 'pointer' }, title: entry.description || entry.name }, h(SkillIcon, { size: 13, 'aria-hidden': true, style: { color: entry.effectiveEnabled ? tokens.accent : tokens.secondary } }), h('div', { style: { display: 'flex', alignItems: 'center', gap: 6, minWidth: 0 } }, h('span', { style: { minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' } }, entry.name), row.badge ? h(StatusBadge, { active: true, icon: Globe, label: row.badge }) : null), h('input', { type: 'checkbox', checked: row.checked, disabled: row.disabled, onChange: (event) => void toggle(entry, event.currentTarget.checked), 'aria-label': `${entry.name} 项目开关`, title: row.checkboxTitle, style: checkboxStyle }));\n })), busy ? h('div', { style: { display: 'flex', justifyContent: 'flex-end', paddingTop: 2 } }, h(RefreshCw, { size: 12, 'aria-hidden': true, style: spinnerStyle })) : null);\n}\nconst UPDATE_BADGE = {\n 'update-available': { label: '有更新', color: tokens.accent, background: 'rgba(99, 102, 241, .1)', border: '1px solid rgba(99, 102, 241, .35)' },\n 'deleted-upstream': { label: '上游已删除', color: tokens.danger, background: 'rgba(220, 38, 38, .08)', border: '1px solid rgba(220, 38, 38, .3)' },\n 'unknown': { label: '无法检测', color: tokens.secondary, background: 'rgba(148, 163, 184, .09)', border: '1px solid transparent' },\n};\nfunction SkillRow(props) {\n const { entry, projectAvailable, busy, checking, updateStatus, onScopeChange, onModelInvocationChange, onCheck, onUpdate, onRemove } = props;\n const badge = updateStatus ? UPDATE_BADGE[updateStatus] : undefined;\n const manualOnly = entry.modelInvocable === false;\n return h('article', {\n className: 'dsh-skill-manager-row',\n style: {\n display: 'grid', gridTemplateColumns: '32px minmax(0, 1fr)', gap: 12, alignItems: 'center',\n width: '100%', minWidth: 0, maxWidth: '100%', overflow: 'hidden', boxSizing: 'border-box',\n padding: '12px 14px', borderRadius: 10, border: `1px solid ${tokens.border}`,\n background: 'transparent', transition: 'border-color .15s ease, background .15s ease',\n },\n }, h('div', { className: 'dsh-skill-manager-row-icon', style: { display: 'grid', placeItems: 'center', width: 32, height: 32, borderRadius: 8, color: entry.effectiveEnabled ? tokens.accent : tokens.secondary, background: entry.effectiveEnabled ? 'rgba(99, 102, 241, .1)' : 'rgba(148, 163, 184, .1)' } }, h(SkillIcon, { size: 16, 'aria-hidden': true })), h('div', { style: { minWidth: 0, display: 'grid', gap: 4 } }, h('div', { style: { display: 'flex', alignItems: 'center', gap: 8, minWidth: 0, flexWrap: 'wrap' } }, h('strong', { style: { ...monoStyle, fontSize: 13, fontWeight: 600, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' } }, entry.name), badge ? h('span', { style: { display: 'inline-flex', alignItems: 'center', flex: '0 1 auto', padding: '2px 6px', borderRadius: 999, fontSize: 11, lineHeight: '16px', whiteSpace: 'nowrap', color: badge.color, background: badge.background, border: badge.border } }, badge.label) : null, h(SourceBadge, { entry }), manualOnly ? h('span', { title: '仅手动:模型不会自动调用,只能用 /名字 手动引用', style: { display: 'inline-flex', alignItems: 'center', flex: '0 1 auto', padding: '2px 6px', borderRadius: 999, fontSize: 11, lineHeight: '16px', whiteSpace: 'nowrap', color: tokens.secondary, background: 'rgba(148, 163, 184, .09)' } }, '仅手动') : null, h(StatusBadge, { active: entry.globalEnabled, icon: Globe, label: '全局' }), projectAvailable ? h(StatusBadge, { active: entry.projectEnabled, icon: FolderGit, label: '项目' }) : null), entry.description ? h('p', { style: { margin: 0, color: tokens.secondary, lineHeight: 1.45, fontSize: 12.5, display: '-webkit-box', WebkitLineClamp: 2, WebkitBoxOrient: 'vertical', overflow: 'hidden' } }, entry.description) : null), h('div', { className: 'dsh-skill-manager-row-actions', style: { gridColumn: '1 / -1', display: 'flex', width: '100%', minWidth: 0, justifyContent: 'flex-end', alignItems: 'center', gap: 10, flexWrap: 'wrap' } }, h('div', {\n role: 'radiogroup',\n 'aria-label': `${entry.name} ${projectAvailable ? '项目' : '全局'}开关`,\n title: projectAvailable ? '项目开关' : '全局开关',\n style: { display: 'inline-flex', gap: 4, flex: '0 0 auto' },\n }, (projectAvailable\n ? [['project-off', '项目关', false], ['project-on', '项目开', true]]\n : [['global-off', '关闭', false], ['global-on', '全局', true]]).map(([key, label, enabled]) => {\n const active = (projectAvailable ? entry.projectEnabled : entry.globalEnabled) === enabled;\n return h(Pill, {\n key,\n active,\n disabled: busy,\n role: 'radio',\n 'aria-checked': active,\n onClick: () => { if (!active)\n onScopeChange(projectAvailable ? 'project' : 'global', enabled); },\n }, label);\n })), h(Pill, {\n active: manualOnly,\n disabled: busy,\n 'aria-pressed': manualOnly,\n title: manualOnly\n ? '当前仅手动:模型不会自动调用;点按恢复为模型可自动调用'\n : '点按改为仅手动:模型不再自动调用,只能用 /名字 手动引用',\n onClick: () => onModelInvocationChange(manualOnly),\n style: { flex: '0 0 auto' },\n }, '仅手动'), updateStatus === 'current'\n ? h('span', { title: '已是最新', style: { color: tokens.success, fontSize: 12, fontWeight: 500, padding: '0 4px', whiteSpace: 'nowrap' } }, '最新')\n : updateStatus === 'update-available' || updateStatus === 'unknown'\n ? h('button', { type: 'button', style: { ...iconButtonStyle, color: tokens.accent }, disabled: busy || checking, onClick: onUpdate, title: entry.updateSupported ? (entry.sourceType === 'git' ? '从远程仓库更新' : '从原始目录更新') : '选择来源目录并更新', 'aria-label': `更新 ${entry.name}` }, h(RefreshCw, { size: 15, 'aria-hidden': true }))\n : h('button', { type: 'button', style: { ...iconButtonStyle, color: tokens.secondary }, disabled: busy || checking, onClick: onCheck, title: checking ? '检测中…' : `检测 ${entry.name} 是否有更新`, 'aria-label': `检测 ${entry.name} 更新` }, checking\n ? h(RefreshCw, { size: 15, 'aria-hidden': true, style: spinnerStyle })\n : h(SearchCheck, { size: 15, 'aria-hidden': true })), h('button', { type: 'button', style: { ...iconButtonStyle, color: tokens.danger }, onClick: onRemove, title: '从库中移除', 'aria-label': `移除 ${entry.name}` }, h(Trash2, { size: 15, 'aria-hidden': true }))));\n}\nfunction SourceBadge(props) {\n const remote = props.entry.sourceType === 'git';\n const local = props.entry.sourceType === 'local';\n const Icon = remote ? GitBranch : local ? FolderGit : AlertCircle;\n const label = remote ? 'Git' : local ? '本机' : '未知';\n const title = remote ? props.entry.sourceUrl : local ? props.entry.sourcePath : '来源未知,更新时需选择本机来源目录';\n return h('span', {\n title,\n style: {\n display: 'inline-flex', alignItems: 'center', gap: 4, flex: '0 1 auto', maxWidth: '100%', overflow: 'hidden',\n padding: '2px 6px', borderRadius: 999, fontSize: 11, lineHeight: '16px', whiteSpace: 'nowrap',\n color: tokens.secondary, background: 'rgba(148, 163, 184, .09)',\n },\n }, h(Icon, { size: 11, 'aria-hidden': true }), label);\n}\nfunction StatusBadge(props) {\n const Icon = props.icon;\n return h('span', {\n title: props.active ? `${props.label}已启用` : `${props.label}未启用`,\n style: {\n display: 'inline-flex', alignItems: 'center', gap: 4, flex: '0 1 auto', maxWidth: '100%', overflow: 'hidden',\n padding: '2px 6px', borderRadius: 999, fontSize: 11, lineHeight: '16px', whiteSpace: 'nowrap',\n color: props.active ? tokens.success : tokens.secondary,\n background: props.active ? 'rgba(22, 163, 74, .1)' : 'rgba(148, 163, 184, .09)',\n border: `1px solid ${props.active ? 'rgba(22, 163, 74, .3)' : 'transparent'}`,\n },\n }, h(Icon, { size: 11, 'aria-hidden': true }), props.active ? `${props.label}开` : `${props.label}关`);\n}\nfunction currentThemeColors() {\n if (typeof document === 'undefined')\n return { background: '#151517', color: '#f9fafb' };\n const style = getComputedStyle(document.body);\n return {\n background: style.backgroundColor || '#151517',\n color: style.color || '#f9fafb',\n };\n}\nfunction messageOf(reason) {\n return reason instanceof Error ? reason.message : String(reason);\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -434,7 +434,7 @@ function apply(ctx, config) {
|
|
|
434
434
|
if (config.storageDir?.trim() && !isAbsolute(config.storageDir)) throw new Error("storageDir must resolve to an absolute path");
|
|
435
435
|
const manager = new SkillManager(ctx, config);
|
|
436
436
|
ctx.skills.registerProvider((control) => manager.provider(control));
|
|
437
|
-
ctx.effect(() => ctx.connection.rpc.handle("/skill-manager", async (endpoint, payload) => handleRpc(manager, endpoint, payload)
|
|
437
|
+
ctx.effect(() => ctx.connection.rpc.handle("/skill-manager", async (endpoint, payload) => handleRpc(manager, endpoint, payload)), "dsh-skill-manager: rpc");
|
|
438
438
|
}
|
|
439
439
|
async function handleRpc(manager, endpoint, payload) {
|
|
440
440
|
const args = isRecord(payload) ? payload : {};
|
|
@@ -14,8 +14,8 @@ import AlertCircle from 'lucide-react/dist/esm/icons/alert-circle.mjs';
|
|
|
14
14
|
import ChevronDown from 'lucide-react/dist/esm/icons/chevron-down.mjs';
|
|
15
15
|
import ChevronRight from 'lucide-react/dist/esm/icons/chevron-right.mjs';
|
|
16
16
|
import { projectPopoverEnabledCount, projectPopoverRow } from './popover.js';
|
|
17
|
-
//
|
|
18
|
-
export const inject = ['connection', 'slots', '
|
|
17
|
+
// uiWorkspace 仍需注入:「本机导入」走目录选择器
|
|
18
|
+
export const inject = ['connection', 'slots', 'uiWorkspace'];
|
|
19
19
|
const SKILL_ICON_PATHS = [
|
|
20
20
|
'M12.5113 15.4067C12.4395 15.6249 12.1308 15.6249 12.059 15.4067L11.643 14.1416C11.454 13.567 11.0033 13.1164 10.4288 12.9274L9.16369 12.5113C8.94544 12.4395 8.94544 12.1308 9.16369 12.059L10.4288 11.643C11.0033 11.454 11.454 11.0033 11.643 10.4288L12.059 9.16369C12.1308 8.94544 12.4395 8.94544 12.5113 9.16369L12.9274 10.4288C13.1164 11.0033 13.567 11.454 14.1416 11.643L15.4067 12.059C15.6249 12.1308 15.6249 12.4395 15.4067 12.5113L14.1416 12.9274C13.567 13.1164 13.1164 13.567 12.9274 14.1416L12.5113 15.4067Z',
|
|
21
21
|
'M9.02246 0.546878C9.9822 0.546878 10.7564 0.545403 11.374 0.612307C12.0042 0.680586 12.5515 0.826244 13.0273 1.17188C13.3052 1.37376 13.5501 1.61868 13.752 1.89649C14.0975 2.37225 14.2432 2.91984 14.3115 3.54981C14.3784 4.16727 14.377 4.94206 14.377 5.90137V8.51367C13.9611 8.29533 13.5071 8.13985 13.0273 8.06055V5.90137C13.0273 4.9121 13.0259 4.22322 12.9688 3.69532C12.9129 3.18044 12.8098 2.89782 12.6592 2.69043C12.5406 2.52724 12.3966 2.38326 12.2334 2.26465C12.026 2.11404 11.7437 2.0109 11.2285 1.95508C10.7005 1.89789 10.0122 1.89649 9.02246 1.89649H6.55371C5.56395 1.89649 4.87569 1.89787 4.34766 1.95508C3.83242 2.01092 3.55022 2.11398 3.34278 2.26465C3.17953 2.38329 3.03564 2.52719 2.91699 2.69043C2.76642 2.89782 2.66325 3.18042 2.60742 3.69532C2.55027 4.22322 2.54883 4.9121 2.54883 5.90137V10.0986C2.54883 11.0878 2.55031 11.7768 2.60742 12.3047C2.66326 12.8196 2.76642 13.1032 2.91699 13.3105C3.03558 13.4736 3.17966 13.6178 3.34278 13.7363C3.5502 13.8869 3.83265 13.9901 4.34766 14.0459C4.87568 14.1031 5.56398 14.1035 6.55371 14.1035H8.08399C8.27443 14.6025 8.55077 15.0585 8.89551 15.4541H6.55371C5.59402 15.4541 4.81976 15.4546 4.20215 15.3877C3.57204 15.3194 3.02468 15.1738 2.54883 14.8281C2.27111 14.6263 2.02606 14.3813 1.82422 14.1035C1.47883 13.6278 1.33293 13.08 1.26465 12.4502C1.19783 11.8327 1.19922 11.0579 1.19922 10.0986V5.90137C1.19922 4.94206 1.1978 4.16727 1.26465 3.54981C1.33295 2.91984 1.47867 2.37225 1.82422 1.89649C2.02613 1.61864 2.27098 1.37379 2.54883 1.17188C3.02472 0.826181 3.57197 0.6806 4.20215 0.612307C4.81976 0.545393 5.594 0.546877 6.55371 0.546878H9.02246ZM9.19629 9.14649H4.5459V7.84571H9.19629V9.14649ZM11.0303 6.10645H4.5459V4.80567H11.0303V6.10645Z',
|
|
@@ -141,7 +141,7 @@ export function apply(ctx) {
|
|
|
141
141
|
id: 'skills',
|
|
142
142
|
order: 35,
|
|
143
143
|
label: 'Skill 管理',
|
|
144
|
-
inject: () => ({ list, mutate, inspect, inspectRemote, checkUpdates, pickDirectory: () => ctx.
|
|
144
|
+
inject: () => ({ list, mutate, inspect, inspectRemote, checkUpdates, pickDirectory: () => ctx.uiWorkspace.pickDirectory(), loopback: connection.isLoopback }),
|
|
145
145
|
}, SkillManagerSection));
|
|
146
146
|
ctx.slots.inject('conversation.input.left', () => ctx.slots.register({
|
|
147
147
|
name: 'conversation.input.left',
|
|
@@ -417,8 +417,8 @@ function EmptyState(props) {
|
|
|
417
417
|
return h('div', { style: { display: 'grid', justifyItems: 'center', gap: 8, padding: '36px 16px', borderRadius: 10, border: `1px dashed ${tokens.borderStrong}`, color: tokens.secondary, textAlign: 'center' } }, h(PackageOpen, { size: 26, 'aria-hidden': true }), h('p', { style: { margin: 0, fontSize: 13, lineHeight: 1.5 } }, props.hasAny ? '没有匹配的 skill,试试调整搜索词。' : '还没有导入任何 skill。点击右上角「导入」,从本机目录开始。'));
|
|
418
418
|
}
|
|
419
419
|
function ComposerSkillButton(props) {
|
|
420
|
-
const {
|
|
421
|
-
const projectRoot = useSessions(state => state.byId[
|
|
420
|
+
const { sessionId, useSessions, list, mutate } = props;
|
|
421
|
+
const projectRoot = useSessions(state => state.byId[sessionId]?.cwd);
|
|
422
422
|
const [open, setOpen] = useState(false);
|
|
423
423
|
const containerRef = useRef(null);
|
|
424
424
|
useDismissOnOutsidePointer(containerRef, open, setOpen);
|
package/lib/types/index.js
CHANGED
|
@@ -335,7 +335,7 @@ export function apply(ctx, config) {
|
|
|
335
335
|
}
|
|
336
336
|
const manager = new SkillManager(ctx, config);
|
|
337
337
|
ctx.skills.registerProvider(control => manager.provider(control));
|
|
338
|
-
ctx.effect(() => ctx.connection.rpc.handle('/skill-manager', async (endpoint, payload) => handleRpc(manager, endpoint, payload)
|
|
338
|
+
ctx.effect(() => ctx.connection.rpc.handle('/skill-manager', async (endpoint, payload) => handleRpc(manager, endpoint, payload)), 'dsh-skill-manager: rpc');
|
|
339
339
|
}
|
|
340
340
|
async function handleRpc(manager, endpoint, payload) {
|
|
341
341
|
const args = isRecord(payload) ? payload : {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-skills-manager",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
4
4
|
"description": "A DeepSeek Harness plugin for installing and managing skills by global or workspace scope.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -44,9 +44,10 @@
|
|
|
44
44
|
"client": {
|
|
45
45
|
"inject": [
|
|
46
46
|
"@deepseek-ai/dsh-client-connection",
|
|
47
|
-
"@deepseek-ai/dsh-client-runtime",
|
|
48
47
|
"@deepseek-ai/dsh-client-ui-conversation",
|
|
49
|
-
"@deepseek-ai/dsh-client-ui-
|
|
48
|
+
"@deepseek-ai/dsh-client-ui-renderer",
|
|
49
|
+
"@deepseek-ai/dsh-client-ui-settings",
|
|
50
|
+
"@deepseek-ai/dsh-client-ui-workspace"
|
|
50
51
|
],
|
|
51
52
|
"external": [
|
|
52
53
|
"@deepseek-ai/dsh-client-ui-primitives"
|
|
@@ -55,34 +56,34 @@
|
|
|
55
56
|
}
|
|
56
57
|
},
|
|
57
58
|
"peerDependencies": {
|
|
58
|
-
"@deepseek-ai/cordis": "^4.0.
|
|
59
|
-
"@deepseek-ai/dsh-client-connection": "^0.1.
|
|
60
|
-
"@deepseek-ai/dsh-client-
|
|
61
|
-
"@deepseek-ai/dsh-client-ui-
|
|
62
|
-
"@deepseek-ai/dsh-client-ui-
|
|
63
|
-
"@deepseek-ai/dsh-client-ui-settings": "^0.1.
|
|
64
|
-
"@deepseek-ai/dsh-client-ui-
|
|
65
|
-
"@deepseek-ai/dsh-home-paths": "^0.1.
|
|
66
|
-
"@deepseek-ai/dsh-skill": "^0.1.
|
|
67
|
-
"@deepseek-ai/dsh-skill-filesystem": "^0.1.
|
|
68
|
-
"@deepseek-ai/schemastery": "^3.18.
|
|
59
|
+
"@deepseek-ai/cordis": "^4.0.2",
|
|
60
|
+
"@deepseek-ai/dsh-client-connection": "^0.1.2-rc.1",
|
|
61
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.2-rc.1",
|
|
62
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.2-rc.1",
|
|
63
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.2-rc.1",
|
|
64
|
+
"@deepseek-ai/dsh-client-ui-settings": "^0.1.2-rc.1",
|
|
65
|
+
"@deepseek-ai/dsh-client-ui-workspace": "^0.1.2-rc.1",
|
|
66
|
+
"@deepseek-ai/dsh-home-paths": "^0.1.2-rc.1",
|
|
67
|
+
"@deepseek-ai/dsh-skill": "^0.1.2-rc.1",
|
|
68
|
+
"@deepseek-ai/dsh-skill-filesystem": "^0.1.2-rc.1",
|
|
69
|
+
"@deepseek-ai/schemastery": "^3.18.2",
|
|
69
70
|
"react": "^18.2.0"
|
|
70
71
|
},
|
|
71
72
|
"dependencies": {
|
|
72
73
|
"skills": "^1.5.22"
|
|
73
74
|
},
|
|
74
75
|
"devDependencies": {
|
|
75
|
-
"@deepseek-ai/cordis": "^4.0.
|
|
76
|
-
"@deepseek-ai/dsh-client-connection": "^0.1.
|
|
77
|
-
"@deepseek-ai/dsh-client-
|
|
78
|
-
"@deepseek-ai/dsh-client-ui-
|
|
79
|
-
"@deepseek-ai/dsh-client-ui-
|
|
80
|
-
"@deepseek-ai/dsh-client-ui-settings": "^0.1.
|
|
81
|
-
"@deepseek-ai/dsh-client-ui-
|
|
82
|
-
"@deepseek-ai/dsh-home-paths": "^0.1.
|
|
83
|
-
"@deepseek-ai/dsh-skill": "^0.1.
|
|
84
|
-
"@deepseek-ai/dsh-skill-filesystem": "^0.1.
|
|
85
|
-
"@deepseek-ai/schemastery": "^3.18.
|
|
76
|
+
"@deepseek-ai/cordis": "^4.0.2",
|
|
77
|
+
"@deepseek-ai/dsh-client-connection": "^0.1.2-rc.1",
|
|
78
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.2-rc.1",
|
|
79
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.2-rc.1",
|
|
80
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.2-rc.1",
|
|
81
|
+
"@deepseek-ai/dsh-client-ui-settings": "^0.1.2-rc.1",
|
|
82
|
+
"@deepseek-ai/dsh-client-ui-workspace": "^0.1.2-rc.1",
|
|
83
|
+
"@deepseek-ai/dsh-home-paths": "^0.1.2-rc.1",
|
|
84
|
+
"@deepseek-ai/dsh-skill": "^0.1.2-rc.1",
|
|
85
|
+
"@deepseek-ai/dsh-skill-filesystem": "^0.1.2-rc.1",
|
|
86
|
+
"@deepseek-ai/schemastery": "^3.18.2",
|
|
86
87
|
"@types/node": "^22.0.0",
|
|
87
88
|
"@types/react": "~18.3.1",
|
|
88
89
|
"lucide-react": "^1.31.0",
|
package/plugin-design.md
CHANGED
|
@@ -21,4 +21,4 @@
|
|
|
21
21
|
- 「仅手动」由 provider 解析 invocation 策略时决定:`state.json` 的覆盖优先于 frontmatter `disable-model-invocation`,list 与 get 两条路径同时套用,因此不改写 `SKILL.md`,更新与重装也不会丢设置;没有覆盖条目时完全跟随文件声明。
|
|
22
22
|
- 一键更新检测按来源分组;不同来源的浅克隆以及同一来源内各 skill 的内容哈希并发执行,且检测过程不修改已安装内容。
|
|
23
23
|
- 设置页使用 `settings.section` 作为左侧一级入口;输入框 `+` 右边的扳手图标控件打开当前会话 cwd 的项目级开关。
|
|
24
|
-
- RPC
|
|
24
|
+
- RPC 走 Connection 已认证的 `/api`(loopback 或 trustedHosts);导入等写盘操作在 UI 上仍用 `connection.isLoopback` 关掉,非本机页面不能点。
|