@dyml/skill-manager 1.0.4 → 1.0.5

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.
@@ -26788,7 +26788,7 @@ function StatusBar({ selectedSkill, width }) {
26788
26788
  // src/ui/components/ActionBar.tsx
26789
26789
  var import_react25 = __toESM(require_react(), 1);
26790
26790
  function ActionBar({ canUninstall, canUpdate }) {
26791
- return /* @__PURE__ */ import_react25.default.createElement(Box_default, { paddingX: 1, gap: 2 }, /* @__PURE__ */ import_react25.default.createElement(Text, null, /* @__PURE__ */ import_react25.default.createElement(Text, { bold: true, color: "cyan" }, "[i]"), /* @__PURE__ */ import_react25.default.createElement(Text, { dimColor: true }, " \u5B89\u88C5")), canUninstall && /* @__PURE__ */ import_react25.default.createElement(Text, null, /* @__PURE__ */ import_react25.default.createElement(Text, { bold: true, color: "red" }, "[d]"), /* @__PURE__ */ import_react25.default.createElement(Text, { dimColor: true }, " \u5378\u8F7D")), canUpdate && /* @__PURE__ */ import_react25.default.createElement(Text, null, /* @__PURE__ */ import_react25.default.createElement(Text, { bold: true, color: "cyan" }, "[p]"), /* @__PURE__ */ import_react25.default.createElement(Text, { dimColor: true }, " \u66F4\u65B0")), /* @__PURE__ */ import_react25.default.createElement(Text, null, /* @__PURE__ */ import_react25.default.createElement(Text, { bold: true, color: "cyan" }, "[v]"), /* @__PURE__ */ import_react25.default.createElement(Text, { dimColor: true }, " \u8BE6\u60C5")), /* @__PURE__ */ import_react25.default.createElement(Text, null, /* @__PURE__ */ import_react25.default.createElement(Text, { bold: true, color: "cyan" }, "[s]"), /* @__PURE__ */ import_react25.default.createElement(Text, { dimColor: true }, " \u641C\u7D22")), /* @__PURE__ */ import_react25.default.createElement(Text, null, /* @__PURE__ */ import_react25.default.createElement(Text, { bold: true, color: "cyan" }, "[r]"), /* @__PURE__ */ import_react25.default.createElement(Text, { dimColor: true }, " \u5237\u65B0")), /* @__PURE__ */ import_react25.default.createElement(Text, null, /* @__PURE__ */ import_react25.default.createElement(Text, { bold: true, color: "cyan" }, "[q]"), /* @__PURE__ */ import_react25.default.createElement(Text, { dimColor: true }, " \u9000\u51FA")));
26791
+ return /* @__PURE__ */ import_react25.default.createElement(Box_default, { paddingX: 1, gap: 2 }, /* @__PURE__ */ import_react25.default.createElement(Text, null, /* @__PURE__ */ import_react25.default.createElement(Text, { bold: true, color: "cyan" }, "[i]"), /* @__PURE__ */ import_react25.default.createElement(Text, { dimColor: true }, " \u5B89\u88C5")), canUninstall && /* @__PURE__ */ import_react25.default.createElement(Text, null, /* @__PURE__ */ import_react25.default.createElement(Text, { bold: true, color: "red" }, "[d]"), /* @__PURE__ */ import_react25.default.createElement(Text, { dimColor: true }, " \u5378\u8F7D")), canUpdate && /* @__PURE__ */ import_react25.default.createElement(Text, null, /* @__PURE__ */ import_react25.default.createElement(Text, { bold: true, color: "green" }, "[p]"), /* @__PURE__ */ import_react25.default.createElement(Text, { dimColor: true }, " \u66F4\u65B0\u9009\u4E2D")), /* @__PURE__ */ import_react25.default.createElement(Text, null, /* @__PURE__ */ import_react25.default.createElement(Text, { bold: true, color: "cyan" }, "[v]"), /* @__PURE__ */ import_react25.default.createElement(Text, { dimColor: true }, " \u8BE6\u60C5")), /* @__PURE__ */ import_react25.default.createElement(Text, null, /* @__PURE__ */ import_react25.default.createElement(Text, { bold: true, color: "cyan" }, "[s]"), /* @__PURE__ */ import_react25.default.createElement(Text, { dimColor: true }, " \u641C\u7D22")), /* @__PURE__ */ import_react25.default.createElement(Text, null, /* @__PURE__ */ import_react25.default.createElement(Text, { bold: true, color: "cyan" }, "[r]"), /* @__PURE__ */ import_react25.default.createElement(Text, { dimColor: true }, " \u5237\u65B0")), /* @__PURE__ */ import_react25.default.createElement(Text, null, /* @__PURE__ */ import_react25.default.createElement(Text, { bold: true, color: "cyan" }, "[q]"), /* @__PURE__ */ import_react25.default.createElement(Text, { dimColor: true }, " \u9000\u51FA")));
26792
26792
  }
26793
26793
 
26794
26794
  // src/ui/components/TabBar.tsx
@@ -26982,45 +26982,34 @@ function execSafe2(command, args, cwd2, timeout) {
26982
26982
  if (code === 0) {
26983
26983
  resolve({ stdout, stderr });
26984
26984
  } else {
26985
- reject(new Error(`\u547D\u4EE4\u6267\u884C\u5931\u8D25 (\u4EE3\u7801 ${code}): ${stderr || stdout}`));
26985
+ reject(new Error(`Command failed (code ${code}): ${stderr || stdout}`));
26986
26986
  }
26987
26987
  });
