dsh-skills-manager 0.1.2 → 0.1.3

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 CHANGED
@@ -346,6 +346,12 @@ const __iconNode = [
346
346
  ];
347
347
  const CircleAlert = createLucideIcon("circle-alert", __iconNode);
348
348
 
349
+ //#endregion
350
+ //#region lib/types/client/session.js
351
+ function projectRootForSession(state, sessionId) {
352
+ return state.byId[sessionId]?.cwd;
353
+ }
354
+
349
355
  //#endregion
350
356
  //#region lib/types/client/index.js
351
357
  const inject = [
@@ -795,8 +801,8 @@ function EmptyState(props) {
795
801
  } }, props.hasAny ? "没有匹配的 skill,试试调整搜索词。" : "还没有导入任何 skill。点击右上角「导入」,从本机目录开始。"));
796
802
  }
797
803
  function ComposerSkillButton(props) {
798
- const { session, list, mutate } = props;
799
- const projectRoot = session.cwd;
804
+ const { session, useSessions, list, mutate } = props;
805
+ const projectRoot = useSessions((state) => projectRootForSession(state, session.sessionId));
800
806
  const [open, setOpen] = (0, react.useState)(false);
801
807
  const containerRef = (0, react.useRef)(null);
802
808
  (0, react.useEffect)(() => {
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","AlertCircle","Icon"],"sources":["../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/defaultAttributes.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/context.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/Icon.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/createLucideIcon.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/wrench.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/plus.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/refresh-cw.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/x.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/trash-2.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/globe.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/folder-git.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/git-branch.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/package-open.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/puzzle.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-alert.mjs","types/client/index.js"],"sourcesContent":["/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.mjs';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { createContext, useContext, useMemo, createElement } from 'react';\n\nconst LucideContext = createContext({});\nfunction LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n}) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, className]\n );\n return createElement(LucideContext.Provider, { value }, children);\n}\nconst useLucideContext = () => useContext(LucideContext);\n\nexport { LucideProvider, useLucideContext };\n//# sourceMappingURL=context.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.mjs';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.mjs';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { useLucideContext } from './context.mjs';\n\nconst Icon = forwardRef(\n ({ color, size, strokeWidth, absoluteStrokeWidth, className = \"\", children, iconNode, ...rest }, ref) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n color: contextColor = \"currentColor\",\n className: contextClass = \"\"\n } = useLucideContext() ?? {};\n const calculatedStrokeWidth = absoluteStrokeWidth ?? contextAbsoluteStrokeWidth ? Number(strokeWidth ?? contextStrokeWidth) * 24 / Number(size ?? contextSize) : strokeWidth ?? contextStrokeWidth;\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size ?? contextSize ?? defaultAttributes.width,\n height: size ?? contextSize ?? defaultAttributes.height,\n stroke: color ?? contextColor,\n strokeWidth: calculatedStrokeWidth,\n className: mergeClasses(\"lucide\", contextClass, className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.mjs';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.mjs';\nimport Icon from './Icon.mjs';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z\",\n key: \"1ngwbx\"\n }\n ]\n];\nconst Wrench = createLucideIcon(\"wrench\", __iconNode);\n\nexport { __iconNode, Wrench as default };\n//# sourceMappingURL=wrench.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n];\nconst Plus = createLucideIcon(\"plus\", __iconNode);\n\nexport { __iconNode, Plus as default };\n//# sourceMappingURL=plus.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\", key: \"v9h5vc\" }],\n [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }],\n [\"path\", { d: \"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\", key: \"3uifl3\" }],\n [\"path\", { d: \"M8 16H3v5\", key: \"1cv678\" }]\n];\nconst RefreshCw = createLucideIcon(\"refresh-cw\", __iconNode);\n\nexport { __iconNode, RefreshCw as default };\n//# sourceMappingURL=refresh-cw.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash2 = createLucideIcon(\"trash-2\", __iconNode);\n\nexport { __iconNode, Trash2 as default };\n//# sourceMappingURL=trash-2.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\", key: \"13o1zl\" }],\n [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }]\n];\nconst Globe = createLucideIcon(\"globe\", __iconNode);\n\nexport { __iconNode, Globe as default };\n//# sourceMappingURL=globe.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"13\", r: \"2\", key: \"1c1ljs\" }],\n [\n \"path\",\n {\n d: \"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\",\n key: \"1kt360\"\n }\n ],\n [\"path\", { d: \"M14 13h3\", key: \"1dgedf\" }],\n [\"path\", { d: \"M7 13h3\", key: \"1pygq7\" }]\n];\nconst FolderGit = createLucideIcon(\"folder-git\", __iconNode);\n\nexport { __iconNode, FolderGit as default };\n//# sourceMappingURL=folder-git.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 6a9 9 0 0 0-9 9V3\", key: \"1cii5b\" }],\n [\"circle\", { cx: \"18\", cy: \"6\", r: \"3\", key: \"1h7g24\" }],\n [\"circle\", { cx: \"6\", cy: \"18\", r: \"3\", key: \"fqmcym\" }]\n];\nconst GitBranch = createLucideIcon(\"git-branch\", __iconNode);\n\nexport { __iconNode, GitBranch as default };\n//# sourceMappingURL=git-branch.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 22v-9\", key: \"x3hkom\" }],\n [\n \"path\",\n {\n d: \"M15.17 2.21a1.67 1.67 0 0 1 1.63 0L21 4.57a1.93 1.93 0 0 1 0 3.36L8.82 14.79a1.655 1.655 0 0 1-1.64 0L3 12.43a1.93 1.93 0 0 1 0-3.36z\",\n key: \"2ntwy6\"\n }\n ],\n [\n \"path\",\n {\n d: \"M20 13v3.87a2.06 2.06 0 0 1-1.11 1.83l-6 3.08a1.93 1.93 0 0 1-1.78 0l-6-3.08A2.06 2.06 0 0 1 4 16.87V13\",\n key: \"1pmm1c\"\n }\n ],\n [\n \"path\",\n {\n d: \"M21 12.43a1.93 1.93 0 0 0 0-3.36L8.83 2.2a1.64 1.64 0 0 0-1.63 0L3 4.57a1.93 1.93 0 0 0 0 3.36l12.18 6.86a1.636 1.636 0 0 0 1.63 0z\",\n key: \"12ttoo\"\n }\n ]\n];\nconst PackageOpen = createLucideIcon(\"package-open\", __iconNode);\n\nexport { __iconNode, PackageOpen as default };\n//# sourceMappingURL=package-open.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z\",\n key: \"w46dr5\"\n }\n ]\n];\nconst Puzzle = createLucideIcon(\"puzzle\", __iconNode);\n\nexport { __iconNode, Puzzle as default };\n//# sourceMappingURL=puzzle.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.mjs.map\n","import { createElement as h, useCallback, useEffect, useRef, useState } from 'react';\nimport Wrench from 'lucide-react/dist/esm/icons/wrench.mjs';\nimport Plus from 'lucide-react/dist/esm/icons/plus.mjs';\nimport RefreshCw from 'lucide-react/dist/esm/icons/refresh-cw.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 Puzzle from 'lucide-react/dist/esm/icons/puzzle.mjs';\nimport AlertCircle from 'lucide-react/dist/esm/icons/alert-circle.mjs';\nexport const inject = ['connection', 'slots', 'workspaces'];\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 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 = request;\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, pickDirectory: () => ctx.workspaces.pickDirectory(), loopback: connection.isLoopback }),\n }, SkillManagerSection));\n ctx.slots.inject('conversation.input.left', () => ctx.slots.register({\n name: 'conversation.input.left',\n id: 'skill-manager',\n order: 10,\n inject: () => ({ list, mutate }),\n }, ComposerSkillButton));\n}\nfunction SkillManagerSection(props) {\n const { list, mutate, pickDirectory, loopback, useWorkspaces } = props;\n const workspaces = useWorkspaces(state => state);\n const [projectRoot, setProjectRoot] = useState(undefined);\n const [catalog, setCatalog] = useState(null);\n const [query, setQuery] = useState('');\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState(null);\n const [repositoryOpen, setRepositoryOpen] = useState(false);\n const [repository, setRepository] = useState('');\n useEffect(() => { ensureKeyframes(); }, []);\n // 追踪用户是否主动选过「只看全局」,避免 useEffect 把它重置回第一个工作区\n const userChoseGlobal = useRef(false);\n useEffect(() => {\n // 仅当用户未主动选择「只看全局」时,才自动选中第一个工作区\n if (projectRoot === undefined && !userChoseGlobal.current && workspaces.items.length > 0)\n setProjectRoot(workspaces.items[0].path);\n // 当前选中的工作区被移除时,回退到第一个工作区\n if (projectRoot !== undefined && !workspaces.items.some(item => item.path === projectRoot))\n setProjectRoot(workspaces.items[0]?.path);\n }, [projectRoot, workspaces.items]);\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 => normalizedQuery.length === 0 || `${entry.name} ${entry.description}`.toLocaleLowerCase().includes(normalizedQuery));\n const importSkill = async () => {\n const path = await pickDirectory();\n if (path)\n await run(() => mutate('install', { path, projectRoot }));\n };\n const importRepository = async (event) => {\n event.preventDefault();\n const source = repository.trim();\n if (!source)\n return;\n if (await run(() => mutate('install-remote', { repository: source, projectRoot }))) {\n setRepository('');\n setRepositoryOpen(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 await run(() => mutate('update', { name: entry.name, path, projectRoot }));\n };\n const selectedWorkspace = workspaces.items.find(item => item.path === projectRoot);\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(Puzzle, { 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 || !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, 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__' }, '只看全局'), ...workspaces.items.map(workspace => h('option', { key: workspace.workspaceId, value: workspace.path }, workspace.title))))), 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.length ?? 0) > 0 })\n : filtered.map(entry => h(SkillRow, {\n key: entry.name,\n entry,\n projectLabel: selectedWorkspace?.title ?? '当前项目',\n projectAvailable: projectRoot !== undefined,\n busy,\n onGlobalChange: enabled => void run(() => mutate('set-enabled', { name: entry.name, scope: 'global', projectRoot, enabled })),\n onProjectChange: enabled => void run(() => mutate('set-enabled', { name: entry.name, scope: 'project', projectRoot, enabled })),\n onUpdate: () => void updateSkill(entry),\n onRemove: () => void run(() => mutate('remove', { name: entry.name, projectRoot })),\n }))));\n}\nfunction EmptyState(props) {\n return h('div', { style: { display: 'grid', justifyItems: 'center', gap: 8, padding: '36px 16px', borderRadius: 10, border: `1px dashed ${tokens.borderStrong}`, color: tokens.secondary, textAlign: 'center' } }, h(PackageOpen, { size: 26, 'aria-hidden': true }), h('p', { style: { margin: 0, fontSize: 13, lineHeight: 1.5 } }, props.hasAny ? '没有匹配的 skill,试试调整搜索词。' : '还没有导入任何 skill。点击右上角「导入」,从本机目录开始。'));\n}\nfunction ComposerSkillButton(props) {\n const { session, list, mutate } = props;\n const projectRoot = session.cwd;\n const [open, setOpen] = useState(false);\n const containerRef = useRef(null);\n useEffect(() => {\n if (!open)\n return;\n const onPointerDown = (event) => {\n if (containerRef.current && event.target instanceof Node && !containerRef.current.contains(event.target))\n setOpen(false);\n };\n const onKeyDown = (event) => { if (event.key === 'Escape')\n setOpen(false); };\n document.addEventListener('pointerdown', onPointerDown);\n document.addEventListener('keydown', onKeyDown);\n return () => {\n document.removeEventListener('pointerdown', onPointerDown);\n document.removeEventListener('keydown', onKeyDown);\n };\n }, [open]);\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(Wrench, { 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 = (catalog?.entries ?? []).filter(entry => entry.projectEnabled).length;\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 => 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: busy ? 'default' : 'pointer' }, title: entry.description || entry.name }, h(Puzzle, { size: 13, 'aria-hidden': true, style: { color: entry.projectEnabled ? tokens.accent : tokens.secondary } }), h('span', { style: { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' } }, entry.name), h('input', { type: 'checkbox', checked: entry.projectEnabled, disabled: busy, onChange: (event) => void toggle(entry, event.currentTarget.checked), 'aria-label': `${entry.name} 项目开关`, style: checkboxStyle })))), busy ? h('div', { style: { display: 'flex', justifyContent: 'flex-end', paddingTop: 2 } }, h(RefreshCw, { size: 12, 'aria-hidden': true, style: spinnerStyle })) : null);\n}\nfunction SkillRow(props) {\n const { entry, projectLabel, projectAvailable, busy, onGlobalChange, onProjectChange, onUpdate, onRemove } = props;\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(Puzzle, { 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), h(SourceBadge, { entry }), h(StatusBadge, { active: entry.globalEnabled, icon: Globe, label: '全局' }), projectAvailable ? h(StatusBadge, { active: entry.projectEnabled, icon: FolderGit, label: projectLabel }) : 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('input', { type: 'checkbox', checked: entry.globalEnabled, disabled: busy, onChange: (event) => onGlobalChange(event.currentTarget.checked), 'aria-label': `${entry.name} 全局开关`, title: '全局启用', style: checkboxStyle }), projectAvailable ? h('input', { type: 'checkbox', checked: entry.projectEnabled, disabled: busy, onChange: (event) => onProjectChange(event.currentTarget.checked), 'aria-label': `${entry.name} 项目开关`, title: `${projectLabel} 启用`, style: checkboxStyle }) : null, h('button', { type: 'button', style: { ...iconButtonStyle, color: tokens.secondary }, disabled: busy, onClick: onUpdate, title: entry.updateSupported ? (entry.sourceType === 'git' ? '从远程仓库更新' : '从原始目录更新') : '选择来源目录并更新', 'aria-label': `更新 ${entry.name}` }, h(RefreshCw, { size: 15, 'aria-hidden': true })), h('button', { type: 'button', style: { ...iconButtonStyle, color: tokens.danger }, disabled: busy, 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],"mappings":"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"}
1
+ {"version":3,"file":"client.js","names":["__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","AlertCircle","Icon"],"sources":["../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/defaultAttributes.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/context.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/Icon.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/createLucideIcon.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/wrench.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/plus.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/refresh-cw.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/search.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/x.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/trash-2.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/globe.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/folder-git.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/git-branch.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/package-open.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/puzzle.mjs","../node_modules/.pnpm/lucide-react@1.31.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-alert.mjs","types/client/session.js","types/client/index.js"],"sourcesContent":["/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.mjs';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { createContext, useContext, useMemo, createElement } from 'react';\n\nconst LucideContext = createContext({});\nfunction LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n}) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, className]\n );\n return createElement(LucideContext.Provider, { value }, children);\n}\nconst useLucideContext = () => useContext(LucideContext);\n\nexport { LucideProvider, useLucideContext };\n//# sourceMappingURL=context.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.mjs';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.mjs';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { useLucideContext } from './context.mjs';\n\nconst Icon = forwardRef(\n ({ color, size, strokeWidth, absoluteStrokeWidth, className = \"\", children, iconNode, ...rest }, ref) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n color: contextColor = \"currentColor\",\n className: contextClass = \"\"\n } = useLucideContext() ?? {};\n const calculatedStrokeWidth = absoluteStrokeWidth ?? contextAbsoluteStrokeWidth ? Number(strokeWidth ?? contextStrokeWidth) * 24 / Number(size ?? contextSize) : strokeWidth ?? contextStrokeWidth;\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size ?? contextSize ?? defaultAttributes.width,\n height: size ?? contextSize ?? defaultAttributes.height,\n stroke: color ?? contextColor,\n strokeWidth: calculatedStrokeWidth,\n className: mergeClasses(\"lucide\", contextClass, className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.mjs';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.mjs';\nimport Icon from './Icon.mjs';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z\",\n key: \"1ngwbx\"\n }\n ]\n];\nconst Wrench = createLucideIcon(\"wrench\", __iconNode);\n\nexport { __iconNode, Wrench as default };\n//# sourceMappingURL=wrench.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n];\nconst Plus = createLucideIcon(\"plus\", __iconNode);\n\nexport { __iconNode, Plus as default };\n//# sourceMappingURL=plus.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\", key: \"v9h5vc\" }],\n [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }],\n [\"path\", { d: \"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\", key: \"3uifl3\" }],\n [\"path\", { d: \"M8 16H3v5\", key: \"1cv678\" }]\n];\nconst RefreshCw = createLucideIcon(\"refresh-cw\", __iconNode);\n\nexport { __iconNode, RefreshCw as default };\n//# sourceMappingURL=refresh-cw.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash2 = createLucideIcon(\"trash-2\", __iconNode);\n\nexport { __iconNode, Trash2 as default };\n//# sourceMappingURL=trash-2.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\", key: \"13o1zl\" }],\n [\"path\", { d: \"M2 12h20\", key: \"9i4pu4\" }]\n];\nconst Globe = createLucideIcon(\"globe\", __iconNode);\n\nexport { __iconNode, Globe as default };\n//# sourceMappingURL=globe.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"13\", r: \"2\", key: \"1c1ljs\" }],\n [\n \"path\",\n {\n d: \"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\",\n key: \"1kt360\"\n }\n ],\n [\"path\", { d: \"M14 13h3\", key: \"1dgedf\" }],\n [\"path\", { d: \"M7 13h3\", key: \"1pygq7\" }]\n];\nconst FolderGit = createLucideIcon(\"folder-git\", __iconNode);\n\nexport { __iconNode, FolderGit as default };\n//# sourceMappingURL=folder-git.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 6a9 9 0 0 0-9 9V3\", key: \"1cii5b\" }],\n [\"circle\", { cx: \"18\", cy: \"6\", r: \"3\", key: \"1h7g24\" }],\n [\"circle\", { cx: \"6\", cy: \"18\", r: \"3\", key: \"fqmcym\" }]\n];\nconst GitBranch = createLucideIcon(\"git-branch\", __iconNode);\n\nexport { __iconNode, GitBranch as default };\n//# sourceMappingURL=git-branch.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 22v-9\", key: \"x3hkom\" }],\n [\n \"path\",\n {\n d: \"M15.17 2.21a1.67 1.67 0 0 1 1.63 0L21 4.57a1.93 1.93 0 0 1 0 3.36L8.82 14.79a1.655 1.655 0 0 1-1.64 0L3 12.43a1.93 1.93 0 0 1 0-3.36z\",\n key: \"2ntwy6\"\n }\n ],\n [\n \"path\",\n {\n d: \"M20 13v3.87a2.06 2.06 0 0 1-1.11 1.83l-6 3.08a1.93 1.93 0 0 1-1.78 0l-6-3.08A2.06 2.06 0 0 1 4 16.87V13\",\n key: \"1pmm1c\"\n }\n ],\n [\n \"path\",\n {\n d: \"M21 12.43a1.93 1.93 0 0 0 0-3.36L8.83 2.2a1.64 1.64 0 0 0-1.63 0L3 4.57a1.93 1.93 0 0 0 0 3.36l12.18 6.86a1.636 1.636 0 0 0 1.63 0z\",\n key: \"12ttoo\"\n }\n ]\n];\nconst PackageOpen = createLucideIcon(\"package-open\", __iconNode);\n\nexport { __iconNode, PackageOpen as default };\n//# sourceMappingURL=package-open.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z\",\n key: \"w46dr5\"\n }\n ]\n];\nconst Puzzle = createLucideIcon(\"puzzle\", __iconNode);\n\nexport { __iconNode, Puzzle as default };\n//# sourceMappingURL=puzzle.mjs.map\n","/**\n * @license lucide-react v1.31.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.mjs.map\n","export function projectRootForSession(state, sessionId) {\n return state.byId[sessionId]?.cwd;\n}\n","import { createElement as h, useCallback, useEffect, useRef, useState } from 'react';\nimport Wrench from 'lucide-react/dist/esm/icons/wrench.mjs';\nimport Plus from 'lucide-react/dist/esm/icons/plus.mjs';\nimport RefreshCw from 'lucide-react/dist/esm/icons/refresh-cw.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 Puzzle from 'lucide-react/dist/esm/icons/puzzle.mjs';\nimport AlertCircle from 'lucide-react/dist/esm/icons/alert-circle.mjs';\nimport { projectRootForSession } from './session.js';\nexport const inject = ['connection', 'slots', 'workspaces'];\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 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 = request;\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, pickDirectory: () => ctx.workspaces.pickDirectory(), loopback: connection.isLoopback }),\n }, SkillManagerSection));\n ctx.slots.inject('conversation.input.left', () => ctx.slots.register({\n name: 'conversation.input.left',\n id: 'skill-manager',\n order: 10,\n inject: () => ({ list, mutate }),\n }, ComposerSkillButton));\n}\nfunction SkillManagerSection(props) {\n const { list, mutate, pickDirectory, loopback, useWorkspaces } = props;\n const workspaces = useWorkspaces(state => state);\n const [projectRoot, setProjectRoot] = useState(undefined);\n const [catalog, setCatalog] = useState(null);\n const [query, setQuery] = useState('');\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState(null);\n const [repositoryOpen, setRepositoryOpen] = useState(false);\n const [repository, setRepository] = useState('');\n useEffect(() => { ensureKeyframes(); }, []);\n // 追踪用户是否主动选过「只看全局」,避免 useEffect 把它重置回第一个工作区\n const userChoseGlobal = useRef(false);\n useEffect(() => {\n // 仅当用户未主动选择「只看全局」时,才自动选中第一个工作区\n if (projectRoot === undefined && !userChoseGlobal.current && workspaces.items.length > 0)\n setProjectRoot(workspaces.items[0].path);\n // 当前选中的工作区被移除时,回退到第一个工作区\n if (projectRoot !== undefined && !workspaces.items.some(item => item.path === projectRoot))\n setProjectRoot(workspaces.items[0]?.path);\n }, [projectRoot, workspaces.items]);\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 => normalizedQuery.length === 0 || `${entry.name} ${entry.description}`.toLocaleLowerCase().includes(normalizedQuery));\n const importSkill = async () => {\n const path = await pickDirectory();\n if (path)\n await run(() => mutate('install', { path, projectRoot }));\n };\n const importRepository = async (event) => {\n event.preventDefault();\n const source = repository.trim();\n if (!source)\n return;\n if (await run(() => mutate('install-remote', { repository: source, projectRoot }))) {\n setRepository('');\n setRepositoryOpen(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 await run(() => mutate('update', { name: entry.name, path, projectRoot }));\n };\n const selectedWorkspace = workspaces.items.find(item => item.path === projectRoot);\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(Puzzle, { 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 || !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, 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__' }, '只看全局'), ...workspaces.items.map(workspace => h('option', { key: workspace.workspaceId, value: workspace.path }, workspace.title))))), 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.length ?? 0) > 0 })\n : filtered.map(entry => h(SkillRow, {\n key: entry.name,\n entry,\n projectLabel: selectedWorkspace?.title ?? '当前项目',\n projectAvailable: projectRoot !== undefined,\n busy,\n onGlobalChange: enabled => void run(() => mutate('set-enabled', { name: entry.name, scope: 'global', projectRoot, enabled })),\n onProjectChange: enabled => void run(() => mutate('set-enabled', { name: entry.name, scope: 'project', projectRoot, enabled })),\n onUpdate: () => void updateSkill(entry),\n onRemove: () => void run(() => mutate('remove', { name: entry.name, projectRoot })),\n }))));\n}\nfunction EmptyState(props) {\n return h('div', { style: { display: 'grid', justifyItems: 'center', gap: 8, padding: '36px 16px', borderRadius: 10, border: `1px dashed ${tokens.borderStrong}`, color: tokens.secondary, textAlign: 'center' } }, h(PackageOpen, { size: 26, 'aria-hidden': true }), h('p', { style: { margin: 0, fontSize: 13, lineHeight: 1.5 } }, props.hasAny ? '没有匹配的 skill,试试调整搜索词。' : '还没有导入任何 skill。点击右上角「导入」,从本机目录开始。'));\n}\nfunction ComposerSkillButton(props) {\n const { session, useSessions, list, mutate } = props;\n const projectRoot = useSessions(state => projectRootForSession(state, session.sessionId));\n const [open, setOpen] = useState(false);\n const containerRef = useRef(null);\n useEffect(() => {\n if (!open)\n return;\n const onPointerDown = (event) => {\n if (containerRef.current && event.target instanceof Node && !containerRef.current.contains(event.target))\n setOpen(false);\n };\n const onKeyDown = (event) => { if (event.key === 'Escape')\n setOpen(false); };\n document.addEventListener('pointerdown', onPointerDown);\n document.addEventListener('keydown', onKeyDown);\n return () => {\n document.removeEventListener('pointerdown', onPointerDown);\n document.removeEventListener('keydown', onKeyDown);\n };\n }, [open]);\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(Wrench, { 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 = (catalog?.entries ?? []).filter(entry => entry.projectEnabled).length;\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 => 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: busy ? 'default' : 'pointer' }, title: entry.description || entry.name }, h(Puzzle, { size: 13, 'aria-hidden': true, style: { color: entry.projectEnabled ? tokens.accent : tokens.secondary } }), h('span', { style: { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' } }, entry.name), h('input', { type: 'checkbox', checked: entry.projectEnabled, disabled: busy, onChange: (event) => void toggle(entry, event.currentTarget.checked), 'aria-label': `${entry.name} 项目开关`, style: checkboxStyle })))), busy ? h('div', { style: { display: 'flex', justifyContent: 'flex-end', paddingTop: 2 } }, h(RefreshCw, { size: 12, 'aria-hidden': true, style: spinnerStyle })) : null);\n}\nfunction SkillRow(props) {\n const { entry, projectLabel, projectAvailable, busy, onGlobalChange, onProjectChange, onUpdate, onRemove } = props;\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(Puzzle, { 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), h(SourceBadge, { entry }), h(StatusBadge, { active: entry.globalEnabled, icon: Globe, label: '全局' }), projectAvailable ? h(StatusBadge, { active: entry.projectEnabled, icon: FolderGit, label: projectLabel }) : 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('input', { type: 'checkbox', checked: entry.globalEnabled, disabled: busy, onChange: (event) => onGlobalChange(event.currentTarget.checked), 'aria-label': `${entry.name} 全局开关`, title: '全局启用', style: checkboxStyle }), projectAvailable ? h('input', { type: 'checkbox', checked: entry.projectEnabled, disabled: busy, onChange: (event) => onProjectChange(event.currentTarget.checked), 'aria-label': `${entry.name} 项目开关`, title: `${projectLabel} 启用`, style: checkboxStyle }) : null, h('button', { type: 'button', style: { ...iconButtonStyle, color: tokens.secondary }, disabled: busy, onClick: onUpdate, title: entry.updateSupported ? (entry.sourceType === 'git' ? '从远程仓库更新' : '从原始目录更新') : '选择来源目录并更新', 'aria-label': `更新 ${entry.name}` }, h(RefreshCw, { size: 15, 'aria-hidden': true })), h('button', { type: 'button', style: { ...iconButtonStyle, color: tokens.danger }, disabled: busy, 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],"mappings":"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"}
@@ -11,6 +11,7 @@ import GitBranch from 'lucide-react/dist/esm/icons/git-branch.mjs';
11
11
  import PackageOpen from 'lucide-react/dist/esm/icons/package-open.mjs';
12
12
  import Puzzle from 'lucide-react/dist/esm/icons/puzzle.mjs';
13
13
  import AlertCircle from 'lucide-react/dist/esm/icons/alert-circle.mjs';
14
+ import { projectRootForSession } from './session.js';
14
15
  export const inject = ['connection', 'slots', 'workspaces'];
15
16
  const ICON_SPIN = ['dsh-skill-manager-spin', 'to { transform: rotate(360deg); }'];
16
17
  function ensureKeyframes() {
@@ -205,8 +206,8 @@ function EmptyState(props) {
205
206
  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。点击右上角「导入」,从本机目录开始。'));
206
207
  }
207
208
  function ComposerSkillButton(props) {
208
- const { session, list, mutate } = props;
209
- const projectRoot = session.cwd;
209
+ const { session, useSessions, list, mutate } = props;
210
+ const projectRoot = useSessions(state => projectRootForSession(state, session.sessionId));
210
211
  const [open, setOpen] = useState(false);
211
212
  const containerRef = useRef(null);
212
213
  useEffect(() => {
@@ -0,0 +1,2 @@
1
+ import type { SessionId, SessionListState } from '@deepseek-ai/dsh-client-runtime/client';
2
+ export declare function projectRootForSession(state: SessionListState, sessionId: SessionId): string | undefined;
@@ -0,0 +1,3 @@
1
+ export function projectRootForSession(state, sessionId) {
2
+ return state.byId[sessionId]?.cwd;
3
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-skills-manager",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "A DeepSeek Harness plugin for installing and managing skills by global or workspace scope.",
5
5
  "repository": {
6
6
  "type": "git",