add-ai-tools 1.0.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.
- package/README.md +122 -0
- package/dist/index.d.mts +501 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +1906 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +44 -0
package/README.md
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# add-ai-tools
|
|
2
|
+
|
|
3
|
+
Install AI agent resources (Skills, Rules, Agents) from various sources with a single command.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g add-ai-tools
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
### Install from GitHub
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Using GitHub shorthand
|
|
17
|
+
npx add-ai-tools owner/repo
|
|
18
|
+
|
|
19
|
+
# Using GitHub URL
|
|
20
|
+
npx add-ai-tools https://github.com/owner/repo
|
|
21
|
+
|
|
22
|
+
# Install specific resource
|
|
23
|
+
npx add-ai-tools https://github.com/owner/repo/tree/main/skills/my-skill
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Interactive Mode
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npx add-ai-tools
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Follow the prompts to select agent, resource type, and resources to install.
|
|
33
|
+
|
|
34
|
+
### Export as ZIP
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# Export from GitHub source (with prompts)
|
|
38
|
+
npx add-ai-tools owner/repo --zip
|
|
39
|
+
|
|
40
|
+
# Interactive source input
|
|
41
|
+
npx add-ai-tools --zip
|
|
42
|
+
|
|
43
|
+
# Export all resources without prompts
|
|
44
|
+
npx add-ai-tools owner/repo --zip -y
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Supported Sources
|
|
48
|
+
|
|
49
|
+
| Format | Example |
|
|
50
|
+
|--------|---------|
|
|
51
|
+
| GitHub shorthand | `owner/repo` |
|
|
52
|
+
| GitHub URL | `https://github.com/owner/repo` |
|
|
53
|
+
| GitHub URL with path | `https://github.com/owner/repo/tree/main/skills/my-skill` |
|
|
54
|
+
| GitLab URL | `https://gitlab.com/owner/repo` |
|
|
55
|
+
| Git SSH | `git@github.com:owner/repo.git` |
|
|
56
|
+
|
|
57
|
+
## Options
|
|
58
|
+
|
|
59
|
+
| Option | Description | Default |
|
|
60
|
+
|--------|-------------|---------|
|
|
61
|
+
| `--agent <agent>` | Target agent (`claude-code`, `cursor`, `github-copilot`, `antigravity`) | `claude-code` |
|
|
62
|
+
| `--scope <scope>` | Installation scope (`project`, `global`) | `project` |
|
|
63
|
+
| `-y, --yes` | Skip confirmation prompts | `false` |
|
|
64
|
+
| `--zip` | Export resources as ZIP | `false` |
|
|
65
|
+
|
|
66
|
+
## Supported Agents
|
|
67
|
+
|
|
68
|
+
| Agent | Skills | Rules | Agents |
|
|
69
|
+
|-------|:------:|:-----:|:------:|
|
|
70
|
+
| Claude Code | ✓ | ✓ | ✓ |
|
|
71
|
+
| Cursor | ✓ | ✓ | - |
|
|
72
|
+
| GitHub Copilot | ✓ | ✓ | - |
|
|
73
|
+
| Antigravity | ✓ | ✓ | - |
|
|
74
|
+
|
|
75
|
+
## Installation Paths
|
|
76
|
+
|
|
77
|
+
Resources are installed to the appropriate location for each agent:
|
|
78
|
+
|
|
79
|
+
| Agent | Project Scope | Global Scope |
|
|
80
|
+
|-------|---------------|--------------|
|
|
81
|
+
| Claude Code | `.claude/` | `~/.claude/` |
|
|
82
|
+
| Cursor | `.cursor/` | `~/.cursor/` |
|
|
83
|
+
| GitHub Copilot | `.github/` | `~/.copilot/` |
|
|
84
|
+
| Antigravity | `.agent/` | `~/.gemini/antigravity/` |
|
|
85
|
+
|
|
86
|
+
## Duplicate Handling
|
|
87
|
+
|
|
88
|
+
When a resource already exists, you can choose to:
|
|
89
|
+
|
|
90
|
+
- **Skip** - Keep existing file
|
|
91
|
+
- **Overwrite** - Replace with new version
|
|
92
|
+
- **Rename** - Save as new name (e.g., `skill-2`)
|
|
93
|
+
- **Backup** - Backup existing file before replacing
|
|
94
|
+
- **Compare** - View diff and decide
|
|
95
|
+
|
|
96
|
+
Identical content is automatically skipped.
|
|
97
|
+
|
|
98
|
+
## Examples
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Install all resources from a repo to Claude Code
|
|
102
|
+
npx add-ai-tools vercel-labs/ai-chatbot
|
|
103
|
+
|
|
104
|
+
# Install to Cursor with global scope
|
|
105
|
+
npx add-ai-tools owner/repo --agent cursor --scope global
|
|
106
|
+
|
|
107
|
+
# Install without prompts
|
|
108
|
+
npx add-ai-tools owner/repo -y
|
|
109
|
+
|
|
110
|
+
# Interactive mode
|
|
111
|
+
npx add-ai-tools
|
|
112
|
+
|
|
113
|
+
# Export resources as ZIP from GitHub
|
|
114
|
+
npx add-ai-tools owner/repo --zip
|
|
115
|
+
|
|
116
|
+
# Export all resources without prompts
|
|
117
|
+
npx add-ai-tools owner/repo --zip -y
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## License
|
|
121
|
+
|
|
122
|
+
MIT
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
//#region src/types.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* 리소스 타입 (복수형으로 통일)
|
|
6
|
+
*/
|
|
7
|
+
type ResourceType = 'skills' | 'rules' | 'agents';
|
|
8
|
+
/**
|
|
9
|
+
* 지원하는 Agent 키
|
|
10
|
+
*/
|
|
11
|
+
type AgentKey = 'claude-code' | 'cursor' | 'github-copilot' | 'antigravity';
|
|
12
|
+
/**
|
|
13
|
+
* Agent 경로 정의
|
|
14
|
+
*/
|
|
15
|
+
interface AgentPaths {
|
|
16
|
+
skills: string;
|
|
17
|
+
rules: string;
|
|
18
|
+
agents: string | null;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Agent 설정
|
|
22
|
+
*/
|
|
23
|
+
interface AgentConfig {
|
|
24
|
+
name: string;
|
|
25
|
+
supportedTypes: ResourceType[];
|
|
26
|
+
paths: {
|
|
27
|
+
project: AgentPaths;
|
|
28
|
+
global: AgentPaths;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Agent Registry 타입
|
|
33
|
+
*/
|
|
34
|
+
type AgentRegistry = Record<AgentKey, AgentConfig>;
|
|
35
|
+
/**
|
|
36
|
+
* 파싱된 소스 정보
|
|
37
|
+
* 다양한 소스 포맷(GitHub, GitLab, Git URL 등)을 통일된 구조로 표현
|
|
38
|
+
*/
|
|
39
|
+
interface ParsedSource {
|
|
40
|
+
/** 소스 유형 */
|
|
41
|
+
type: 'github' | 'gitlab' | 'git' | 'direct-url';
|
|
42
|
+
/** 정규화된 URL */
|
|
43
|
+
url?: string;
|
|
44
|
+
/** 레포지토리 내 서브 경로 (예: skills/frontend-design) */
|
|
45
|
+
subpath?: string;
|
|
46
|
+
/** Git 브랜치/태그/커밋 참조 */
|
|
47
|
+
ref?: string;
|
|
48
|
+
/** GitHub/GitLab owner (조직 또는 사용자) */
|
|
49
|
+
owner?: string;
|
|
50
|
+
/** 레포지토리 이름 */
|
|
51
|
+
repo?: string;
|
|
52
|
+
/** 원본 입력 문자열 */
|
|
53
|
+
raw: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 중복 처리 전략
|
|
57
|
+
*/
|
|
58
|
+
type DuplicateAction = 'skip' | 'overwrite' | 'rename' | 'backup' | 'compare' | 'fail';
|
|
59
|
+
/**
|
|
60
|
+
* 소스 파일 정보
|
|
61
|
+
*/
|
|
62
|
+
interface SourceFile {
|
|
63
|
+
path: string;
|
|
64
|
+
content: string;
|
|
65
|
+
isDirectory: boolean;
|
|
66
|
+
/** Sibling files in the same resource directory (scripts/, references/, etc.) */
|
|
67
|
+
siblingFiles?: SourceFile[];
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 리소스 정보
|
|
71
|
+
*/
|
|
72
|
+
interface Resource {
|
|
73
|
+
name: string;
|
|
74
|
+
type: ResourceType;
|
|
75
|
+
description: string;
|
|
76
|
+
path: string;
|
|
77
|
+
content: string;
|
|
78
|
+
metadata: {
|
|
79
|
+
author?: string;
|
|
80
|
+
version?: string;
|
|
81
|
+
license?: string;
|
|
82
|
+
category?: string;
|
|
83
|
+
};
|
|
84
|
+
directory?: {
|
|
85
|
+
files: SourceFile[];
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* 설치 요청
|
|
90
|
+
*/
|
|
91
|
+
interface InstallRequest {
|
|
92
|
+
resource: Resource;
|
|
93
|
+
agent: AgentKey;
|
|
94
|
+
scope: 'project' | 'global';
|
|
95
|
+
onDuplicate: DuplicateAction;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* 설치 결과
|
|
99
|
+
*/
|
|
100
|
+
interface InstallResult {
|
|
101
|
+
resourceName: string;
|
|
102
|
+
agent: AgentKey;
|
|
103
|
+
success: boolean;
|
|
104
|
+
action: 'created' | 'skipped' | 'overwritten' | 'renamed' | 'backed-up' | 'failed';
|
|
105
|
+
path: string;
|
|
106
|
+
backupPath?: string;
|
|
107
|
+
renamedTo?: string;
|
|
108
|
+
error?: string;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* ZIP 내보내기 결과
|
|
112
|
+
*/
|
|
113
|
+
interface ZipResult {
|
|
114
|
+
success: boolean;
|
|
115
|
+
outputPath: string;
|
|
116
|
+
resourceCount: number;
|
|
117
|
+
error?: string;
|
|
118
|
+
}
|
|
119
|
+
//#endregion
|
|
120
|
+
//#region src/install/InstallManager.d.ts
|
|
121
|
+
/**
|
|
122
|
+
* InstallManager
|
|
123
|
+
*
|
|
124
|
+
* Handles resource installation with duplicate detection and handling strategies:
|
|
125
|
+
* - Skip: Keep existing file
|
|
126
|
+
* - Overwrite: Replace existing file
|
|
127
|
+
* - Rename: Create new file with incremented number (skill-2, skill-3)
|
|
128
|
+
* - Backup: Create .backup file before overwriting
|
|
129
|
+
* - Auto-skip: Automatically skip if content is identical
|
|
130
|
+
*/
|
|
131
|
+
declare class InstallManager {
|
|
132
|
+
private pathResolver;
|
|
133
|
+
private duplicateHandler;
|
|
134
|
+
constructor();
|
|
135
|
+
/**
|
|
136
|
+
* Install multiple resources
|
|
137
|
+
*/
|
|
138
|
+
install(requests: InstallRequest[]): Promise<InstallResult[]>;
|
|
139
|
+
/**
|
|
140
|
+
* Install single resource
|
|
141
|
+
*/
|
|
142
|
+
private installOne;
|
|
143
|
+
/**
|
|
144
|
+
* Copy sibling files to target directory
|
|
145
|
+
*/
|
|
146
|
+
private copySiblingFiles;
|
|
147
|
+
/**
|
|
148
|
+
* Resolve target installation path
|
|
149
|
+
*/
|
|
150
|
+
private resolveTargetPath;
|
|
151
|
+
/**
|
|
152
|
+
* Check if file exists and get duplicate info
|
|
153
|
+
*/
|
|
154
|
+
private checkDuplicate;
|
|
155
|
+
/**
|
|
156
|
+
* Handle duplicate file
|
|
157
|
+
*/
|
|
158
|
+
private handleDuplicate;
|
|
159
|
+
}
|
|
160
|
+
//#endregion
|
|
161
|
+
//#region src/install/DuplicateHandler.d.ts
|
|
162
|
+
/**
|
|
163
|
+
* DuplicateHandler
|
|
164
|
+
*
|
|
165
|
+
* Handles various duplicate resolution strategies for resource installation:
|
|
166
|
+
* - skip: Do nothing, keep existing file
|
|
167
|
+
* - overwrite: Replace existing file with new content
|
|
168
|
+
* - rename: Create new file with incremented number (skill-2, skill-3)
|
|
169
|
+
* - backup: Create .backup file before overwriting
|
|
170
|
+
*/
|
|
171
|
+
declare class DuplicateHandler {
|
|
172
|
+
/**
|
|
173
|
+
* Handle rename - Find next available number
|
|
174
|
+
* Examples: skill-2, skill-3, skill-4
|
|
175
|
+
*
|
|
176
|
+
* @param targetPath - The original target path (e.g., /path/to/my-skill/SKILL.md)
|
|
177
|
+
* @param content - The new content to write
|
|
178
|
+
* @returns The new path where the file was written
|
|
179
|
+
*/
|
|
180
|
+
rename(targetPath: string, content: string): Promise<string>;
|
|
181
|
+
/**
|
|
182
|
+
* Handle backup - Create .backup file and overwrite
|
|
183
|
+
*
|
|
184
|
+
* If .backup already exists, creates numbered backups: .backup.1, .backup.2, etc.
|
|
185
|
+
*
|
|
186
|
+
* @param targetPath - The target path to backup and overwrite
|
|
187
|
+
* @param content - The new content to write
|
|
188
|
+
* @returns The backup path where the original content was saved
|
|
189
|
+
*/
|
|
190
|
+
backup(targetPath: string, content: string): Promise<string>;
|
|
191
|
+
/**
|
|
192
|
+
* Skip - Do nothing
|
|
193
|
+
*/
|
|
194
|
+
skip(): Promise<void>;
|
|
195
|
+
/**
|
|
196
|
+
* Overwrite - Replace file
|
|
197
|
+
*
|
|
198
|
+
* @param targetPath - The target path to overwrite
|
|
199
|
+
* @param content - The new content to write
|
|
200
|
+
*/
|
|
201
|
+
overwrite(targetPath: string, content: string): Promise<void>;
|
|
202
|
+
/**
|
|
203
|
+
* Handle compare - Show diff and let user choose action
|
|
204
|
+
*
|
|
205
|
+
* Displays unified diff between existing and new content,
|
|
206
|
+
* then prompts user to choose skip, overwrite, or backup.
|
|
207
|
+
*
|
|
208
|
+
* @param targetPath - The target file path
|
|
209
|
+
* @param existingContent - Current content of the file
|
|
210
|
+
* @param newContent - New content to potentially install
|
|
211
|
+
* @param resourceName - Name of the resource for display
|
|
212
|
+
* @returns The chosen action: 'skip', 'overwrite', or 'backup'
|
|
213
|
+
*/
|
|
214
|
+
compare(targetPath: string, existingContent: string, newContent: string, resourceName: string): Promise<'skip' | 'overwrite' | 'backup'>;
|
|
215
|
+
/**
|
|
216
|
+
* Prompt user for single duplicate action
|
|
217
|
+
*
|
|
218
|
+
* Displays interactive menu for handling a single duplicate file.
|
|
219
|
+
*
|
|
220
|
+
* @param resourceName - Name of the resource
|
|
221
|
+
* @param existingPath - Path where file already exists
|
|
222
|
+
* @returns The chosen duplicate action
|
|
223
|
+
*/
|
|
224
|
+
promptForAction(resourceName: string, existingPath: string): Promise<DuplicateAction>;
|
|
225
|
+
}
|
|
226
|
+
//#endregion
|
|
227
|
+
//#region src/install/BatchHandler.d.ts
|
|
228
|
+
/**
|
|
229
|
+
* Batch action types for handling multiple duplicates at once
|
|
230
|
+
*/
|
|
231
|
+
type BatchAction = 'ask-each' | 'skip-all' | 'overwrite-all' | 'backup-all';
|
|
232
|
+
/**
|
|
233
|
+
* Result summary structure
|
|
234
|
+
*/
|
|
235
|
+
interface ResultSummary {
|
|
236
|
+
created: number;
|
|
237
|
+
skipped: number;
|
|
238
|
+
overwritten: number;
|
|
239
|
+
renamed: number;
|
|
240
|
+
backedUp: number;
|
|
241
|
+
failed: number;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* BatchHandler
|
|
245
|
+
*
|
|
246
|
+
* Handles batch operations for multiple install requests:
|
|
247
|
+
* - Apply batch actions to all requests
|
|
248
|
+
* - Summarize installation results
|
|
249
|
+
*/
|
|
250
|
+
declare class BatchHandler {
|
|
251
|
+
/**
|
|
252
|
+
* Apply batch action to all requests
|
|
253
|
+
* Converts batch action to individual duplicate actions
|
|
254
|
+
*/
|
|
255
|
+
applyBatchAction(requests: InstallRequest[], batchAction: BatchAction): InstallRequest[];
|
|
256
|
+
/**
|
|
257
|
+
* Group and count results by action type
|
|
258
|
+
*/
|
|
259
|
+
summarizeResults(results: InstallResult[]): ResultSummary;
|
|
260
|
+
/**
|
|
261
|
+
* Format summary as human-readable string
|
|
262
|
+
*/
|
|
263
|
+
formatSummary(summary: ResultSummary): string;
|
|
264
|
+
/**
|
|
265
|
+
* Check if any results have failed
|
|
266
|
+
*/
|
|
267
|
+
hasFailures(results: InstallResult[]): boolean;
|
|
268
|
+
/**
|
|
269
|
+
* Get failed results only
|
|
270
|
+
*/
|
|
271
|
+
getFailedResults(results: InstallResult[]): InstallResult[];
|
|
272
|
+
/**
|
|
273
|
+
* Get successful results only
|
|
274
|
+
*/
|
|
275
|
+
getSuccessfulResults(results: InstallResult[]): InstallResult[];
|
|
276
|
+
}
|
|
277
|
+
//#endregion
|
|
278
|
+
//#region src/utils/diff.d.ts
|
|
279
|
+
/**
|
|
280
|
+
* Generate unified diff between two contents
|
|
281
|
+
*/
|
|
282
|
+
declare function generateDiff(oldContent: string, newContent: string, filename?: string): string;
|
|
283
|
+
/**
|
|
284
|
+
* Format diff with colors
|
|
285
|
+
*/
|
|
286
|
+
declare function formatDiff(diffText: string): string;
|
|
287
|
+
/**
|
|
288
|
+
* Display diff to console
|
|
289
|
+
*/
|
|
290
|
+
declare function displayDiff(oldContent: string, newContent: string, filename: string): void;
|
|
291
|
+
//#endregion
|
|
292
|
+
//#region src/path/PathResolver.d.ts
|
|
293
|
+
/**
|
|
294
|
+
* PathResolver - Agent별 경로 해석 및 지원 타입 관리
|
|
295
|
+
*
|
|
296
|
+
* 주요 기능:
|
|
297
|
+
* - Agent가 지원하는 리소스 타입 조회
|
|
298
|
+
* - Agent별 설치 경로 해석 (project/global scope)
|
|
299
|
+
* - 타입 지원 여부 확인
|
|
300
|
+
*/
|
|
301
|
+
declare class PathResolver {
|
|
302
|
+
private agents;
|
|
303
|
+
constructor();
|
|
304
|
+
/**
|
|
305
|
+
* Agent가 지원하는 리소스 타입 목록 반환
|
|
306
|
+
* @param agent - 대상 에이전트
|
|
307
|
+
* @returns 지원하는 리소스 타입 배열
|
|
308
|
+
*/
|
|
309
|
+
getSupportedTypes(agent: AgentKey): ResourceType[];
|
|
310
|
+
/**
|
|
311
|
+
* Agent별 설치 경로 해석
|
|
312
|
+
* @param agent - 대상 에이전트
|
|
313
|
+
* @param type - 리소스 타입
|
|
314
|
+
* @param scope - 설치 범위 (project | global)
|
|
315
|
+
* @returns 설치 경로 또는 null (미지원)
|
|
316
|
+
*/
|
|
317
|
+
resolveAgentPath(agent: AgentKey, type: ResourceType, scope: 'project' | 'global'): string | null;
|
|
318
|
+
/**
|
|
319
|
+
* 타입이 Agent에서 지원되는지 확인
|
|
320
|
+
* @param agent - 대상 에이전트
|
|
321
|
+
* @param type - 확인할 리소스 타입
|
|
322
|
+
* @returns 지원 여부
|
|
323
|
+
*/
|
|
324
|
+
isTypeSupported(agent: AgentKey, type: ResourceType): boolean;
|
|
325
|
+
/**
|
|
326
|
+
* 모든 Agent 목록 반환
|
|
327
|
+
* @returns Agent 키 배열
|
|
328
|
+
*/
|
|
329
|
+
getAgents(): AgentKey[];
|
|
330
|
+
/**
|
|
331
|
+
* Agent 설정 전체 반환
|
|
332
|
+
* @param agent - 대상 에이전트
|
|
333
|
+
* @returns Agent 설정 객체
|
|
334
|
+
*/
|
|
335
|
+
getAgentConfig(agent: AgentKey): AgentConfig;
|
|
336
|
+
/**
|
|
337
|
+
* Agent 표시 이름 반환
|
|
338
|
+
* @param agent - 대상 에이전트
|
|
339
|
+
* @returns 표시용 이름
|
|
340
|
+
*/
|
|
341
|
+
getAgentName(agent: AgentKey): string;
|
|
342
|
+
/**
|
|
343
|
+
* ~ 를 $HOME으로 확장
|
|
344
|
+
* @param path - 경로 문자열
|
|
345
|
+
* @returns 확장된 경로
|
|
346
|
+
*/
|
|
347
|
+
private expandTilde;
|
|
348
|
+
}
|
|
349
|
+
declare const pathResolver: PathResolver;
|
|
350
|
+
//#endregion
|
|
351
|
+
//#region src/commands/CommandHandler.d.ts
|
|
352
|
+
/**
|
|
353
|
+
* CLI 실행 옵션
|
|
354
|
+
*/
|
|
355
|
+
interface CommandOptions {
|
|
356
|
+
source?: string;
|
|
357
|
+
agent?: string;
|
|
358
|
+
scope?: 'project' | 'global';
|
|
359
|
+
yes?: boolean;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* CommandHandler - 외부 소스 기반 설치
|
|
363
|
+
*
|
|
364
|
+
* 지원 소스 포맷:
|
|
365
|
+
* - GitHub shorthand: owner/repo
|
|
366
|
+
* - GitHub URL: https://github.com/owner/repo
|
|
367
|
+
* - GitHub URL with path: https://github.com/owner/repo/tree/main/skills/frontend-design
|
|
368
|
+
* - GitLab URL: https://gitlab.com/owner/repo
|
|
369
|
+
* - Git URL: git@github.com:owner/repo.git
|
|
370
|
+
* - Direct URL: https://raw.githubusercontent.com/.../SKILL.md
|
|
371
|
+
*/
|
|
372
|
+
declare class CommandHandler {
|
|
373
|
+
private installManager;
|
|
374
|
+
private logger;
|
|
375
|
+
constructor();
|
|
376
|
+
/**
|
|
377
|
+
* CLI 실행 진입점
|
|
378
|
+
*/
|
|
379
|
+
run(options?: CommandOptions): Promise<void>;
|
|
380
|
+
/**
|
|
381
|
+
* 소스가 제공된 경우 실행
|
|
382
|
+
*/
|
|
383
|
+
private runWithSource;
|
|
384
|
+
/**
|
|
385
|
+
* 인터랙티브 모드 실행
|
|
386
|
+
*/
|
|
387
|
+
private runInteractive;
|
|
388
|
+
/**
|
|
389
|
+
* 파싱된 소스 정보 로깅 (디버깅용)
|
|
390
|
+
*/
|
|
391
|
+
private logParsedSource;
|
|
392
|
+
/**
|
|
393
|
+
* 설치 결과 출력
|
|
394
|
+
*/
|
|
395
|
+
private printResults;
|
|
396
|
+
}
|
|
397
|
+
declare const commandHandler: CommandHandler;
|
|
398
|
+
//#endregion
|
|
399
|
+
//#region src/export/ZipExporter.d.ts
|
|
400
|
+
/**
|
|
401
|
+
* ZipExporter - 리소스를 ZIP으로 내보내기
|
|
402
|
+
*
|
|
403
|
+
* ZIP 구조:
|
|
404
|
+
* frontend/skills/my-skill/
|
|
405
|
+
* SKILL.md
|
|
406
|
+
* scripts/
|
|
407
|
+
* references/
|
|
408
|
+
*/
|
|
409
|
+
declare class ZipExporter {
|
|
410
|
+
/**
|
|
411
|
+
* 리소스를 ZIP으로 내보내기
|
|
412
|
+
*/
|
|
413
|
+
export(resources: Resource[], outputPath: string): Promise<ZipResult>;
|
|
414
|
+
/**
|
|
415
|
+
* 리소스의 기본 경로 추출
|
|
416
|
+
* 예: /path/to/registry/frontend/skills/my-skill → frontend/skills/my-skill
|
|
417
|
+
*/
|
|
418
|
+
private getResourceBasePath;
|
|
419
|
+
/**
|
|
420
|
+
* 리소스 타입별 메인 파일명
|
|
421
|
+
*/
|
|
422
|
+
private getMainFileName;
|
|
423
|
+
}
|
|
424
|
+
declare const zipExporter: ZipExporter;
|
|
425
|
+
//#endregion
|
|
426
|
+
//#region src/commands/ZipHandler.d.ts
|
|
427
|
+
/**
|
|
428
|
+
* ZipHandler 옵션
|
|
429
|
+
*/
|
|
430
|
+
interface ZipHandlerOptions {
|
|
431
|
+
source?: string;
|
|
432
|
+
yes?: boolean;
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* ZipHandler - ZIP 내보내기 워크플로우 오케스트레이션
|
|
436
|
+
*/
|
|
437
|
+
declare class ZipHandler {
|
|
438
|
+
private logger;
|
|
439
|
+
constructor();
|
|
440
|
+
/**
|
|
441
|
+
* ZIP 내보내기 실행
|
|
442
|
+
*/
|
|
443
|
+
run(options?: ZipHandlerOptions): Promise<void>;
|
|
444
|
+
/**
|
|
445
|
+
* 소스 입력 프롬프트
|
|
446
|
+
*/
|
|
447
|
+
private promptSource;
|
|
448
|
+
/**
|
|
449
|
+
* 출력 파일 경로 생성
|
|
450
|
+
*/
|
|
451
|
+
private generateOutputPath;
|
|
452
|
+
/**
|
|
453
|
+
* 결과 출력
|
|
454
|
+
*/
|
|
455
|
+
private printResult;
|
|
456
|
+
}
|
|
457
|
+
declare const zipHandler: ZipHandler;
|
|
458
|
+
//#endregion
|
|
459
|
+
//#region src/source/SourceParser.d.ts
|
|
460
|
+
/**
|
|
461
|
+
* 입력이 직접 SKILL.md URL인지 확인
|
|
462
|
+
* 예: https://raw.githubusercontent.com/.../SKILL.md
|
|
463
|
+
*/
|
|
464
|
+
declare function isDirectSkillUrl(input: string): boolean;
|
|
465
|
+
/**
|
|
466
|
+
* 소스 문자열을 파싱하여 ParsedSource 객체로 변환
|
|
467
|
+
*
|
|
468
|
+
* 지원하는 소스 포맷:
|
|
469
|
+
* - GitHub shorthand: owner/repo
|
|
470
|
+
* - GitHub URL: https://github.com/owner/repo
|
|
471
|
+
* - GitHub URL with path: https://github.com/owner/repo/tree/main/skills/frontend-design
|
|
472
|
+
* - GitLab URL: https://gitlab.com/owner/repo
|
|
473
|
+
* - Git URL: git@github.com:owner/repo.git
|
|
474
|
+
* - Direct URL: https://raw.githubusercontent.com/.../SKILL.md
|
|
475
|
+
*/
|
|
476
|
+
declare function parseSource(input: string): ParsedSource;
|
|
477
|
+
/**
|
|
478
|
+
* ParsedSource에서 owner/repo 식별자 추출 (텔레메트리용)
|
|
479
|
+
*/
|
|
480
|
+
declare function getOwnerRepo(parsed: ParsedSource): string | null;
|
|
481
|
+
/**
|
|
482
|
+
* ParsedSource가 특정 스킬/리소스를 직접 가리키는지 확인
|
|
483
|
+
*/
|
|
484
|
+
declare function isDirectResourcePath(parsed: ParsedSource): boolean;
|
|
485
|
+
/**
|
|
486
|
+
* 소스 유형에 따른 표시 문자열 반환
|
|
487
|
+
*/
|
|
488
|
+
declare function getSourceDisplayName(parsed: ParsedSource): string;
|
|
489
|
+
//#endregion
|
|
490
|
+
//#region src/data/agents.d.ts
|
|
491
|
+
/**
|
|
492
|
+
* Agent 설정 데이터
|
|
493
|
+
* 각 AI 코딩 어시스턴트의 리소스 설치 경로 및 지원 타입 정의
|
|
494
|
+
*/
|
|
495
|
+
declare const agents: AgentRegistry;
|
|
496
|
+
//#endregion
|
|
497
|
+
//#region src/index.d.ts
|
|
498
|
+
declare function main(): Promise<void>;
|
|
499
|
+
//#endregion
|
|
500
|
+
export { type AgentConfig, type AgentKey, type AgentPaths, type AgentRegistry, type BatchAction, BatchHandler, CommandHandler, type DuplicateAction, DuplicateHandler, InstallManager, type InstallRequest, type InstallResult, type ParsedSource, PathResolver, type Resource, type ResourceType, type ResultSummary, type SourceFile, ZipExporter, ZipHandler, agents, commandHandler, displayDiff, formatDiff, generateDiff, getOwnerRepo, getSourceDisplayName, isDirectResourcePath, isDirectSkillUrl, main, parseSource, pathResolver, zipExporter, zipHandler };
|
|
501
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/install/InstallManager.ts","../src/install/DuplicateHandler.ts","../src/install/BatchHandler.ts","../src/utils/diff.ts","../src/path/PathResolver.ts","../src/commands/CommandHandler.ts","../src/export/ZipExporter.ts","../src/commands/ZipHandler.ts","../src/source/SourceParser.ts","../src/data/agents.ts","../src/index.ts"],"mappings":"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"}
|