26988
26988
  });
26989
26989
  }
26990
- function validatePath(projectRoot) {
26991
- const resolved = path4.resolve(projectRoot);
26992
- if (!path4.isAbsolute(resolved)) {
26993
- return { valid: false, error: "\u9879\u76EE\u8DEF\u5F84\u5FC5\u987B\u662F\u7EDD\u5BF9\u8DEF\u5F84" };
26994
- }
26995
- if (resolved.includes("..")) {
26996
- return { valid: false, error: "\u65E0\u6548\u7684\u8DEF\u5F84" };
26997
- }
26998
- return { valid: true };
26999
- }
27000
- async function updateAllSkills(projectRoot = process.cwd()) {
27001
- const validation = validatePath(projectRoot);
27002
- if (!validation.valid) {
26990
+ async function updateSkill(skill) {
26991
+ if (skill.location === "system") {
27003
26992
  return {
27004
26993
  success: false,
27005
- message: `\u65E0\u6548\u7684\u9879\u76EE\u8DEF\u5F84: ${validation.error}`
26994
+ message: "\u7CFB\u7EDF\u7EA7\u6280\u80FD\u65E0\u6CD5\u76F4\u63A5\u66F4\u65B0\uFF0C\u8BF7\u4F7F\u7528 add-skill \u5DE5\u5177\u66F4\u65B0"
27006
26995
  };
27007
26996
  }
27008
26997
  try {
27009
- logger.info("\u6B63\u5728\u66F4\u65B0\u6240\u6709\u6280\u80FD...");
27010
- const { stdout, stderr } = await execSafe2("npx", ["skills", "update"], projectRoot, 12e4);
26998
+ logger.info(`Updating skill: ${skill.name}...`);
26999
+ const { stdout, stderr } = await execSafe2("npx", ["add-skill", skill.name], process.cwd(), 12e4);
27011
27000
  if (stderr && !stderr.includes("npm warn")) {
27012
- logger.warn("\u66F4\u65B0\u8F93\u51FA:", stderr);
27001
+ logger.warn("Update output:", stderr);
27013
27002
  }
27014
27003
  return {
27015
27004
  success: true,
27016
- message: stdout.trim() || "\u6280\u80FD\u66F4\u65B0\u6210\u529F"
27005
+ message: stdout.trim() || `Skill ${skill.name} updated successfully`
27017
27006
  };
27018
27007
  } catch (error) {
27019
27008
  const message = error instanceof Error ? error.message : String(error);
27020
- logger.error("\u66F4\u65B0\u5931\u8D25:", message);
27009
+ logger.error("Update failed:", message);
27021
27010
  return {
27022
27011
  success: false,
27023
- message: `\u66F4\u65B0\u6280\u80FD\u5931\u8D25: ${message}`
27012
+ message: `Failed to update skill ${skill.name}: ${message}`
27024
27013
  };
27025
27014
  }
27026
27015
  }
@@ -27186,17 +27175,25 @@ function MainScreen() {
27186
27175
  } else {
27187
27176
  setScreen("confirm-uninstall");
27188
27177
  }
27189
- } else if (input === "p") {
27190
- setMessage({ text: "\u6B63\u5728\u68C0\u67E5\u66F4\u65B0...", type: "info" });
27191
- setScreen("message");
27192
- const result = await updateAllSkills();
27193
- setMessage({
27194
- text: result.message,
27195
- type: result.success ? "success" : "error"
27196
- });
27197
- setScreen("message");
27198
- if (result.success) {
27199
- await refresh();
27178
+ } else if (input === "p" && selectedSkill) {
27179
+ if (selectedSkill.location === "system") {
27180
+ setMessage({
27181
+ text: "\u7CFB\u7EDF\u7EA7\u6280\u80FD\u65E0\u6CD5\u76F4\u63A5\u66F4\u65B0",
27182
+ type: "error"
27183
+ });
27184
+ setScreen("message");
27185
+ } else {
27186
+ setMessage({ text: `\u6B63\u5728\u66F4\u65B0 ${selectedSkill.name}...`, type: "info" });
27187
+ setScreen("message");
27188
+ const result = await updateSkill(selectedSkill);
27189
+ setMessage({
27190
+ text: result.message,
27191
+ type: result.success ? "success" : "error"
27192
+ });
27193
+ setScreen("message");
27194
+ if (result.success) {
27195
+ await refresh();
27196
+ }
27200
27197
  }
27201
27198
  } else if (input === "v" && selectedSkill) {
27202
27199
  setScreen("detail");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dyml/skill-manager",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "TUI-based skill manager for Claude Code",
5
5
  "type": "module",
6
6
  "main": "dist/skill-manager.mjs",