dsh-skills-manager 0.1.11 → 0.2.0
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/lib/client.js +52 -10
- package/lib/client.js.map +1 -1
- package/lib/types/client/index.js +29 -1
- package/package.json +19 -19
package/lib/client.js
CHANGED
|
@@ -1442,6 +1442,19 @@ function SkillRow(props) {
|
|
|
1442
1442
|
const { entry, projectAvailable, busy, checking, updateStatus, onScopeChange, onModelInvocationChange, onCheck, onUpdate, onRemove } = props;
|
|
1443
1443
|
const badge = updateStatus ? UPDATE_BADGE[updateStatus] : void 0;
|
|
1444
1444
|
const manualOnly = entry.modelInvocable === false;
|
|
1445
|
+
const descriptionRef = (0, react.useRef)(null);
|
|
1446
|
+
const [descriptionExpanded, setDescriptionExpanded] = (0, react.useState)(false);
|
|
1447
|
+
const [descriptionOverflowing, setDescriptionOverflowing] = (0, react.useState)(false);
|
|
1448
|
+
const descriptionId = `skill-description-${entry.name}`;
|
|
1449
|
+
(0, react.useEffect)(() => {
|
|
1450
|
+
const element = descriptionRef.current;
|
|
1451
|
+
if (!element || descriptionExpanded) return;
|
|
1452
|
+
const measure = () => setDescriptionOverflowing(element.scrollHeight > element.clientHeight + 1);
|
|
1453
|
+
measure();
|
|
1454
|
+
const observer = new ResizeObserver(measure);
|
|
1455
|
+
observer.observe(element);
|
|
1456
|
+
return () => observer.disconnect();
|
|
1457
|
+
}, [entry.description, descriptionExpanded]);
|
|
1445
1458
|
return (0, react.createElement)("article", {
|
|
1446
1459
|
className: "dsh-skill-manager-row",
|
|
1447
1460
|
style: {
|
|
@@ -1525,16 +1538,45 @@ function SkillRow(props) {
|
|
|
1525
1538
|
active: entry.projectEnabled,
|
|
1526
1539
|
icon: FolderGit,
|
|
1527
1540
|
label: "项目"
|
|
1528
|
-
}) : null), entry.description ? (0, react.createElement)("p", {
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1541
|
+
}) : null), entry.description ? (0, react.createElement)("p", {
|
|
1542
|
+
id: descriptionId,
|
|
1543
|
+
ref: descriptionRef,
|
|
1544
|
+
style: {
|
|
1545
|
+
margin: 0,
|
|
1546
|
+
color: tokens.secondary,
|
|
1547
|
+
lineHeight: 1.45,
|
|
1548
|
+
fontSize: 12.5,
|
|
1549
|
+
whiteSpace: "pre-wrap",
|
|
1550
|
+
overflowWrap: "anywhere",
|
|
1551
|
+
userSelect: "text",
|
|
1552
|
+
WebkitUserSelect: "text",
|
|
1553
|
+
cursor: "text",
|
|
1554
|
+
...!descriptionExpanded ? {
|
|
1555
|
+
display: "-webkit-box",
|
|
1556
|
+
WebkitLineClamp: 2,
|
|
1557
|
+
WebkitBoxOrient: "vertical",
|
|
1558
|
+
overflow: "hidden"
|
|
1559
|
+
} : {}
|
|
1560
|
+
}
|
|
1561
|
+
}, entry.description) : null, entry.description && (descriptionOverflowing || descriptionExpanded) ? (0, react.createElement)("button", {
|
|
1562
|
+
type: "button",
|
|
1563
|
+
"aria-expanded": descriptionExpanded,
|
|
1564
|
+
"aria-controls": descriptionId,
|
|
1565
|
+
onClick: () => setDescriptionExpanded((expanded) => !expanded),
|
|
1566
|
+
style: {
|
|
1567
|
+
...buttonStyle("ghost", false),
|
|
1568
|
+
justifySelf: "start",
|
|
1569
|
+
border: "none",
|
|
1570
|
+
padding: 0,
|
|
1571
|
+
minHeight: 28,
|
|
1572
|
+
color: tokens.accent,
|
|
1573
|
+
fontSize: 12
|
|
1574
|
+
}
|
|
1575
|
+
}, (0, react.createElement)(ChevronDown, {
|
|
1576
|
+
size: 14,
|
|
1577
|
+
"aria-hidden": true,
|
|
1578
|
+
style: { transform: descriptionExpanded ? "rotate(180deg)" : void 0 }
|
|
1579
|
+
}), descriptionExpanded ? "收起" : "展开全部") : null), (0, react.createElement)("div", {
|
|
1538
1580
|
className: "dsh-skill-manager-row-actions",
|
|
1539
1581
|
style: {
|
|
1540
1582
|
gridColumn: "1 / -1",
|
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","Trash2","Icon"],"sources":["../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/defaultAttributes.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/context.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/Icon.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/createLucideIcon.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/plus.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/refresh-cw.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search-check.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/x.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/trash.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/globe.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/folder-git.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/git-branch.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/package-open.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-alert.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-down.mjs","../node_modules/.pnpm/lucide-react@1.41.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.41.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.41.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.41.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.41.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.41.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.41.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.41.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.41.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.41.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.41.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.41.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.41.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.41.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.41.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.41.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 Trash = createLucideIcon(\"trash\", __iconNode);\n\nexport { __iconNode, Trash as default };\n//# sourceMappingURL=trash.mjs.map\n","/**\n * @license lucide-react v1.41.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.41.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.41.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.41.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.41.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.41.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.41.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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"}
|
|
1
|
+
{"version":3,"file":"client.js","names":["__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","repository","Pill","AlertCircle","Trash2","Icon"],"sources":["../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/defaultAttributes.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/context.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/Icon.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/createLucideIcon.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/plus.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/refresh-cw.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search-check.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/x.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/trash.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/globe.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/folder-git.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/git-branch.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/package-open.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-alert.mjs","../node_modules/.pnpm/lucide-react@1.41.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-down.mjs","../node_modules/.pnpm/lucide-react@1.41.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.41.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.41.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.41.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.41.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.41.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.41.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.41.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.41.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.41.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.41.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.41.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.41.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.41.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.41.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.41.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 Trash = createLucideIcon(\"trash\", __iconNode);\n\nexport { __iconNode, Trash as default };\n//# sourceMappingURL=trash.mjs.map\n","/**\n * @license lucide-react v1.41.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.41.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.41.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.41.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.41.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.41.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.41.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 const descriptionRef = useRef(null);\n const [descriptionExpanded, setDescriptionExpanded] = useState(false);\n const [descriptionOverflowing, setDescriptionOverflowing] = useState(false);\n const descriptionId = `skill-description-${entry.name}`;\n useEffect(() => {\n const element = descriptionRef.current;\n if (!element || descriptionExpanded)\n return;\n const measure = () => setDescriptionOverflowing(element.scrollHeight > element.clientHeight + 1);\n measure();\n const observer = new ResizeObserver(measure);\n observer.observe(element);\n return () => observer.disconnect();\n }, [entry.description, descriptionExpanded]);\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', {\n id: descriptionId,\n ref: descriptionRef,\n style: {\n margin: 0, color: tokens.secondary, lineHeight: 1.45, fontSize: 12.5,\n whiteSpace: 'pre-wrap', overflowWrap: 'anywhere', userSelect: 'text', WebkitUserSelect: 'text', cursor: 'text',\n ...(!descriptionExpanded ? { display: '-webkit-box', WebkitLineClamp: 2, WebkitBoxOrient: 'vertical', overflow: 'hidden' } : {}),\n },\n }, entry.description) : null, entry.description && (descriptionOverflowing || descriptionExpanded) ? h('button', {\n type: 'button',\n 'aria-expanded': descriptionExpanded,\n 'aria-controls': descriptionId,\n onClick: () => setDescriptionExpanded(expanded => !expanded),\n style: { ...buttonStyle('ghost', false), justifySelf: 'start', border: 'none', padding: 0, minHeight: 28, color: tokens.accent, fontSize: 12 },\n }, h(ChevronDown, { size: 14, 'aria-hidden': true, style: { transform: descriptionExpanded ? 'rotate(180deg)' : undefined } }), descriptionExpanded ? '收起' : '展开全部') : 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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"}
|
|
@@ -498,6 +498,20 @@ function SkillRow(props) {
|
|
|
498
498
|
const { entry, projectAvailable, busy, checking, updateStatus, onScopeChange, onModelInvocationChange, onCheck, onUpdate, onRemove } = props;
|
|
499
499
|
const badge = updateStatus ? UPDATE_BADGE[updateStatus] : undefined;
|
|
500
500
|
const manualOnly = entry.modelInvocable === false;
|
|
501
|
+
const descriptionRef = useRef(null);
|
|
502
|
+
const [descriptionExpanded, setDescriptionExpanded] = useState(false);
|
|
503
|
+
const [descriptionOverflowing, setDescriptionOverflowing] = useState(false);
|
|
504
|
+
const descriptionId = `skill-description-${entry.name}`;
|
|
505
|
+
useEffect(() => {
|
|
506
|
+
const element = descriptionRef.current;
|
|
507
|
+
if (!element || descriptionExpanded)
|
|
508
|
+
return;
|
|
509
|
+
const measure = () => setDescriptionOverflowing(element.scrollHeight > element.clientHeight + 1);
|
|
510
|
+
measure();
|
|
511
|
+
const observer = new ResizeObserver(measure);
|
|
512
|
+
observer.observe(element);
|
|
513
|
+
return () => observer.disconnect();
|
|
514
|
+
}, [entry.description, descriptionExpanded]);
|
|
501
515
|
return h('article', {
|
|
502
516
|
className: 'dsh-skill-manager-row',
|
|
503
517
|
style: {
|
|
@@ -506,7 +520,21 @@ function SkillRow(props) {
|
|
|
506
520
|
padding: '12px 14px', borderRadius: 10, border: `1px solid ${tokens.border}`,
|
|
507
521
|
background: 'transparent', transition: 'border-color .15s ease, background .15s ease',
|
|
508
522
|
},
|
|
509
|
-
}, 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', {
|
|
523
|
+
}, 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', {
|
|
524
|
+
id: descriptionId,
|
|
525
|
+
ref: descriptionRef,
|
|
526
|
+
style: {
|
|
527
|
+
margin: 0, color: tokens.secondary, lineHeight: 1.45, fontSize: 12.5,
|
|
528
|
+
whiteSpace: 'pre-wrap', overflowWrap: 'anywhere', userSelect: 'text', WebkitUserSelect: 'text', cursor: 'text',
|
|
529
|
+
...(!descriptionExpanded ? { display: '-webkit-box', WebkitLineClamp: 2, WebkitBoxOrient: 'vertical', overflow: 'hidden' } : {}),
|
|
530
|
+
},
|
|
531
|
+
}, entry.description) : null, entry.description && (descriptionOverflowing || descriptionExpanded) ? h('button', {
|
|
532
|
+
type: 'button',
|
|
533
|
+
'aria-expanded': descriptionExpanded,
|
|
534
|
+
'aria-controls': descriptionId,
|
|
535
|
+
onClick: () => setDescriptionExpanded(expanded => !expanded),
|
|
536
|
+
style: { ...buttonStyle('ghost', false), justifySelf: 'start', border: 'none', padding: 0, minHeight: 28, color: tokens.accent, fontSize: 12 },
|
|
537
|
+
}, h(ChevronDown, { size: 14, 'aria-hidden': true, style: { transform: descriptionExpanded ? 'rotate(180deg)' : undefined } }), descriptionExpanded ? '收起' : '展开全部') : 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', {
|
|
510
538
|
role: 'radiogroup',
|
|
511
539
|
'aria-label': `${entry.name} ${projectAvailable ? '项目' : '全局'}开关`,
|
|
512
540
|
title: projectAvailable ? '项目开关' : '全局开关',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-skills-manager",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "A DeepSeek Harness plugin for installing and managing skills by global or workspace scope.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -57,15 +57,15 @@
|
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
59
|
"@deepseek-ai/cordis": "^4.0.2",
|
|
60
|
-
"@deepseek-ai/dsh-client-connection": "^0.1.3-alpha.2",
|
|
61
|
-
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.3-alpha.2",
|
|
62
|
-
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.3-alpha.2",
|
|
63
|
-
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.3-alpha.2",
|
|
64
|
-
"@deepseek-ai/dsh-client-ui-settings": "^0.1.3-alpha.2",
|
|
65
|
-
"@deepseek-ai/dsh-client-ui-workspace": "^0.1.3-alpha.2",
|
|
66
|
-
"@deepseek-ai/dsh-home-paths": "^0.1.3-alpha.2",
|
|
67
|
-
"@deepseek-ai/dsh-skill": "^0.1.3-alpha.2",
|
|
68
|
-
"@deepseek-ai/dsh-skill-filesystem": "^0.1.3-alpha.2",
|
|
60
|
+
"@deepseek-ai/dsh-client-connection": "^0.1.3-alpha.2 || ^0.1.5-alpha.1",
|
|
61
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.3-alpha.2 || ^0.1.5-alpha.1",
|
|
62
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.3-alpha.2 || ^0.1.5-alpha.1",
|
|
63
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.3-alpha.2 || ^0.1.5-alpha.1",
|
|
64
|
+
"@deepseek-ai/dsh-client-ui-settings": "^0.1.3-alpha.2 || ^0.1.5-alpha.1",
|
|
65
|
+
"@deepseek-ai/dsh-client-ui-workspace": "^0.1.3-alpha.2 || ^0.1.5-alpha.1",
|
|
66
|
+
"@deepseek-ai/dsh-home-paths": "^0.1.3-alpha.2 || ^0.1.5-alpha.1",
|
|
67
|
+
"@deepseek-ai/dsh-skill": "^0.1.3-alpha.2 || ^0.1.5-alpha.1",
|
|
68
|
+
"@deepseek-ai/dsh-skill-filesystem": "^0.1.3-alpha.2 || ^0.1.5-alpha.1",
|
|
69
69
|
"@deepseek-ai/schemastery": "^3.18.2",
|
|
70
70
|
"react": "^18.2.0"
|
|
71
71
|
},
|
|
@@ -74,15 +74,15 @@
|
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|
|
76
76
|
"@deepseek-ai/cordis": "^4.0.2",
|
|
77
|
-
"@deepseek-ai/dsh-client-connection": "^0.1.
|
|
78
|
-
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.
|
|
79
|
-
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.
|
|
80
|
-
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.
|
|
81
|
-
"@deepseek-ai/dsh-client-ui-settings": "^0.1.
|
|
82
|
-
"@deepseek-ai/dsh-client-ui-workspace": "^0.1.
|
|
83
|
-
"@deepseek-ai/dsh-home-paths": "^0.1.
|
|
84
|
-
"@deepseek-ai/dsh-skill": "^0.1.
|
|
85
|
-
"@deepseek-ai/dsh-skill-filesystem": "^0.1.
|
|
77
|
+
"@deepseek-ai/dsh-client-connection": "^0.1.5-alpha.1",
|
|
78
|
+
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.5-alpha.1",
|
|
79
|
+
"@deepseek-ai/dsh-client-ui-primitives": "^0.1.5-alpha.1",
|
|
80
|
+
"@deepseek-ai/dsh-client-ui-renderer": "^0.1.5-alpha.1",
|
|
81
|
+
"@deepseek-ai/dsh-client-ui-settings": "^0.1.5-alpha.1",
|
|
82
|
+
"@deepseek-ai/dsh-client-ui-workspace": "^0.1.5-alpha.1",
|
|
83
|
+
"@deepseek-ai/dsh-home-paths": "^0.1.5-alpha.1",
|
|
84
|
+
"@deepseek-ai/dsh-skill": "^0.1.5-alpha.1",
|
|
85
|
+
"@deepseek-ai/dsh-skill-filesystem": "^0.1.5-alpha.1",
|
|
86
86
|
"@deepseek-ai/schemastery": "^3.18.2",
|
|
87
87
|
"@types/node": "^22.0.0",
|
|
88
88
|
"@types/react": "~18.3.1",
|