openskills-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +99 -0
  3. package/dist/bin/cli.d.ts +10 -0
  4. package/dist/bin/cli.d.ts.map +1 -0
  5. package/dist/bin/cli.js +133 -0
  6. package/dist/bin/cli.js.map +1 -0
  7. package/dist/src/modes/install.d.ts +32 -0
  8. package/dist/src/modes/install.d.ts.map +1 -0
  9. package/dist/src/modes/install.js +215 -0
  10. package/dist/src/modes/install.js.map +1 -0
  11. package/dist/src/modes/mcp-proxy.d.ts +16 -0
  12. package/dist/src/modes/mcp-proxy.d.ts.map +1 -0
  13. package/dist/src/modes/mcp-proxy.js +117 -0
  14. package/dist/src/modes/mcp-proxy.js.map +1 -0
  15. package/dist/src/services/downloader.d.ts +32 -0
  16. package/dist/src/services/downloader.d.ts.map +1 -0
  17. package/dist/src/services/downloader.js +125 -0
  18. package/dist/src/services/downloader.js.map +1 -0
  19. package/dist/src/services/extractor.d.ts +38 -0
  20. package/dist/src/services/extractor.d.ts.map +1 -0
  21. package/dist/src/services/extractor.js +82 -0
  22. package/dist/src/services/extractor.js.map +1 -0
  23. package/dist/src/services/symlink.d.ts +64 -0
  24. package/dist/src/services/symlink.d.ts.map +1 -0
  25. package/dist/src/services/symlink.js +153 -0
  26. package/dist/src/services/symlink.js.map +1 -0
  27. package/dist/src/types/index.d.ts +75 -0
  28. package/dist/src/types/index.d.ts.map +1 -0
  29. package/dist/src/types/index.js +5 -0
  30. package/dist/src/types/index.js.map +1 -0
  31. package/dist/src/utils/agent-dirs.d.ts +49 -0
  32. package/dist/src/utils/agent-dirs.d.ts.map +1 -0
  33. package/dist/src/utils/agent-dirs.js +116 -0
  34. package/dist/src/utils/agent-dirs.js.map +1 -0
  35. package/dist/src/utils/constants.d.ts +16 -0
  36. package/dist/src/utils/constants.d.ts.map +1 -0
  37. package/dist/src/utils/constants.js +21 -0
  38. package/dist/src/utils/constants.js.map +1 -0
  39. package/dist/src/utils/errors.d.ts +72 -0
  40. package/dist/src/utils/errors.d.ts.map +1 -0
  41. package/dist/src/utils/errors.js +108 -0
  42. package/dist/src/utils/errors.js.map +1 -0
  43. package/dist/src/utils/logger.d.ts +41 -0
  44. package/dist/src/utils/logger.d.ts.map +1 -0
  45. package/dist/src/utils/logger.js +85 -0
  46. package/dist/src/utils/logger.js.map +1 -0
  47. package/dist/src/utils/mode-detector.d.ts +74 -0
  48. package/dist/src/utils/mode-detector.d.ts.map +1 -0
  49. package/dist/src/utils/mode-detector.js +156 -0
  50. package/dist/src/utils/mode-detector.js.map +1 -0
  51. package/dist/src/utils/prompts.d.ts +22 -0
  52. package/dist/src/utils/prompts.d.ts.map +1 -0
  53. package/dist/src/utils/prompts.js +69 -0
  54. package/dist/src/utils/prompts.js.map +1 -0
  55. package/package.json +53 -0
