agent-skills-cli 1.0.6 → 1.0.8

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/README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # Agent Skills CLI 🚀
2
2
 
3
- > **One CLI. 67,000+ skills. All AI agents.**
3
+ > **One CLI. 100,000+ skills. 42 AI agents.**
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/agent-skills-cli)](https://www.npmjs.com/package/agent-skills-cli)
6
6
  [![license](https://img.shields.io/npm/l/agent-skills-cli)](LICENSE)
7
7
 
8
- Install skills from the world's largest marketplace and sync them to **Cursor**, **Claude Code**, **GitHub Copilot**, **OpenAI Codex**, **Antigravity**, **OpenCode**, **Amp**, **Kilo Code**, **Roo Code**, and **Goose** — all with a single command.
8
+ Install skills from the world's largest marketplace and sync them to **42 AI agents** including Cursor, Claude Code, GitHub Copilot, Windsurf, Cline, Gemini CLI, Zed, and more — all with a single command.
9
9
 
10
10
  🌐 **Website:** [agentskills.in](https://agentskills.in)
11
11
 
@@ -18,14 +18,14 @@ skills install @anthropic/xlsx
18
18
 
19
19
  ## ✨ Features
20
20
 
21
- - **67,000+ Skills** — Access the largest collection of AI agent skills
22
- - **Interactive Search** — Search and install in one command: `skills search python`
23
- - **10 AI Agents** — Cursor, Claude, Copilot, Codex, Antigravity, OpenCode, Amp, Kilo, Roo, Goose
24
- - **Global Install** — Install globally with `-g` or to project with default
25
- - **Git URL Support** — Install from any Git repo with `skills add owner/repo`
21
+ - **100,000+ Skills** — Access the largest collection of AI agent skills
22
+ - **FZF Interactive Search** — Real-time search with keyboard navigation: `skills search -i`
23
+ - **42 AI Agents** — Cursor, Claude, Copilot, Windsurf, Cline, Gemini CLI, Zed, and 35+ more
24
+ - **Lock File Tracking** — Track all installations in `~/.skills/skills.lock`
25
+ - **Git URL Support** — Install from GitHub, GitLab, or repos: `skills add owner/repo@skill`
26
26
  - **Platform Targeting** — Install to specific platforms with `-t claude,cursor`
27
- - **Auto-Detection** — Automatically detects installed AI agents
28
- - **Modern UI** — Beautiful prompts with @clack/prompts
27
+ - **Update & Remove** — Full lifecycle: `skills update`, `skills check`, `skills remove`
28
+ - **Privacy-First Telemetry** — Anonymous usage tracking with opt-out
29
29
 
30
30
  ---
31
31
 
@@ -57,9 +57,21 @@ skills install docx --all
57
57
  # Install from Git repo
58
58
  skills add vercel-labs/agent-skills
59
59
 
60
+ # Install specific skill from repo (new @skill syntax)
61
+ skills add anthropic/skills@xlsx
62
+
60
63
  # List skills in a repo
61
64
  skills add owner/repo --list
62
65
 
66
+ # Remove installed skills
67
+ skills remove xlsx
68
+
69
+ # Check installed skills
70
+ skills check
71
+
72
+ # Update skills from source
73
+ skills update --all
74
+
63
75
  # Search and install skills interactively
64
76
  skills search python
65
77
 
@@ -77,9 +89,11 @@ skills search react --json
77
89
  |---------|-------------|
78
90
  | `skills install <name>` | Install a skill from marketplace |
79
91
  | `skills add <source>` | Install from Git repo (owner/repo or URL) |
80
- | `skills list` | List installed skills |
81
- | `skills search <query>` | Search and install (with `-i`) |
82
- | `skills show <name>` | Show skill details |
92
+ | `skills search <query>` | Search and install skills interactively |
93
+ | `skills search -i` | FZF-style interactive search with keyboard navigation |
94
+ | `skills check` | Check installed skills with source and version info |
95
+ | `skills update` | Update skills from their source repos |
96
+ | `skills remove` | Remove installed skills (interactive multi-select) |
83
97
  | `skills doctor` | Diagnose issues |
84
98
 
85
99
  ### Install Options
@@ -97,6 +111,7 @@ skills install <name> --list # Show details without installing
97
111
 
98
112
  ```bash
99
113
  skills add owner/repo # GitHub shorthand
114
+ skills add owner/repo@skill-name # NEW: Install specific skill directly
100
115
  skills add https://github.com/user/repo # Full URL
101
116
  skills add https://gitlab.com/org/repo # GitLab
102
117
  skills add owner/repo --list # List skills in repo
@@ -116,20 +131,37 @@ skills info # Show installation status
116
131
 
117
132
  ---
118
133
 
119
- ## 🤖 Supported Platforms (10 Agents)
120
-
121
- | Platform | Project Dir | Global Dir | Flag |
122
- |----------|-------------|------------|------|
123
- | **Cursor** | `.cursor/skills/` | `~/.cursor/skills/` | `-t cursor` |
124
- | **Claude Code** | `.claude/skills/` | `~/.claude/skills/` | `-t claude` |
125
- | **GitHub Copilot** | `.github/skills/` | `~/.github/skills/` | `-t copilot` |
126
- | **OpenAI Codex** | `.codex/skills/` | `~/.codex/skills/` | `-t codex` |
127
- | **Antigravity** | `.agent/skills/` | `~/.gemini/antigravity/skills/` | `-t antigravity` |
128
- | **OpenCode** | `.opencode/skill/` | `~/.config/opencode/skill/` | `-t opencode` |
129
- | **Amp** | `.agents/skills/` | `~/.config/agents/skills/` | `-t amp` |
130
- | **Kilo Code** | `.kilocode/skills/` | `~/.kilocode/skills/` | `-t kilo` |
131
- | **Roo Code** | `.roo/skills/` | `~/.roo/skills/` | `-t roo` |
132
- | **Goose** | `.goose/skills/` | `~/.config/goose/skills/` | `-t goose` |
134
+ ## 🤖 Supported Platforms (42 Agents)
135
+
136
+ | Platform | Project Dir | Global Dir |
137
+ |----------|-------------|------------|
138
+ | **Cursor** | `.cursor/skills/` | `~/.cursor/skills/` |
139
+ | **Claude Code** | `.claude/skills/` | `~/.claude/skills/` |
140
+ | **GitHub Copilot** | `.github/skills/` | `~/.github/skills/` |
141
+ | **OpenAI Codex** | `.codex/skills/` | `~/.codex/skills/` |
142
+ | **Windsurf** | `.windsurf/skills/` | `~/.codeium/windsurf/skills/` |
143
+ | **Cline** | `.cline/skills/` | `~/.cline/skills/` |
144
+ | **Gemini CLI** | `.gemini/skills/` | `~/.gemini/skills/` |
145
+ | **Zed** | `.zed/skills/` | `~/.config/zed/skills/` |
146
+ | **Antigravity** | `.agent/skills/` | `~/.gemini/antigravity/skills/` |
147
+ | **OpenCode** | `.opencode/skill/` | `~/.config/opencode/skill/` |
148
+
149
+ **+32 more agents:** Amp, Kilo, Roo, Goose, CodeBuddy, Continue, Crush, Clawdbot, Droid, Kiro, MCPJam, Mux, OpenHands, Pi, Qoder, Qwen Code, Trae, Zencoder, Neovate, Command Code, Ara, Aide, Alex, BB, CodeStory, Helix AI, Meekia, Pear AI, Adal, Pochi, Sourcegraph Cody, Void AI
150
+
151
+ ---
152
+
153
+ ## 🔒 Privacy & Telemetry
154
+
155
+ The CLI collects anonymous usage data to improve the product. **No personal data is collected.**
156
+
157
+ ```bash
158
+ # Opt out of telemetry
159
+ export DISABLE_TELEMETRY=1
160
+ # or
161
+ export DO_NOT_TRACK=1
162
+ ```
163
+
164
+ Telemetry is automatically disabled in CI environments.
133
165
 
134
166
  ---
135
167
 
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Remove Command
3
+ * Interactively remove installed skills
4
+ */
5
+ /**
6
+ * Agent configuration (imported from main CLI)
7
+ */
8
+ interface AgentConfig {
9
+ name: string;
10
+ displayName: string;
11
+ projectDir: string;
12
+ globalDir: string;
13
+ }
14
+ /**
15
+ * Remove command options
16
+ */
17
+ export interface RemoveOptions {
18
+ /** Remove from global installation */
19
+ global?: boolean;
20
+ /** Target specific agent only */
21
+ agent?: string;
22
+ /** Skip confirmation prompt */
23
+ yes?: boolean;
24
+ /** Remove all installed skills */
25
+ all?: boolean;
26
+ }
27
+ /**
28
+ * Remove installed skills
29
+ *
30
+ * @param skillNames - Optional list of skill names to remove
31
+ * @param options - Remove options
32
+ * @param agentConfigs - Agent configurations
33
+ */
34
+ export declare function removeCommand(skillNames: string[] | undefined, options: RemoveOptions | undefined, agentConfigs: Record<string, AgentConfig>): Promise<void>;
35
+ /**
36
+ * Register the remove command with commander
37
+ */
38
+ export declare function registerRemoveCommand(program: any, agentConfigs: Record<string, AgentConfig>): void;
39
+ export {};
40
+ //# sourceMappingURL=remove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/remove.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH;;GAEG;AACH,UAAU,WAAW;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,sCAAsC;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,kCAAkC;IAClC,GAAG,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAC/B,UAAU,EAAE,MAAM,EAAE,YAAK,EACzB,OAAO,EAAE,aAAa,YAAK,EAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAC1C,OAAO,CAAC,IAAI,CAAC,CAqJf;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACjC,OAAO,EAAE,GAAG,EACZ,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAC1C,IAAI,CAkBN"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Remove Command
3
+ * Interactively remove installed skills
4
+ */
5
+ import * as p from '@clack/prompts';
6
+ import chalk from 'chalk';
7
+ import { rm } from 'fs/promises';
8
+ import { existsSync } from 'fs';
9
+ import { join } from 'path';
10
+ import { homedir } from 'os';
11
+ import { removeSkillFromLock, listInstalledSkills } from '../../core/skill-lock.js';
12
+ /**
13
+ * Remove installed skills
14
+ *
15
+ * @param skillNames - Optional list of skill names to remove
16
+ * @param options - Remove options
17
+ * @param agentConfigs - Agent configurations
18
+ */
19
+ export async function removeCommand(skillNames = [], options = {}, agentConfigs) {
20
+ const spinner = p.spinner();
21
+ // 1. Get installed skills from lock file
22
+ spinner.start('Scanning installed skills...');
23
+ const installed = await listInstalledSkills({
24
+ global: options.global,
25
+ agent: options.agent
26
+ });
27
+ spinner.stop(`Found ${installed.length} installed skill(s)`);
28
+ if (installed.length === 0) {
29
+ p.outro(chalk.yellow('No skills found to remove.'));
30
+ return;
31
+ }
32
+ // 2. Determine which skills to remove
33
+ let selectedSkills = [];
34
+ if (options.all) {
35
+ // Remove all
36
+ selectedSkills = installed;
37
+ }
38
+ else if (skillNames.length > 0) {
39
+ // Filter by provided names
40
+ const namesLower = skillNames.map(n => n.toLowerCase().replace(/^@/, ''));
41
+ selectedSkills = installed.filter(s => {
42
+ const nameMatch = namesLower.includes(s.name.toLowerCase());
43
+ const scopedMatch = namesLower.includes(s.scopedName?.toLowerCase().replace(/^@/, '') || '');
44
+ return nameMatch || scopedMatch;
45
+ });
46
+ if (selectedSkills.length === 0) {
47
+ const notFound = skillNames.join(', ');
48
+ p.outro(chalk.yellow(`No installed skills match: ${notFound}`));
49
+ return;
50
+ }
51
+ }
52
+ else {
53
+ // Interactive selection
54
+ const choices = installed.map(s => ({
55
+ value: s.name,
56
+ label: `${s.name} ${chalk.dim(`(${s.agents.join(', ')})`)}`,
57
+ hint: s.scopedName || s.source
58
+ }));
59
+ console.log('');
60
+ const selected = await p.multiselect({
61
+ message: `Select skills to remove ${chalk.dim('(space to toggle, enter to confirm)')}`,
62
+ options: choices,
63
+ required: true
64
+ });
65
+ if (p.isCancel(selected)) {
66
+ p.cancel('Removal cancelled');
67
+ process.exit(0);
68
+ }
69
+ selectedSkills = installed.filter(s => selected.includes(s.name));
70
+ }
71
+ if (selectedSkills.length === 0) {
72
+ p.outro(chalk.yellow('No skills selected.'));
73
+ return;
74
+ }
75
+ // 3. Show confirmation
76
+ if (!options.yes) {
77
+ console.log('');
78
+ p.log.info(chalk.bold('Skills to remove:'));
79
+ for (const skill of selectedSkills) {
80
+ const location = skill.isGlobal ? 'global' : 'project';
81
+ p.log.message(` ${chalk.red('×')} ${skill.name} ` +
82
+ `${chalk.dim(`→ ${skill.agents.join(', ')}`)} ` +
83
+ `${chalk.dim(`[${location}]`)}`);
84
+ }
85
+ console.log('');
86
+ const confirmed = await p.confirm({
87
+ message: `Remove ${selectedSkills.length} skill(s)?`,
88
+ initialValue: false
89
+ });
90
+ if (p.isCancel(confirmed) || !confirmed) {
91
+ p.cancel('Removal cancelled');
92
+ process.exit(0);
93
+ }
94
+ }
95
+ // 4. Remove each skill
96
+ spinner.start('Removing skills...');
97
+ let removed = 0;
98
+ let failed = 0;
99
+ const cwd = process.cwd();
100
+ const home = homedir();
101
+ for (const skill of selectedSkills) {
102
+ try {
103
+ // Remove from each agent directory
104
+ for (const agentName of skill.agents) {
105
+ const agentConfig = agentConfigs[agentName];
106
+ if (!agentConfig)
107
+ continue;
108
+ const agentPath = skill.isGlobal
109
+ ? join(agentConfig.globalDir, skill.name)
110
+ : join(cwd, agentConfig.projectDir, skill.name);
111
+ if (existsSync(agentPath)) {
112
+ await rm(agentPath, { recursive: true, force: true });
113
+ }
114
+ }
115
+ // Remove canonical copy
116
+ if (skill.canonicalPath && existsSync(skill.canonicalPath)) {
117
+ await rm(skill.canonicalPath, { recursive: true, force: true });
118
+ }
119
+ // Remove from lock file
120
+ await removeSkillFromLock(skill.name);
121
+ removed++;
122
+ }
123
+ catch (err) {
124
+ p.log.warn(`Failed to remove ${skill.name}: ${err.message}`);
125
+ failed++;
126
+ }
127
+ }
128
+ spinner.stop('Removal complete');
129
+ // 5. Show results
130
+ console.log('');
131
+ if (removed > 0) {
132
+ p.log.success(chalk.green(`✓ Removed ${removed} skill(s)`));
133
+ }
134
+ if (failed > 0) {
135
+ p.log.warn(chalk.yellow(`⚠ Failed to remove ${failed} skill(s)`));
136
+ }
137
+ }
138
+ /**
139
+ * Register the remove command with commander
140
+ */
141
+ export function registerRemoveCommand(program, agentConfigs) {
142
+ program
143
+ .command('remove [skills...]')
144
+ .alias('rm')
145
+ .alias('uninstall')
146
+ .description('Remove installed skills')
147
+ .option('-g, --global', 'Remove from global installation')
148
+ .option('-a, --agent <agent>', 'Remove from specific agent only')
149
+ .option('-y, --yes', 'Skip confirmation prompt')
150
+ .option('--all', 'Remove all installed skills')
151
+ .action(async (skills, options) => {
152
+ try {
153
+ await removeCommand(skills, options, agentConfigs);
154
+ }
155
+ catch (err) {
156
+ console.error(chalk.red('Error:'), err.message);
157
+ process.exit(1);
158
+ }
159
+ });
160
+ }
161
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/cli/commands/remove.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * FZF-Style Interactive Search
3
+ * Real-time fuzzy search with keyboard navigation
4
+ */
5
+ /**
6
+ * Search result from API
7
+ */
8
+ export interface SearchResult {
9
+ name: string;
10
+ scopedName: string;
11
+ description: string;
12
+ author: string;
13
+ stars: number;
14
+ githubUrl: string;
15
+ }
16
+ /**
17
+ * Run FZF-style interactive search
18
+ * Returns the selected skill or null if cancelled
19
+ */
20
+ export declare function fzfSearch(initialQuery?: string): Promise<SearchResult | null>;
21
+ /**
22
+ * Simple non-interactive search for --json mode
23
+ */
24
+ export declare function searchSkillsAPI(query: string, options?: {
25
+ limit?: number;
26
+ sortBy?: string;
27
+ }): Promise<SearchResult[]>;
28
+ //# sourceMappingURL=fzf-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fzf-search.d.ts","sourceRoot":"","sources":["../../src/cli/fzf-search.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACrB;AAYD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,YAAY,SAAK,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA0M/E;AAED;;GAEG;AACH,wBAAsB,eAAe,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAClD,OAAO,CAAC,YAAY,EAAE,CAAC,CAqBzB"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * FZF-Style Interactive Search
3
+ * Real-time fuzzy search with keyboard navigation
4
+ */
5
+ import chalk from 'chalk';
6
+ import * as readline from 'readline';
7
+ const API_URL = 'https://agentskills.in/api/skills';
8
+ /**
9
+ * Run FZF-style interactive search
10
+ * Returns the selected skill or null if cancelled
11
+ */
12
+ export async function fzfSearch(initialQuery = '') {
13
+ const state = {
14
+ query: initialQuery,
15
+ results: [],
16
+ selectedIndex: 0,
17
+ loading: false
18
+ };
19
+ let debounceTimer = null;
20
+ // Setup terminal
21
+ if (process.stdin.isTTY) {
22
+ process.stdin.setRawMode(true);
23
+ }
24
+ readline.emitKeypressEvents(process.stdin);
25
+ process.stdin.resume();
26
+ // Hide cursor
27
+ process.stdout.write('\x1b[?25l');
28
+ /**
29
+ * Render the search UI
30
+ */
31
+ function render() {
32
+ // Clear screen and move to top
33
+ process.stdout.write('\x1b[2J\x1b[H');
34
+ // Header
35
+ console.log(chalk.bold.cyan('🔍 Search Skills'));
36
+ console.log(chalk.dim('Type to search • ↑↓ navigate • Enter select • Esc cancel'));
37
+ console.log('');
38
+ // Search input with cursor
39
+ console.log(`${chalk.cyan('>')} ${state.query}${chalk.dim('|')}`);
40
+ console.log('');
41
+ // Results or status
42
+ if (state.query.length < 2) {
43
+ console.log(chalk.dim(' Start typing to search (min 2 chars)'));
44
+ }
45
+ else if (state.loading) {
46
+ console.log(chalk.dim(' Searching...'));
47
+ }
48
+ else if (state.results.length === 0) {
49
+ console.log(chalk.dim(' No skills found'));
50
+ }
51
+ else {
52
+ const displayCount = Math.min(state.results.length, 10);
53
+ for (let i = 0; i < displayCount; i++) {
54
+ const skill = state.results[i];
55
+ const isSelected = i === state.selectedIndex;
56
+ const prefix = isSelected ? chalk.cyan('❯') : ' ';
57
+ const name = isSelected
58
+ ? chalk.bold.white(skill.name)
59
+ : skill.name;
60
+ const author = chalk.dim(`@${skill.author}`);
61
+ const stars = chalk.yellow(`★${skill.stars.toLocaleString()}`);
62
+ console.log(` ${prefix} ${name} ${author} ${stars}`);
63
+ // Show description for selected item
64
+ if (isSelected && skill.description) {
65
+ const desc = skill.description.length > 70
66
+ ? skill.description.slice(0, 67) + '...'
67
+ : skill.description;
68
+ console.log(chalk.dim(` ${desc}`));
69
+ }
70
+ }
71
+ if (state.results.length > 10) {
72
+ console.log('');
73
+ console.log(chalk.dim(` ... and ${state.results.length - 10} more results`));
74
+ }
75
+ }
76
+ }
77
+ /**
78
+ * Search the API
79
+ */
80
+ async function search(query) {
81
+ if (query.length < 2) {
82
+ state.results = [];
83
+ render();
84
+ return;
85
+ }
86
+ state.loading = true;
87
+ render();
88
+ try {
89
+ const url = `${API_URL}?search=${encodeURIComponent(query)}&limit=20&sortBy=stars`;
90
+ const response = await fetch(url);
91
+ const data = await response.json();
92
+ const apiData = data;
93
+ state.results = (apiData.skills || []).map((s) => ({
94
+ name: s.name,
95
+ scopedName: s.scopedName || `@${s.author}/${s.name}`,
96
+ description: s.description || '',
97
+ author: s.author,
98
+ stars: s.stars || 0,
99
+ githubUrl: s.githubUrl || s.github_url || ''
100
+ }));
101
+ state.selectedIndex = 0;
102
+ }
103
+ catch (err) {
104
+ state.results = [];
105
+ }
106
+ state.loading = false;
107
+ render();
108
+ }
109
+ /**
110
+ * Trigger debounced search
111
+ */
112
+ function triggerSearch() {
113
+ if (debounceTimer)
114
+ clearTimeout(debounceTimer);
115
+ render();
116
+ debounceTimer = setTimeout(() => search(state.query), 200);
117
+ }
118
+ /**
119
+ * Cleanup terminal state
120
+ */
121
+ function cleanup() {
122
+ process.stdin.removeListener('keypress', handleKeypress);
123
+ if (process.stdin.isTTY) {
124
+ process.stdin.setRawMode(false);
125
+ }
126
+ process.stdout.write('\x1b[?25h'); // Show cursor
127
+ console.clear();
128
+ }
129
+ /**
130
+ * Handle keypress events
131
+ */
132
+ function handleKeypress(_char, key) {
133
+ if (!key)
134
+ return;
135
+ // Escape or Ctrl+C to cancel
136
+ if (key.name === 'escape' || (key.ctrl && key.name === 'c')) {
137
+ cleanup();
138
+ resolvePromise(null);
139
+ return;
140
+ }
141
+ // Enter to select
142
+ if (key.name === 'return' && state.results.length > 0) {
143
+ cleanup();
144
+ resolvePromise(state.results[state.selectedIndex]);
145
+ return;
146
+ }
147
+ // Up arrow
148
+ if (key.name === 'up') {
149
+ state.selectedIndex = Math.max(0, state.selectedIndex - 1);
150
+ render();
151
+ return;
152
+ }
153
+ // Down arrow
154
+ if (key.name === 'down') {
155
+ state.selectedIndex = Math.min(state.results.length - 1, state.selectedIndex + 1);
156
+ render();
157
+ return;
158
+ }
159
+ // Backspace
160
+ if (key.name === 'backspace') {
161
+ state.query = state.query.slice(0, -1);
162
+ triggerSearch();
163
+ return;
164
+ }
165
+ // Regular character input
166
+ if (key.sequence && key.sequence.length === 1 && !key.ctrl && !key.meta) {
167
+ state.query += key.sequence;
168
+ triggerSearch();
169
+ }
170
+ }
171
+ // Promise to return result
172
+ let resolvePromise;
173
+ const promise = new Promise((resolve) => {
174
+ resolvePromise = resolve;
175
+ });
176
+ // Start listening for keypresses
177
+ process.stdin.on('keypress', handleKeypress);
178
+ // Initial render
179
+ if (initialQuery) {
180
+ triggerSearch();
181
+ }
182
+ else {
183
+ render();
184
+ }
185
+ return promise;
186
+ }
187
+ /**
188
+ * Simple non-interactive search for --json mode
189
+ */
190
+ export async function searchSkillsAPI(query, options = {}) {
191
+ const limit = options.limit || 20;
192
+ const sortBy = options.sortBy || 'stars';
193
+ try {
194
+ const url = `${API_URL}?search=${encodeURIComponent(query)}&limit=${limit}&sortBy=${sortBy}`;
195
+ const response = await fetch(url);
196
+ const data = await response.json();
197
+ const apiData = data;
198
+ return (apiData.skills || []).map((s) => ({
199
+ name: s.name,
200
+ scopedName: s.scopedName || `@${s.author}/${s.name}`,
201
+ description: s.description || '',
202
+ author: s.author,
203
+ stars: s.stars || 0,
204
+ githubUrl: s.githubUrl || s.github_url || ''
205
+ }));
206
+ }
207
+ catch {
208
+ return [];
209
+ }
210
+ }
211
+ //# sourceMappingURL=fzf-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fzf-search.js","sourceRoot":"","sources":["../../src/cli/fzf-search.ts"],"names":[],"mappings":"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"}