agentinit 1.19.0 → 1.20.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.
Files changed (48) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +46 -4
  3. package/dist/cli.js +1927 -509
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/lock.d.ts +3 -0
  6. package/dist/commands/lock.d.ts.map +1 -0
  7. package/dist/commands/lock.js +160 -0
  8. package/dist/commands/lock.js.map +1 -0
  9. package/dist/commands/mcp.d.ts.map +1 -1
  10. package/dist/commands/mcp.js +60 -0
  11. package/dist/commands/mcp.js.map +1 -1
  12. package/dist/commands/rules.d.ts.map +1 -1
  13. package/dist/commands/rules.js +50 -0
  14. package/dist/commands/rules.js.map +1 -1
  15. package/dist/commands/skills.d.ts.map +1 -1
  16. package/dist/commands/skills.js +299 -20
  17. package/dist/commands/skills.js.map +1 -1
  18. package/dist/core/installLock.d.ts +54 -0
  19. package/dist/core/installLock.d.ts.map +1 -0
  20. package/dist/core/installLock.js +274 -0
  21. package/dist/core/installLock.js.map +1 -0
  22. package/dist/core/skillSecurityScanner.d.ts +28 -0
  23. package/dist/core/skillSecurityScanner.d.ts.map +1 -0
  24. package/dist/core/skillSecurityScanner.js +167 -0
  25. package/dist/core/skillSecurityScanner.js.map +1 -0
  26. package/dist/core/skillsManager.d.ts +12 -0
  27. package/dist/core/skillsManager.d.ts.map +1 -1
  28. package/dist/core/skillsManager.js +373 -14
  29. package/dist/core/skillsManager.js.map +1 -1
  30. package/dist/types/index.d.ts +1 -0
  31. package/dist/types/index.d.ts.map +1 -1
  32. package/dist/types/lockfile.d.ts +68 -0
  33. package/dist/types/lockfile.d.ts.map +1 -0
  34. package/dist/types/lockfile.js +2 -0
  35. package/dist/types/lockfile.js.map +1 -0
  36. package/dist/types/plugins.d.ts +1 -1
  37. package/dist/types/plugins.d.ts.map +1 -1
  38. package/dist/types/skills.d.ts +4 -1
  39. package/dist/types/skills.d.ts.map +1 -1
  40. package/dist/utils/lockSource.d.ts +9 -0
  41. package/dist/utils/lockSource.d.ts.map +1 -0
  42. package/dist/utils/lockSource.js +59 -0
  43. package/dist/utils/lockSource.js.map +1 -0
  44. package/dist/utils/promptUtils.d.ts +13 -2
  45. package/dist/utils/promptUtils.d.ts.map +1 -1
  46. package/dist/utils/promptUtils.js +61 -3
  47. package/dist/utils/promptUtils.js.map +1 -1
  48. package/package.json +1 -1
