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 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 RPCs are loopback-only because they write local files.
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.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs
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.31.0 - ISC
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs
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.31.0 - ISC
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs
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.31.0 - ISC
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/defaultAttributes.mjs
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.31.0 - ISC
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs
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.31.0 - ISC
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/context.mjs
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/Icon.mjs
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/createLucideIcon.mjs
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/plus.mjs
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/refresh-cw.mjs
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search-check.mjs
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search.mjs
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/x.mjs
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/trash-2.mjs
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/globe.mjs
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/folder-git.mjs
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/git-branch.mjs
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/package-open.mjs
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-alert.mjs
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-down.mjs
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.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-right.mjs
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
- "workspaces"
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.workspaces.pickDirectory(),
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 { session, useSessions, list, mutate } = props;
1202
- const projectRoot = useSessions((state) => state.byId[session.sessionId]?.cwd);
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), { authority: "loopback" }), "dsh-skill-manager: rpc");
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 : {};
@@ -1,3 +1,3 @@
1
- import type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client';
1
+ import type { Context as ClientContext } from '@deepseek-ai/cordis';
2
2
  export declare const inject: string[];
3
3
  export declare function apply(ctx: ClientContext): void;
@@ -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
- // 'workspaces' 仍需注入:项目范围列表已改用 catalog.projectRoots,但「本机导入」的目录选择器还依赖它
18
- export const inject = ['connection', 'slots', 'workspaces'];
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.workspaces.pickDirectory(), loopback: connection.isLoopback }),
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 { session, useSessions, list, mutate } = props;
421
- const projectRoot = useSessions(state => state.byId[session.sessionId]?.cwd);
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);
@@ -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), { authority: 'loopback' }), 'dsh-skill-manager: rpc');
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.8",
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-settings"
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.1",
59
- "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6",
60
- "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6",
61
- "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6",
62
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.1-rc.2",
63
- "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.6",
64
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6",
65
- "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.6",
66
- "@deepseek-ai/dsh-skill": "^0.1.0-rc.6",
67
- "@deepseek-ai/dsh-skill-filesystem": "^0.1.0-rc.6",
68
- "@deepseek-ai/schemastery": "^3.18.1",
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.1",
76
- "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6",
77
- "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6",
78
- "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6",
79
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.1-rc.2",
80
- "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.6",
81
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6",
82
- "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.6",
83
- "@deepseek-ai/dsh-skill": "^0.1.0-rc.6",
84
- "@deepseek-ai/dsh-skill-filesystem": "^0.1.0-rc.6",
85
- "@deepseek-ai/schemastery": "^3.18.1",
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 仅注册 loopback authority,因为导入和持久化操作会触碰本机文件系统。
24
+ - RPC 走 Connection 已认证的 `/api`(loopback 或 trustedHosts);导入等写盘操作在 UI 上仍用 `connection.isLoopback` 关掉,非本机页面不能点。