@nano-step/skill-manager 5.5.0 → 5.5.1

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/dist/index.js CHANGED
@@ -66,14 +66,11 @@ async function run() {
66
66
  const paths = await (0, utils_1.detectOpenCodePaths)();
67
67
  await (0, state_1.migrateV4State)(paths.configDir, paths.stateFilePath, paths.skillsDir);
68
68
  const token = await (0, auth_1.resolveToken)();
69
- const remoteSkills = token ? await (0, remote_registry_1.listRemoteSkills)() : [];
69
+ const remoteSkills = token ? await (0, remote_registry_1.listRemoteSkills)() : (0, registry_1.loadPrivateCatalog)(paths.packageSkillsDir);
70
70
  const catalog = await (0, registry_1.loadMergedCatalog)(paths.packageSkillsDir, remoteSkills);
71
71
  const state = await (0, state_1.loadState)(paths.stateFilePath);
72
72
  if (catalog.length === 0) {
73
73
  console.log(chalk_1.default.yellow("No skills found in catalog."));
74
- if (!token) {
75
- console.log(chalk_1.default.gray("Run 'skill-manager login' to access private skills."));
76
- }
77
74
  return;
78
75
  }
79
76
  console.log(chalk_1.default.bold("\nAvailable Skills:\n"));
@@ -91,7 +88,16 @@ async function run() {
91
88
  for (const entry of catalog) {
92
89
  const skill = entry.manifest;
93
90
  const installed = state.skills[skill.name];
94
- const status = installed ? chalk_1.default.green("installed") : chalk_1.default.gray("not installed");
91
+ let status;
92
+ if (installed) {
93
+ status = chalk_1.default.green("installed");
94
+ }
95
+ else if (entry.source === "private" && !token) {
96
+ status = chalk_1.default.yellow("login required");
97
+ }
98
+ else {
99
+ status = chalk_1.default.gray("not installed");
100
+ }
95
101
  const sourceLabel = entry.source === "private" ? chalk_1.default.magenta("private") : chalk_1.default.blue("public");
96
102
  console.log(" " +
97
103
  chalk_1.default.cyan(skill.name.padEnd(nameWidth)) +
@@ -102,7 +108,7 @@ async function run() {
102
108
  }
103
109
  console.log("");
104
110
  if (!token) {
105
- console.log(chalk_1.default.gray("Tip: Run 'skill-manager login' to access private skills."));
111
+ console.log(chalk_1.default.gray("Tip: Run 'skill-manager login --token <github-token>' to install private skills."));
106
112
  console.log("");
107
113
  }
108
114
  });
@@ -1,4 +1,5 @@
1
1
  import { SkillManifest, CatalogEntry } from "./utils";
2
2
  export declare function loadCatalog(packageSkillsDir: string): Promise<SkillManifest[]>;
3
3
  export declare function getSkillManifest(packageSkillsDir: string, name: string): Promise<SkillManifest | null>;
4
+ export declare function loadPrivateCatalog(packageSkillsDir: string): SkillManifest[];
4
5
  export declare function loadMergedCatalog(packageSkillsDir: string, remoteSkills: SkillManifest[]): Promise<CatalogEntry[]>;
package/dist/registry.js CHANGED
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.loadCatalog = loadCatalog;
7
7
  exports.getSkillManifest = getSkillManifest;
8
+ exports.loadPrivateCatalog = loadPrivateCatalog;
8
9
  exports.loadMergedCatalog = loadMergedCatalog;
9
10
  const path_1 = __importDefault(require("path"));
10
11
  const fs_extra_1 = __importDefault(require("fs-extra"));
@@ -62,6 +63,19 @@ async function getSkillManifest(packageSkillsDir, name) {
62
63
  return null;
63
64
  }
64
65
  }
66
+ function loadPrivateCatalog(packageSkillsDir) {
67
+ const catalogPath = path_1.default.join(packageSkillsDir, "..", "private-catalog.json");
68
+ try {
69
+ const raw = fs_extra_1.default.readFileSync(catalogPath, "utf8");
70
+ const data = JSON.parse(raw);
71
+ if (!Array.isArray(data))
72
+ return [];
73
+ return data.filter(isValidManifest);
74
+ }
75
+ catch {
76
+ return [];
77
+ }
78
+ }
65
79
  async function loadMergedCatalog(packageSkillsDir, remoteSkills) {
66
80
  const localCatalog = await loadCatalog(packageSkillsDir);
67
81
  const localNames = new Set(localCatalog.map((s) => s.name));
package/dist/utils.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export declare const MANAGER_VERSION = "5.5.0";
1
+ export declare const MANAGER_VERSION = "5.5.1";
2
2
  export interface SkillManifest {
3
3
  name: string;
4
4
  version: string;
package/dist/utils.js CHANGED
@@ -13,7 +13,7 @@ exports.writeText = writeText;
13
13
  const path_1 = __importDefault(require("path"));
14
14
  const os_1 = __importDefault(require("os"));
15
15
  const fs_extra_1 = __importDefault(require("fs-extra"));
16
- exports.MANAGER_VERSION = "5.5.0";
16
+ exports.MANAGER_VERSION = "5.5.1";
17
17
  async function detectOpenCodePaths() {
18
18
  const homeConfig = path_1.default.join(os_1.default.homedir(), ".config", "opencode");
19
19
  const cwd = process.cwd();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nano-step/skill-manager",
3
- "version": "5.5.0",
3
+ "version": "5.5.1",
4
4
  "description": "CLI tool that installs and manages AI agent skills, MCP tool routing, and workflow configurations.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -10,7 +10,8 @@
10
10
  "files": [
11
11
  "bin",
12
12
  "dist",
13
- "skills"
13
+ "skills",
14
+ "private-catalog.json"
14
15
  ],
15
16
  "scripts": {
16
17
  "build": "tsc",
@@ -0,0 +1,32 @@
1
+ [
2
+ {
3
+ "name": "database-inspector",
4
+ "version": "1.0.0",
5
+ "description": "Database schema inspection for MySQL and PostgreSQL — progressive discovery workflow with read-only SQL execution"
6
+ },
7
+ {
8
+ "name": "e2e-test-generator",
9
+ "version": "1.0.0",
10
+ "description": "AI-driven E2E test generation from PRD requirements using Playwright MCP"
11
+ },
12
+ {
13
+ "name": "feature-analysis",
14
+ "version": "2.0.0",
15
+ "description": "Deep code analysis of any feature or service before writing docs, diagrams, or making changes"
16
+ },
17
+ {
18
+ "name": "mcp-management",
19
+ "version": "2.0.0",
20
+ "description": "MCP tool routing and execution with token-saving isolation"
21
+ },
22
+ {
23
+ "name": "pr-code-reviewer",
24
+ "version": "2.6.0",
25
+ "description": "Comprehensive code review with 4 parallel subagents and GitHub Copilot-style PR summaries"
26
+ },
27
+ {
28
+ "name": "rri-t-testing",
29
+ "version": "1.0.0",
30
+ "description": "RRI-T QA methodology — 5-phase testing with 7 dimensions, 5 personas, and release gates"
31
+ }
32
+ ]