@@ -0,0 +1,274 @@
1
+ import { promises as fs } from 'fs';
2
+ import { homedir } from 'os';
3
+ import { dirname, join, resolve } from 'path';
4
+ import { createHash, randomUUID } from 'crypto';
5
+ import { readFileIfExists, fileExists } from '../utils/fs.js';
6
+ import { logger } from '../utils/logger.js';
7
+ const LOCK_FILE = 'lock.json';
8
+ const GLOBAL_TARGET_KEY = '__agentinit_global__';
9
+ function getLockPath() {
10
+ return join(homedir(), '.agentinit', LOCK_FILE);
11
+ }
12
+ function getEntryTargetKey(entry) {
13
+ return entry.scope === 'global' ? GLOBAL_TARGET_KEY : entry.projectPath;
14
+ }
15
+ function createEntry(base) {
16
+ return {
17
+ id: randomUUID(),
18
+ timestamp: new Date().toISOString(),
19
+ ...base,
20
+ };
21
+ }
22
+ function sanitizeUrlForLock(url) {
23
+ try {
24
+ const parsed = new URL(url);
25
+ parsed.username = '';
26
+ parsed.password = '';
27
+ parsed.search = '';
28
+ parsed.hash = '';
29
+ return parsed.toString();
30
+ }
31
+ catch {
32
+ return url.split(/[?#]/)[0] || url;
33
+ }
34
+ }
35
+ export function getLockEntryTargetLabel(entry) {
36
+ return entry.scope === 'global' ? 'Global scope' : entry.projectPath;
37
+ }
38
+ export function logLockWriteWarning(context, error) {
39
+ const detail = error instanceof Error ? error.message : 'unknown error';
40
+ logger.warn(`${context}, but failed to update the install lock: ${detail}`);
41
+ }
42
+ export async function hashDirectory(rootPath) {
43
+ if (!(await fileExists(rootPath)))
44
+ return null;
45
+ const hash = createHash('sha256');
46
+ const walk = async (currentPath, relativePath) => {
47
+ const stat = await fs.stat(currentPath);
48
+ if (stat.isDirectory()) {
49
+ hash.update(`dir:${relativePath}\n`);
50
+ const entries = await fs.readdir(currentPath);
51
+ entries.sort();
52
+ for (const entry of entries) {
53
+ await walk(join(currentPath, entry), `${relativePath}/${entry}`);
54
+ }
55
+ }
56
+ else {
57
+ const content = await fs.readFile(currentPath);
58
+ hash.update(`file:${relativePath}\n`);
59
+ hash.update(content);
60
+ hash.update('\n');
61
+ }
62
+ };
63
+ await walk(rootPath, '.');
64
+ return hash.digest('hex');
65
+ }
66
+ export class InstallLock {
67
+ state = null;
68
+ async load() {
69
+ if (this.state)
70
+ return this.state;
71
+ const content = await readFileIfExists(getLockPath());
72
+ if (!content) {
73
+ this.state = { version: 1, entries: [] };
74
+ return this.state;
75
+ }
76
+ try {
77
+ const parsed = JSON.parse(content);
78
+ if (parsed?.version === 1 && Array.isArray(parsed.entries)) {
79
+ this.state = parsed;
80
+ }
81
+ else {
82
+ this.state = { version: 1, entries: [] };
83
+ }
84
+ }
85
+ catch {
86
+ this.state = { version: 1, entries: [] };
87
+ }
88
+ return this.state;
89
+ }
90
+ async save() {
91
+ if (!this.state)
92
+ return;
93
+ const lockPath = getLockPath();
94
+ await fs.mkdir(dirname(lockPath), { recursive: true });
95
+ await fs.writeFile(lockPath, JSON.stringify(this.state, null, 2) + '\n', {
96
+ encoding: 'utf8',
97
+ mode: 0o600,
98
+ });
99
+ await fs.chmod(lockPath, 0o600).catch(() => { });
100
+ }
101
+ async recordSkill(params) {
102
+ const state = await this.load();
103
+ const metadata = {
104
+ kind: 'skill',
105
+ installPath: params.installPath,
106
+ ...(params.canonicalPath ? { canonicalPath: params.canonicalPath } : {}),
107
+ mode: params.mode,
108
+ };
109
+ const entry = createEntry({
110
+ kind: 'skill',
111
+ action: params.action,
112
+ name: params.name,
113
+ projectPath: resolve(params.projectPath),
114
+ agents: params.agents,
115
+ scope: params.scope,
116
+ source: params.source,
117
+ ...(params.contentHash ? { contentHash: params.contentHash } : {}),
118
+ metadata,
119
+ });
120
+ state.entries.push(entry);
121
+ await this.save();
122
+ return entry;
123
+ }
124
+ async recordMcp(params) {
125
+ const state = await this.load();
126
+ const metadata = {
127
+ kind: 'mcp',
128
+ configPath: params.configPath,
129
+ serverType: params.serverType,
130
+ ...(params.command ? { command: params.command } : {}),
131
+ ...(params.url ? { url: sanitizeUrlForLock(params.url) } : {}),
132
+ };
133
+ const entry = createEntry({
134
+ kind: 'mcp',
135
+ action: params.action,
136
+ name: params.name,
137
+ projectPath: resolve(params.projectPath),
138
+ agents: params.agents,
139
+ scope: params.scope,
140
+ source: params.source,
141
+ metadata,
142
+ });
143
+ state.entries.push(entry);
144
+ await this.save();
145
+ return entry;
146
+ }
147
+ async recordRules(params) {
148
+ const state = await this.load();
149
+ const metadata = {
150
+ kind: 'rules',
151
+ configPath: params.configPath,
152
+ templateIds: params.templateIds,
153
+ ruleCount: params.ruleCount,
154
+ };
155
+ const entry = createEntry({
156
+ kind: 'rules',
157
+ action: params.action,
158
+ name: params.name,
159
+ projectPath: resolve(params.projectPath),
160
+ agents: params.agents,
161
+ scope: params.scope,
162
+ source: params.source,
163
+ metadata,
164
+ });
165
+ state.entries.push(entry);
166
+ await this.save();
167
+ return entry;
168
+ }
169
+ async query(options = {}) {
170
+ const state = await this.load();
171
+ return state.entries.filter(entry => {
172
+ if (options.kind && entry.kind !== options.kind)
173
+ return false;
174
+ if (options.name && entry.name.toLowerCase() !== options.name.toLowerCase())
175
+ return false;
176
+ if (options.projectPath && entry.projectPath !== resolve(options.projectPath))
177
+ return false;
178
+ if (options.agent && !entry.agents.includes(options.agent))
179
+ return false;
180
+ if (options.scope && entry.scope !== options.scope)
181
+ return false;
182
+ if (options.action && entry.action !== options.action)
183
+ return false;
184
+ return true;
185
+ });
186
+ }
187
+ async getCurrentState(options = {}) {
188
+ const entries = await this.query(options);
189
+ const groups = new Map();
190
+ for (const entry of entries) {
191
+ const key = this.getCurrentStateKey(entry);
192
+ groups.set(key, entry);
193
+ }
194
+ return [...groups.values()].filter(e => e.action !== 'remove');
195
+ }
196
+ getCurrentStateKey(entry) {
197
+ const agents = [...entry.agents].sort().join(',');
198
+ return [
199
+ entry.kind,
200
+ entry.name.toLowerCase(),
201
+ getEntryTargetKey(entry),
202
+ entry.scope,
203
+ agents,
204
+ this.getLocationKey(entry),
205
+ ].join(':');
206
+ }
207
+ getLocationKey(entry) {
208
+ switch (entry.metadata.kind) {
209
+ case 'skill':
210
+ return entry.metadata.canonicalPath || entry.metadata.installPath;
211
+ case 'mcp':
212
+ return entry.metadata.configPath;
213
+ case 'rules':
214
+ return `${entry.metadata.configPath}:${entry.metadata.templateIds.join(',')}`;
215
+ }
216
+ }
217
+ async getProjectPaths() {
218
+ const state = await this.load();
219
+ return [...new Set(state.entries
220
+ .filter(entry => entry.scope === 'project')
221
+ .map(entry => entry.projectPath))];
222
+ }
223
+ async findProjectsWithSkill(skillName) {
224
+ return this.getCurrentState({ kind: 'skill', name: skillName });
225
+ }
226
+ async findStaleProjects() {
227
+ const projectPaths = await this.getProjectPaths();
228
+ const stale = [];
229
+ for (const projectPath of projectPaths) {
230
+ if (!(await fileExists(projectPath))) {
231
+ stale.push(projectPath);
232
+ }
233
+ }
234
+ return stale;
235
+ }
236
+ async pruneStaleEntries() {
237
+ const stale = await this.findStaleProjects();
238
+ let entriesRemoved = 0;
239
+ if (stale.length === 0) {
240
+ return { prunedProjects: [], entriesRemoved: 0 };
241
+ }
242
+ const state = await this.load();
243
+ const staleSet = new Set(stale);
244
+ const before = state.entries.length;
245
+ state.entries = state.entries.filter(e => !staleSet.has(e.projectPath));
246
+ entriesRemoved = before - state.entries.length;
247
+ if (entriesRemoved > 0) {
248
+ await this.save();
249
+ }
250
+ return { prunedProjects: stale, entriesRemoved };
251
+ }
252
+ async checkDrift(entry) {
253
+ if (!entry.contentHash) {
254
+ return { entry, status: 'match' };
255
+ }
256
+ if (entry.metadata.kind !== 'skill') {
257
+ return { entry, status: 'match' };
258
+ }
259
+ const installPath = entry.metadata.installPath;
260
+ if (!(await fileExists(installPath))) {
261
+ return { entry, status: 'missing' };
262
+ }
263
+ const currentHash = await hashDirectory(installPath);
264
+ if (!currentHash) {
265
+ return { entry, status: 'missing' };
266
+ }
267
+ return {
268
+ entry,
269
+ status: currentHash === entry.contentHash ? 'match' : 'drift',
270
+ currentHash,
271
+ };
272
+ }
273
+ }
274
+ //# sourceMappingURL=installLock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installLock.js","sourceRoot":"","sources":["../../src/core/installLock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { SkillInfo } from '../types/skills.js';
2
+ type SkillScanSeverity = 'high' | 'medium' | 'low';
3
+ export interface SkillScanFinding {
4
+ ruleId: string;
5
+ title: string;
6
+ severity: SkillScanSeverity;
7
+ filePath: string;
8
+ line: number;
9
+ snippet: string;
10
+ blocking: boolean;
11
+ }
12
+ export interface SkillScanResult {
13
+ blocked: boolean;
14
+ findings: SkillScanFinding[];
15
+ stats: Record<SkillScanSeverity, number>;
16
+ }
17
+ export declare class SkillSecurityScanner {
18
+ scanSkill(skill: SkillInfo): Promise<SkillScanResult>;
19
+ formatShortSummary(result: SkillScanResult): string;
20
+ formatBlockingReason(result: SkillScanResult): string;
21
+ private scanDirectory;
22
+ private walk;
23
+ private readTextFile;
24
+ private isExecutableTextFile;
25
+ private scanText;
26
+ }
27
+ export {};
28
+ //# sourceMappingURL=skillSecurityScanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillSecurityScanner.d.ts","sourceRoot":"","sources":["../../src/core/skillSecurityScanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,KAAK,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AASnD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;CAC1C;AAyED,qBAAa,oBAAoB;IACzB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC;IAiB3D,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM;IAUnD,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM;YAWvC,aAAa;YAMb,IAAI;YA0BJ,YAAY;IAc1B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,QAAQ;CA6BjB"}
@@ -0,0 +1,167 @@
1
+ import { promises as fs } from 'fs';
2
+ import { join, relative } from 'path';
3
+ const SCAN_RULES = [
4
+ {
5
+ id: 'AI001',
6
+ title: 'Prompt override language',
7
+ severity: 'medium',
8
+ regex: /\b(ignore|disregard|override|bypass)\b.{0,40}\b(previous|prior|system|safety|guardrails?|instructions?)\b/i,
9
+ },
10
+ {
11
+ id: 'AI002',
12
+ title: 'Secret or credential exfiltration',
13
+ severity: 'high',
14
+ regex: /\b(exfiltrat\w*|upload|send|post|curl|wget)\b.{0,80}\b(secret|token|key|credential|cookie|session|\.ssh|id_rsa|env(?:ironment)? variables?)\b/i,
15
+ },
16
+ {
17
+ id: 'AI003',
18
+ title: 'Destructive shell command',
19
+ severity: 'high',
20
+ regex: /\b(rm\s+-rf\s+\/|sudo\s+rm\s+-rf|mkfs\b|dd\s+if=\/dev\/zero|chmod\s+-R\s+777\s+\/)\b/i,
21
+ },
22
+ {
23
+ id: 'AI004',
24
+ title: 'Remote shell execution pipeline',
25
+ severity: 'high',
26
+ regex: /\b(curl|wget)\b[^\n|]{0,160}\|\s*(sh|bash|zsh)\b/i,
27
+ },
28
+ {
29
+ id: 'AI005',
30
+ title: 'Hardcoded credential material',
31
+ severity: 'low',
32
+ regex: /\b(api[_-]?key|token|secret|password)\b\s*[:=]\s*['"][^'"]{8,}['"]/i,
33
+ },
34
+ {
35
+ id: 'AI006',
36
+ title: 'Unicode bidi control characters',
37
+ severity: 'low',
38
+ regex: /[\u202A-\u202E\u2066-\u2069]/,
39
+ },
40
+ ];
41
+ const MAX_TEXT_FILE_BYTES = 1024 * 1024;
42
+ const SCANNED_TEXT_EXTENSIONS = new Set([
43
+ '',
44
+ '.md',
45
+ '.txt',
46
+ '.json',
47
+ '.yaml',
48
+ '.yml',
49
+ '.toml',
50
+ '.js',
51
+ '.ts',
52
+ '.mjs',
53
+ '.cjs',
54
+ '.sh',
55
+ '.bash',
56
+ '.zsh',
57
+ '.py',
58
+ '.ps1',
59
+ ]);
60
+ const EXECUTABLE_TEXT_EXTENSIONS = new Set([
61
+ '.js',
62
+ '.ts',
63
+ '.mjs',
64
+ '.cjs',
65
+ '.sh',
66
+ '.bash',
67
+ '.zsh',
68
+ '.py',
69
+ '.ps1',
70
+ ]);
71
+ export class SkillSecurityScanner {
72
+ async scanSkill(skill) {
73
+ const findings = skill.generatedContent
74
+ ? this.scanText(skill.generatedContent, 'SKILL.md')
75
+ : await this.scanDirectory(skill.path);
76
+ const stats = findings.reduce((acc, finding) => {
77
+ acc[finding.severity] += 1;
78
+ return acc;
79
+ }, { high: 0, medium: 0, low: 0 });
80
+ return {
81
+ blocked: findings.some(finding => finding.blocking),
82
+ findings,
83
+ stats,
84
+ };
85
+ }
86
+ formatShortSummary(result) {
87
+ const parts = [
88
+ result.stats.high ? `${result.stats.high} high` : null,
89
+ result.stats.medium ? `${result.stats.medium} medium` : null,
90
+ result.stats.low ? `${result.stats.low} low` : null,
91
+ ].filter((value) => !!value);
92
+ return parts.length > 0 ? parts.join(', ') : 'no findings';
93
+ }
94
+ formatBlockingReason(result) {
95
+ const finding = result.findings.find(entry => entry.blocking)
96
+ || result.findings.find(entry => entry.severity === 'high')
97
+ || result.findings[0];
98
+ if (!finding) {
99
+ return 'Security scan failed';
100
+ }
101
+ return `Security scan failed: ${finding.title} (${finding.ruleId}) at ${finding.filePath}:${finding.line}`;
102
+ }
103
+ async scanDirectory(rootPath) {
104
+ const findings = [];
105
+ await this.walk(rootPath, rootPath, findings);
106
+ return findings;
107
+ }
108
+ async walk(rootPath, currentPath, findings) {
109
+ const entries = await fs.readdir(currentPath, { withFileTypes: true });
110
+ for (const entry of entries) {
111
+ if (entry.name === '.git' || entry.name === 'node_modules') {
112
+ continue;
113
+ }
114
+ const entryPath = join(currentPath, entry.name);
115
+ if (entry.isDirectory()) {
116
+ await this.walk(rootPath, entryPath, findings);
117
+ continue;
118
+ }
119
+ const relativePath = relative(rootPath, entryPath).replace(/\\/g, '/');
120
+ const content = await this.readTextFile(entryPath);
121
+ if (content === null) {
122
+ continue;
123
+ }
124
+ findings.push(...this.scanText(content, relativePath, {
125
+ blockHighRisk: this.isExecutableTextFile(entryPath, content),
126
+ }));
127
+ }
128
+ }
129
+ async readTextFile(filePath) {
130
+ const extension = filePath.includes('.') ? filePath.slice(filePath.lastIndexOf('.')).toLowerCase() : '';
131
+ if (!SCANNED_TEXT_EXTENSIONS.has(extension)) {
132
+ return null;
133
+ }
134
+ const buffer = await fs.readFile(filePath);
135
+ if (buffer.length > MAX_TEXT_FILE_BYTES || buffer.includes(0)) {
136
+ return null;
137
+ }
138
+ return buffer.toString('utf8');
139
+ }
140
+ isExecutableTextFile(filePath, content) {
141
+ const extension = filePath.includes('.') ? filePath.slice(filePath.lastIndexOf('.')).toLowerCase() : '';
142
+ return EXECUTABLE_TEXT_EXTENSIONS.has(extension) || content.startsWith('#!');
143
+ }
144
+ scanText(content, filePath, options = {}) {
145
+ const findings = [];
146
+ const lines = content.split(/\r?\n/);
147
+ lines.forEach((line, index) => {
148
+ for (const rule of SCAN_RULES) {
149
+ rule.regex.lastIndex = 0;
150
+ if (!rule.regex.test(line)) {
151
+ continue;
152
+ }
153
+ findings.push({
154
+ ruleId: rule.id,
155
+ title: rule.title,
156
+ severity: rule.severity,
157
+ filePath,
158
+ line: index + 1,
159
+ snippet: line.trim().slice(0, 160),
160
+ blocking: rule.severity === 'high' && options.blockHighRisk === true,
161
+ });
162
+ }
163
+ });
164
+ return findings;
165
+ }
166
+ }
167
+ //# sourceMappingURL=skillSecurityScanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillSecurityScanner.js","sourceRoot":"","sources":["../../src/core/skillSecurityScanner.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import type { SkillInfo, InstalledSkill, SkillInstallResult, SkillsAddOptions, S
4
4
  export declare class SkillsManager {
5
5
  private agentManager;
6
6
  private preparedSourceContexts;
7
+ private readonly skillScanner;
7
8
  constructor(agentManager?: AgentManager);
8
9
  /**
9
10
  * Parse a source string into a structured SkillSource
@@ -14,7 +15,13 @@ export declare class SkillsManager {
14
15
  private isImplicitCatalogSkillSource;
15
16
  private resolveSourceRequest;
16
17
  private parseGitHubHttpSource;
18
+ private parseGitLabHttpSource;
19
+ private parseBitbucketHttpSource;
20
+ private parseHttpRepositorySource;
21
+ private parseSshRepositorySource;
17
22
  private parseGitHubShorthandSource;
23
+ private parseGitLabShorthandSource;
24
+ private parseBitbucketShorthandSource;
18
25
  /**
19
26
  * Parse a SKILL.md file and extract name + description from frontmatter
20
27
  */
@@ -95,6 +102,10 @@ export declare class SkillsManager {
95
102
  global?: boolean;
96
103
  }): Promise<SkillInstallResult>;
97
104
  private getCanonicalInstallPlan;
105
+ private normalizeSkillPrefix;
106
+ private withSkillPrefix;
107
+ private rewriteSkillFileName;
108
+ private applyPrefixToSkills;
98
109
  private normalizeSkillName;
99
110
  private resolveInstallPath;
100
111
  getInstallPath(skillName: string, targetDir: string): string;
@@ -103,6 +114,7 @@ export declare class SkillsManager {
103
114
  private readExistingSkillSnapshot;
104
115
  private getNewSkillSnapshot;
105
116
  private compareSkillSnapshot;
117
+ private compareSkillInstallStatus;
106
118
  private cleanAndCreateDirectory;
107
119
  private isWithinPath;
108
120
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"skillsManager.d.ts","sourceRoot":"","sources":["../../src/core/skillsManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skillsManager.d.ts","sourceRoot":"","sources":["../../src/core/skillsManager.ts"],"names":[],"mappings":"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"}