@@ -0,0 +1,156 @@
1
+ /**
2
+ * CLI mode detection utility.
3
+ *
4
+ * Determines which mode the CLI should operate in based on command-line arguments.
5
+ */
6
+ /**
7
+ * Detect CLI mode from command-line arguments.
8
+ *
9
+ * Mode priority:
10
+ * 1. Help (-h, --help)
11
+ * 2. Version (-v, --version)
12
+ * 3. MCP proxy (--api-key)
13
+ * 4. Installation (positional skill name or -s/--skill flag)
14
+ * 5. Help (default if no valid flags)
15
+ *
16
+ * @param args - Command-line arguments (process.argv.slice(2))
17
+ * @returns Detected CLI mode
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * detectMode(['pdf-processing', '-a', 'claude-code']) // 'install'
22
+ * detectMode(['-s', 'pdf', '-a', 'claude-code']) // 'install'
23
+ * detectMode(['--api-key', 'osk_abc123']) // 'mcp'
24
+ * detectMode(['-h']) // 'help'
25
+ * detectMode(['-v']) // 'version'
26
+ * detectMode([]) // 'help'
27
+ * ```
28
+ */
29
+ export function detectMode(args) {
30
+ // Priority 1: Help
31
+ if (args.includes('-h') || args.includes('--help')) {
32
+ return 'help';
33
+ }
34
+ // Priority 2: Version
35
+ if (args.includes('-v') || args.includes('--version')) {
36
+ return 'version';
37
+ }
38
+ // Priority 3: MCP proxy mode
39
+ if (args.includes('--api-key')) {
40
+ return 'mcp';
41
+ }
42
+ // Priority 4: Installation mode (positional skill name or -s flag)
43
+ if (args.includes('-s') || args.includes('--skill') || hasPositionalSkill(args)) {
44
+ return 'install';
45
+ }
46
+ // Default: Show help
47
+ return 'help';
48
+ }
49
+ /**
50
+ * Check if args contain a positional skill name.
51
+ * A positional skill is the first non-flag argument.
52
+ *
53
+ * @param args - Command-line arguments
54
+ * @returns True if positional skill exists
55
+ */
56
+ function hasPositionalSkill(args) {
57
+ if (args.length === 0)
58
+ return false;
59
+ // First arg that doesn't start with - and isn't after a flag that takes a value
60
+ for (let i = 0; i < args.length; i++) {
61
+ const arg = args[i];
62
+ // Skip flags
63
+ if (arg.startsWith('-')) {
64
+ // Skip next arg if this flag takes a value
65
+ if (arg === '-a' || arg === '--agent' || arg === '--api-key') {
66
+ i++; // Skip the value
67
+ }
68
+ continue;
69
+ }
70
+ // Found positional argument
71
+ return true;
72
+ }
73
+ return false;
74
+ }
75
+ /**
76
+ * Parse installation options from command-line arguments.
77
+ *
78
+ * Supports both positional and flag-based skill names:
79
+ * - Positional: npx openskills pdf-processing -a claude-code
80
+ * - Flag-based: npx openskills -s pdf-processing -a claude-code
81
+ *
82
+ * @param args - Command-line arguments
83
+ * @returns Parsed installation options or partial options for interactive mode
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * parseInstallOptions(['pdf-processing', '-a', 'claude-code'])
88
+ * // { skill: 'pdf-processing', agent: 'claude-code', global: false, force: false, multiAgent: false }
89
+ *
90
+ * parseInstallOptions(['pdf-processing', '-y'])
91
+ * // { skill: 'pdf-processing', agent: null, global: true, force: false, multiAgent: true }
92
+ *
93
+ * parseInstallOptions(['pdf-processing'])
94
+ * // { skill: 'pdf-processing', agent: null, global: false, force: false, multiAgent: false }
95
+ * ```
96
+ */
97
+ export function parseInstallOptions(args) {
98
+ // Find skill name (positional or flag-based)
99
+ let skill = null;
100
+ // Check for -s/--skill flag first
101
+ const skillIdx = args.findIndex(arg => arg === '-s' || arg === '--skill');
102
+ if (skillIdx !== -1 && args[skillIdx + 1]) {
103
+ skill = args[skillIdx + 1];
104
+ }
105
+ else {
106
+ // Look for positional skill name (first non-flag argument)
107
+ for (let i = 0; i < args.length; i++) {
108
+ const arg = args[i];
109
+ // Skip flags
110
+ if (arg.startsWith('-')) {
111
+ // Skip next arg if this flag takes a value
112
+ if (arg === '-a' || arg === '--agent' || arg === '-s' || arg === '--skill') {
113
+ i++; // Skip the value
114
+ }
115
+ continue;
116
+ }
117
+ // Found positional skill name
118
+ skill = arg;
119
+ break;
120
+ }
121
+ }
122
+ // Find -a/--agent flag
123
+ const agentIdx = args.findIndex(arg => arg === '-a' || arg === '--agent');
124
+ const agent = agentIdx !== -1 && args[agentIdx + 1] ? args[agentIdx + 1] : null;
125
+ // Check for -g/--global or -p/--project flag
126
+ const hasGlobal = args.includes('-g') || args.includes('--global');
127
+ const hasProject = args.includes('-p') || args.includes('--project');
128
+ const hasMultiAgent = args.includes('-y');
129
+ // Track if scope was explicitly set by user
130
+ const scopeExplicit = hasGlobal || hasProject || hasMultiAgent;
131
+ // If both flags provided, -g takes precedence
132
+ // If -y flag provided without -p, default to global
133
+ const global = hasGlobal || (hasMultiAgent && !hasProject);
134
+ // Check for --force flag
135
+ const force = args.includes('--force');
136
+ // Check for -y flag (multi-agent installation)
137
+ const multiAgent = hasMultiAgent;
138
+ return { skill, agent, global, force, multiAgent, scopeExplicit };
139
+ }
140
+ /**
141
+ * Parse API key from command-line arguments.
142
+ *
143
+ * @param args - Command-line arguments
144
+ * @returns API key or null if not found
145
+ *
146
+ * @example
147
+ * ```typescript
148
+ * parseApiKey(['--api-key', 'osk_abc123']) // 'osk_abc123'
149
+ * parseApiKey(['-s', 'pdf']) // null
150
+ * ```
151
+ */
152
+ export function parseApiKey(args) {
153
+ const keyIdx = args.indexOf('--api-key');
154
+ return keyIdx !== -1 && args[keyIdx + 1] ? args[keyIdx + 1] : null;
155
+ }
156
+ //# sourceMappingURL=mode-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-detector.js","sourceRoot":"","sources":["../../../src/utils/mode-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Interactive CLI prompts for missing installation options.
3
+ */
4
+ /**
5
+ * Prompt user to select an agent.
6
+ *
7
+ * @returns Selected agent name
8
+ */
9
+ export declare function promptAgent(): Promise<string>;
10
+ /**
11
+ * Prompt user to select installation scope (global vs project).
12
+ *
13
+ * @returns True if global, false if project
14
+ */
15
+ export declare function promptScope(): Promise<boolean>;
16
+ /**
17
+ * Show multi-agent installation info.
18
+ *
19
+ * @param skillName - Skill being installed
20
+ */
21
+ export declare function showMultiAgentInfo(skillName: string): void;
22
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/utils/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;;;GAIG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAkBnD;AAED;;;;GAIG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CA0BpD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAK1D"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Interactive CLI prompts for missing installation options.
3
+ */
4
+ import prompts from 'prompts';
5
+ import { SUPPORTED_AGENTS, DEFAULT_AGENTS } from './constants.js';
6
+ /**
7
+ * Prompt user to select an agent.
8
+ *
9
+ * @returns Selected agent name
10
+ */
11
+ export async function promptAgent() {
12
+ const response = await prompts({
13
+ type: 'select',
14
+ name: 'agent',
15
+ message: 'Select an agent:',
16
+ choices: SUPPORTED_AGENTS.map(agent => ({
17
+ title: agent,
18
+ value: agent,
19
+ })),
20
+ initial: 0,
21
+ });
22
+ if (!response.agent) {
23
+ console.error('\n✗ Installation cancelled');
24
+ process.exit(1);
25
+ }
26
+ return response.agent;
27
+ }
28
+ /**
29
+ * Prompt user to select installation scope (global vs project).
30
+ *
31
+ * @returns True if global, false if project
32
+ */
33
+ export async function promptScope() {
34
+ const response = await prompts({
35
+ type: 'select',
36
+ name: 'scope',
37
+ message: 'Installation scope:',
38
+ choices: [
39
+ {
40
+ title: 'Global (~/.agents/skills/)',
41
+ description: 'Available to all projects',
42
+ value: 'global',
43
+ },
44
+ {
45
+ title: 'Project (./agents/skills/)',
46
+ description: 'Only for current project',
47
+ value: 'project',
48
+ },
49
+ ],
50
+ initial: 0,
51
+ });
52
+ if (!response.scope) {
53
+ console.error('\n✗ Installation cancelled');
54
+ process.exit(1);
55
+ }
56
+ return response.scope === 'global';
57
+ }
58
+ /**
59
+ * Show multi-agent installation info.
60
+ *
61
+ * @param skillName - Skill being installed
62
+ */
63
+ export function showMultiAgentInfo(skillName) {
64
+ console.log(`\n📦 Installing ${skillName} for multiple agents:`);
65
+ console.log(` Agents: ${DEFAULT_AGENTS.join(', ')}`);
66
+ console.log(` Scope: Global (~/.agents/skills/)`);
67
+ console.log('');
68
+ }
69
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/utils/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAElE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;QAC7B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,kBAAkB;QAC3B,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtC,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;KACX,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,QAAQ,CAAC,KAAK,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;QAC7B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,qBAAqB;QAC9B,OAAO,EAAE;YACP;gBACE,KAAK,EAAE,4BAA4B;gBACnC,WAAW,EAAE,2BAA2B;gBACxC,KAAK,EAAE,QAAQ;aAChB;YACD;gBACE,KAAK,EAAE,4BAA4B;gBACnC,WAAW,EAAE,0BAA0B;gBACvC,KAAK,EAAE,SAAS;aACjB;SACF;QACD,OAAO,EAAE,CAAC;KACX,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,uBAAuB,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,cAAc,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "openskills-cli",
3
+ "version": "0.1.0",
4
+ "description": "Install AI agent skills locally or discover via MCP protocol",
5
+ "type": "module",
6
+ "bin": {
7
+ "openskills": "dist/bin/cli.js"
8
+ },
9
+ "files": [
10
+ "dist/",
11
+ "README.md",
12
+ "LICENSE"
13
+ ],
14
+ "engines": {
15
+ "node": ">=18.0.0"
16
+ },
17
+ "scripts": {
18
+ "build": "tsc",
19
+ "prepublishOnly": "npm run build",
20
+ "test": "echo \"Error: no test specified\" && exit 1"
21
+ },
22
+ "dependencies": {
23
+ "@modelcontextprotocol/sdk": "^1.12.0",
24
+ "extract-zip": "^2.0.1",
25
+ "node-fetch": "^3.3.2",
26
+ "prompts": "^2.4.2"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^20.11.0",
30
+ "@types/prompts": "^2.4.9",
31
+ "@typescript-eslint/eslint-plugin": "^6.19.0",
32
+ "@typescript-eslint/parser": "^6.19.0",
33
+ "eslint": "^8.56.0",
34
+ "prettier": "^3.2.4",
35
+ "typescript": "^5.3.3"
36
+ },
37
+ "keywords": [
38
+ "mcp",
39
+ "ai",
40
+ "skills",
41
+ "claude",
42
+ "cursor",
43
+ "agent",
44
+ "model-context-protocol",
45
+ "skill-installation",
46
+ "cli"
47
+ ],
48
+ "license": "MIT",
49
+ "repository": {
50
+ "type": "git",
51
+ "url": "git+https://github.com/nadeemsangrasi/openskills-mcp.git"
52
+ }
53
+ }