agent-skills-cli 1.0.8 → 1.0.9

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 (142) hide show
  1. package/README.md +18 -17
  2. package/dist/cli/agents.d.ts +10 -0
  3. package/dist/cli/agents.d.ts.map +1 -0
  4. package/dist/cli/agents.js +270 -0
  5. package/dist/cli/agents.js.map +1 -0
  6. package/dist/cli/commands/audit.d.ts +11 -0
  7. package/dist/cli/commands/audit.d.ts.map +1 -0
  8. package/dist/cli/commands/audit.js +168 -0
  9. package/dist/cli/commands/audit.js.map +1 -0
  10. package/dist/cli/commands/blueprint.d.ts +11 -0
  11. package/dist/cli/commands/blueprint.d.ts.map +1 -0
  12. package/dist/cli/commands/blueprint.js +210 -0
  13. package/dist/cli/commands/blueprint.js.map +1 -0
  14. package/dist/cli/commands/bootstrap.d.ts +11 -0
  15. package/dist/cli/commands/bootstrap.d.ts.map +1 -0
  16. package/dist/cli/commands/bootstrap.js +267 -0
  17. package/dist/cli/commands/bootstrap.js.map +1 -0
  18. package/dist/cli/commands/capture.d.ts +11 -0
  19. package/dist/cli/commands/capture.d.ts.map +1 -0
  20. package/dist/cli/commands/capture.js +109 -0
  21. package/dist/cli/commands/capture.js.map +1 -0
  22. package/dist/cli/commands/ci.d.ts +11 -0
  23. package/dist/cli/commands/ci.d.ts.map +1 -0
  24. package/dist/cli/commands/ci.js +144 -0
  25. package/dist/cli/commands/ci.js.map +1 -0
  26. package/dist/cli/commands/collab.d.ts +11 -0
  27. package/dist/cli/commands/collab.d.ts.map +1 -0
  28. package/dist/cli/commands/collab.js +196 -0
  29. package/dist/cli/commands/collab.js.map +1 -0
  30. package/dist/cli/commands/convert.d.ts +11 -0
  31. package/dist/cli/commands/convert.d.ts.map +1 -0
  32. package/dist/cli/commands/convert.js +219 -0
  33. package/dist/cli/commands/convert.js.map +1 -0
  34. package/dist/cli/commands/craft.d.ts +18 -0
  35. package/dist/cli/commands/craft.d.ts.map +1 -0
  36. package/dist/cli/commands/craft.js +205 -0
  37. package/dist/cli/commands/craft.js.map +1 -0
  38. package/dist/cli/commands/export.d.ts +9 -0
  39. package/dist/cli/commands/export.d.ts.map +1 -0
  40. package/dist/cli/commands/export.js +103 -0
  41. package/dist/cli/commands/export.js.map +1 -0
  42. package/dist/cli/commands/forge.d.ts +11 -0
  43. package/dist/cli/commands/forge.d.ts.map +1 -0
  44. package/dist/cli/commands/forge.js +152 -0
  45. package/dist/cli/commands/forge.js.map +1 -0
  46. package/dist/cli/commands/grid.d.ts +11 -0
  47. package/dist/cli/commands/grid.d.ts.map +1 -0
  48. package/dist/cli/commands/grid.js +217 -0
  49. package/dist/cli/commands/grid.js.map +1 -0
  50. package/dist/cli/commands/insight.d.ts +7 -0
  51. package/dist/cli/commands/insight.d.ts.map +1 -0
  52. package/dist/cli/commands/insight.js +71 -0
  53. package/dist/cli/commands/insight.js.map +1 -0
  54. package/dist/cli/commands/install.d.ts +6 -0
  55. package/dist/cli/commands/install.d.ts.map +1 -0
  56. package/dist/cli/commands/install.js +359 -0
  57. package/dist/cli/commands/install.js.map +1 -0
  58. package/dist/cli/commands/interactive.d.ts +7 -0
  59. package/dist/cli/commands/interactive.d.ts.map +1 -0
  60. package/dist/cli/commands/interactive.js +535 -0
  61. package/dist/cli/commands/interactive.js.map +1 -0
  62. package/dist/cli/commands/list.d.ts +6 -0
  63. package/dist/cli/commands/list.d.ts.map +1 -0
  64. package/dist/cli/commands/list.js +77 -0
  65. package/dist/cli/commands/list.js.map +1 -0
  66. package/dist/cli/commands/lockspec.d.ts +11 -0
  67. package/dist/cli/commands/lockspec.d.ts.map +1 -0
  68. package/dist/cli/commands/lockspec.js +179 -0
  69. package/dist/cli/commands/lockspec.js.map +1 -0
  70. package/dist/cli/commands/marketplace.d.ts +7 -0
  71. package/dist/cli/commands/marketplace.d.ts.map +1 -0
  72. package/dist/cli/commands/marketplace.js +417 -0
  73. package/dist/cli/commands/marketplace.js.map +1 -0
  74. package/dist/cli/commands/method.d.ts +7 -0
  75. package/dist/cli/commands/method.d.ts.map +1 -0
  76. package/dist/cli/commands/method.js +140 -0
  77. package/dist/cli/commands/method.js.map +1 -0
  78. package/dist/cli/commands/mine.d.ts +11 -0
  79. package/dist/cli/commands/mine.d.ts.map +1 -0
  80. package/dist/cli/commands/mine.js +254 -0
  81. package/dist/cli/commands/mine.js.map +1 -0
  82. package/dist/cli/commands/recall.d.ts +11 -0
  83. package/dist/cli/commands/recall.d.ts.map +1 -0
  84. package/dist/cli/commands/recall.js +201 -0
  85. package/dist/cli/commands/recall.js.map +1 -0
  86. package/dist/cli/commands/rule.d.ts +11 -0
  87. package/dist/cli/commands/rule.d.ts.map +1 -0
  88. package/dist/cli/commands/rule.js +230 -0
  89. package/dist/cli/commands/rule.js.map +1 -0
  90. package/dist/cli/commands/search.d.ts +6 -0
  91. package/dist/cli/commands/search.d.ts.map +1 -0
  92. package/dist/cli/commands/search.js +173 -0
  93. package/dist/cli/commands/search.js.map +1 -0
  94. package/dist/cli/commands/show.d.ts +6 -0
  95. package/dist/cli/commands/show.d.ts.map +1 -0
  96. package/dist/cli/commands/show.js +150 -0
  97. package/dist/cli/commands/show.js.map +1 -0
  98. package/dist/cli/commands/submit.d.ts +15 -0
  99. package/dist/cli/commands/submit.d.ts.map +1 -0
  100. package/dist/cli/commands/submit.js +151 -0
  101. package/dist/cli/commands/submit.js.map +1 -0
  102. package/dist/cli/commands/suggest.d.ts +11 -0
  103. package/dist/cli/commands/suggest.d.ts.map +1 -0
  104. package/dist/cli/commands/suggest.js +164 -0
  105. package/dist/cli/commands/suggest.js.map +1 -0
  106. package/dist/cli/commands/track.d.ts +11 -0
  107. package/dist/cli/commands/track.d.ts.map +1 -0
  108. package/dist/cli/commands/track.js +199 -0
  109. package/dist/cli/commands/track.js.map +1 -0
  110. package/dist/cli/commands/trigger.d.ts +11 -0
  111. package/dist/cli/commands/trigger.d.ts.map +1 -0
  112. package/dist/cli/commands/trigger.js +157 -0
  113. package/dist/cli/commands/trigger.js.map +1 -0
  114. package/dist/cli/commands/utils-commands.d.ts +9 -0
  115. package/dist/cli/commands/utils-commands.d.ts.map +1 -0
  116. package/dist/cli/commands/utils-commands.js +389 -0
  117. package/dist/cli/commands/utils-commands.js.map +1 -0
  118. package/dist/cli/commands/validate.d.ts +6 -0
  119. package/dist/cli/commands/validate.d.ts.map +1 -0
  120. package/dist/cli/commands/validate.js +40 -0
  121. package/dist/cli/commands/validate.js.map +1 -0
  122. package/dist/cli/index.d.ts +3 -0
  123. package/dist/cli/index.d.ts.map +1 -1
  124. package/dist/cli/index.js +84 -2743
  125. package/dist/cli/index.js.map +1 -1
  126. package/dist/core/audit.d.ts +24 -0
  127. package/dist/core/audit.d.ts.map +1 -0
  128. package/dist/core/audit.js +195 -0
  129. package/dist/core/audit.js.map +1 -0
  130. package/dist/core/index.d.ts +6 -0
  131. package/dist/core/index.d.ts.map +1 -1
  132. package/dist/core/index.js +6 -0
  133. package/dist/core/index.js.map +1 -1
  134. package/dist/core/scanner-rules.d.ts +58 -0
  135. package/dist/core/scanner-rules.d.ts.map +1 -0
  136. package/dist/core/scanner-rules.js +335 -0
  137. package/dist/core/scanner-rules.js.map +1 -0
  138. package/dist/core/suggest.d.ts +51 -0
  139. package/dist/core/suggest.d.ts.map +1 -0
  140. package/dist/core/suggest.js +241 -0
  141. package/dist/core/suggest.js.map +1 -0
  142. package/package.json +1 -1
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Submit Command
3
+ * Submit skills to the marketplace
4
+ * (SkillKit calls this "publish submit" — we call it "submit")
5
+ */
6
+ import chalk from 'chalk';
7
+ import ora from 'ora';
8
+ import { readFile, stat } from 'fs/promises';
9
+ import { existsSync } from 'fs';
10
+ import { resolve, join, basename } from 'path';
11
+ import { loadSkill, validateMetadata, validateBody } from '../../core/index.js';
12
+ // Supabase API for submission
13
+ const SUBMIT_API = 'https://www.agentskills.in/api/skills/submit';
14
+ /**
15
+ * Register the submit command with commander
16
+ */
17
+ export function registerSubmitCommand(program) {
18
+ program
19
+ .command('submit [path]')
20
+ .description('Submit a skill to the Agent Skills marketplace')
21
+ .option('-n, --dry-run', 'Preview what would be submitted without uploading')
22
+ .option('--name <name>', 'Custom skill name (overrides SKILL.md name)')
23
+ .action(async (path, options) => {
24
+ try {
25
+ await submitCommand(path || '.', options);
26
+ }
27
+ catch (err) {
28
+ console.error(chalk.red('Error:'), err.message);
29
+ process.exit(1);
30
+ }
31
+ });
32
+ }
33
+ /**
34
+ * Run the submit command
35
+ */
36
+ async function submitCommand(targetPath, options) {
37
+ const resolvedPath = resolve(targetPath);
38
+ // Step 1: Find and validate SKILL.md
39
+ const spinner = ora('Validating skill...').start();
40
+ let skillMdPath;
41
+ const pathStat = await stat(resolvedPath);
42
+ if (pathStat.isDirectory()) {
43
+ skillMdPath = join(resolvedPath, 'SKILL.md');
44
+ }
45
+ else {
46
+ skillMdPath = resolvedPath;
47
+ }
48
+ if (!existsSync(skillMdPath)) {
49
+ spinner.fail('No SKILL.md found');
50
+ console.log(chalk.dim(` Looked in: ${skillMdPath}`));
51
+ console.log(chalk.dim(` Create one with: ${chalk.white('skills craft <name>')}`));
52
+ process.exit(1);
53
+ }
54
+ // Load and validate
55
+ const skillContent = await readFile(skillMdPath, 'utf-8');
56
+ let skill;
57
+ try {
58
+ skill = await loadSkill(pathStat.isDirectory() ? resolvedPath : resolve(resolvedPath, '..'));
59
+ }
60
+ catch (err) {
61
+ spinner.fail(`Failed to load skill: ${err.message}`);
62
+ process.exit(1);
63
+ }
64
+ if (!skill) {
65
+ spinner.fail('Could not parse skill from SKILL.md');
66
+ process.exit(1);
67
+ }
68
+ // Validate metadata
69
+ const metaResult = validateMetadata(skill.metadata);
70
+ if (!metaResult.valid) {
71
+ spinner.fail('Skill validation failed');
72
+ console.log('');
73
+ for (const error of metaResult.errors) {
74
+ console.log(` ${chalk.red('✖')} ${error.message}`);
75
+ }
76
+ console.log('');
77
+ console.log(chalk.dim('Fix validation errors before submitting.'));
78
+ process.exit(1);
79
+ }
80
+ // Validate body
81
+ const bodyResult = validateBody(skill.body);
82
+ if (!bodyResult.valid) {
83
+ spinner.warn('Skill has body warnings');
84
+ for (const warning of bodyResult.warnings || []) {
85
+ console.log(` ${chalk.yellow('⚠')} ${warning.message}`);
86
+ }
87
+ }
88
+ spinner.succeed('Skill validated');
89
+ console.log('');
90
+ // Step 2: Extract metadata
91
+ const skillName = options.name || skill.metadata?.name || basename(resolvedPath);
92
+ const description = skill.metadata?.description || '';
93
+ const tags = skill.metadata?.metadata?.tags || [];
94
+ const version = skill.metadata?.metadata?.version || '1.0.0';
95
+ // Display submission preview
96
+ console.log(chalk.bold('📦 Submission Preview:'));
97
+ console.log(` ${chalk.dim('Name:')} ${chalk.cyan(skillName)}`);
98
+ console.log(` ${chalk.dim('Description:')} ${description || chalk.yellow('(none)')}`);
99
+ console.log(` ${chalk.dim('Version:')} ${version}`);
100
+ console.log(` ${chalk.dim('Tags:')} ${tags.length > 0 ? tags.join(', ') : chalk.yellow('(none)')}`);
101
+ console.log(` ${chalk.dim('Content:')} ${skillContent.split('\n').length} lines`);
102
+ console.log('');
103
+ if (options.dryRun) {
104
+ console.log(chalk.yellow('🏃 Dry run — skill was NOT submitted'));
105
+ console.log(chalk.dim(' Remove --dry-run to submit for real'));
106
+ return;
107
+ }
108
+ // Step 3: Submit to marketplace
109
+ const submitSpinner = ora('Submitting to marketplace...').start();
110
+ try {
111
+ const response = await fetch(SUBMIT_API, {
112
+ method: 'POST',
113
+ headers: { 'Content-Type': 'application/json' },
114
+ body: JSON.stringify({
115
+ name: skillName,
116
+ description,
117
+ tags,
118
+ version,
119
+ content: skillContent,
120
+ source: resolvedPath,
121
+ }),
122
+ });
123
+ if (response.ok) {
124
+ const data = await response.json();
125
+ submitSpinner.succeed('Submitted successfully!');
126
+ console.log('');
127
+ console.log(chalk.green('✨ Your skill has been submitted for review!'));
128
+ if (data?.url) {
129
+ console.log(chalk.dim(` View at: ${chalk.white(data.url)}`));
130
+ }
131
+ console.log(chalk.dim(` Status: Pending review`));
132
+ }
133
+ else {
134
+ const errorText = await response.text();
135
+ submitSpinner.fail('Submission failed');
136
+ console.log(chalk.red(` Server responded: ${response.status} ${errorText}`));
137
+ console.log('');
138
+ console.log(chalk.dim('If this persists, submit via GitHub:'));
139
+ console.log(chalk.dim(' https://github.com/Karanjot786/agent-skills-cli/issues/new'));
140
+ }
141
+ }
142
+ catch (err) {
143
+ submitSpinner.fail('Could not reach marketplace API');
144
+ console.log(chalk.dim(` ${err.message}`));
145
+ console.log('');
146
+ console.log(chalk.dim('Alternative: Submit via GitHub issue:'));
147
+ console.log(chalk.dim(` ${chalk.white('https://github.com/Karanjot786/agent-skills-cli/issues/new')}`));
148
+ }
149
+ console.log('');
150
+ }
151
+ //# sourceMappingURL=submit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit.js","sourceRoot":"","sources":["../../../src/cli/commands/submit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Suggest Command
3
+ * Project-aware skill recommendations based on tech stack analysis
4
+ * (SkillKit calls this "recommend" — we call it "suggest")
5
+ */
6
+ import { Command } from 'commander';
7
+ /**
8
+ * Register the suggest command with commander
9
+ */
10
+ export declare function registerSuggestCommand(program: Command): void;
11
+ //# sourceMappingURL=suggest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/suggest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4B7D"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Suggest Command
3
+ * Project-aware skill recommendations based on tech stack analysis
4
+ * (SkillKit calls this "recommend" — we call it "suggest")
5
+ */
6
+ import chalk from 'chalk';
7
+ import ora from 'ora';
8
+ import { analyzeProject, buildSearchKeywords, scoreSkill } from '../../core/suggest.js';
9
+ import { fetchSkillsForCLI } from '../../core/skillsdb.js';
10
+ /**
11
+ * Register the suggest command with commander
12
+ */
13
+ export function registerSuggestCommand(program) {
14
+ program
15
+ .command('suggest')
16
+ .alias('sg')
17
+ .description('Get skill suggestions based on your project\'s tech stack')
18
+ .option('-l, --limit <n>', 'Maximum number of suggestions', '10')
19
+ .option('-m, --min-score <n>', 'Minimum match score (0-100)', '20')
20
+ .option('-c, --category <cat>', 'Filter by category')
21
+ .option('-t, --task <query>', 'Search skills by task description')
22
+ .option('-v, --verbose', 'Show detailed match reasons')
23
+ .option('-j, --json', 'Output in JSON format')
24
+ .option('-p, --path <dir>', 'Project path (default: current directory)')
25
+ .action(async (options) => {
26
+ try {
27
+ await suggestCommand({
28
+ limit: parseInt(options.limit) || 10,
29
+ minScore: parseInt(options.minScore) || 20,
30
+ category: options.category,
31
+ task: options.task,
32
+ verbose: options.verbose || false,
33
+ json: options.json || false,
34
+ path: options.path || process.cwd(),
35
+ });
36
+ }
37
+ catch (err) {
38
+ console.error(chalk.red('Error:'), err.message);
39
+ process.exit(1);
40
+ }
41
+ });
42
+ }
43
+ /**
44
+ * Run the suggest command
45
+ */
46
+ async function suggestCommand(options) {
47
+ const projectPath = options.path || process.cwd();
48
+ // Step 1: Analyze project
49
+ const spinner = ora('Analyzing your project...').start();
50
+ const analysis = await analyzeProject(projectPath);
51
+ if (analysis.languages.length === 0 && analysis.frameworks.length === 0) {
52
+ spinner.warn('Could not detect project tech stack. Try running from a project directory.');
53
+ return;
54
+ }
55
+ spinner.text = 'Building search queries...';
56
+ const keywords = buildSearchKeywords(analysis, options.task);
57
+ // Show analysis
58
+ spinner.succeed('Project analyzed');
59
+ console.log('');
60
+ if (!options.json) {
61
+ console.log(chalk.bold('📊 Detected Tech Stack:'));
62
+ if (analysis.languages.length > 0) {
63
+ console.log(` ${chalk.dim('Languages:')} ${analysis.languages.join(', ')}`);
64
+ }
65
+ if (analysis.frameworks.length > 0) {
66
+ console.log(` ${chalk.dim('Frameworks:')} ${analysis.frameworks.join(', ')}`);
67
+ }
68
+ if (analysis.libraries.length > 0) {
69
+ console.log(` ${chalk.dim('Libraries:')} ${analysis.libraries.join(', ')}`);
70
+ }
71
+ if (analysis.testTools.length > 0) {
72
+ console.log(` ${chalk.dim('Testing:')} ${analysis.testTools.join(', ')}`);
73
+ }
74
+ if (analysis.buildTools.length > 0) {
75
+ console.log(` ${chalk.dim('Build:')} ${analysis.buildTools.join(', ')}`);
76
+ }
77
+ console.log('');
78
+ }
79
+ // Step 2: Fetch skills from DB
80
+ const spinner2 = ora('Searching 67K+ skills for matches...').start();
81
+ // Build multiple search queries from keywords
82
+ const searchQueries = keywords.slice(0, 5); // Top 5 keywords
83
+ const allSkills = [];
84
+ const seenIds = new Set();
85
+ for (const query of searchQueries) {
86
+ try {
87
+ const result = await fetchSkillsForCLI({
88
+ search: query,
89
+ limit: 50,
90
+ });
91
+ if (result?.skills) {
92
+ for (const skill of result.skills) {
93
+ if (!seenIds.has(skill.scopedName)) {
94
+ seenIds.add(skill.scopedName);
95
+ allSkills.push(skill);
96
+ }
97
+ }
98
+ }
99
+ }
100
+ catch {
101
+ // Continue with other queries if one fails
102
+ }
103
+ }
104
+ if (allSkills.length === 0) {
105
+ spinner2.warn('No skills found matching your project. Try using --task to search by task.');
106
+ return;
107
+ }
108
+ // Step 3: Score and rank skills
109
+ const suggestions = allSkills
110
+ .map(skill => {
111
+ const { score, reasons } = scoreSkill({ name: skill.name, description: skill.description || '', stars: skill.stars || 0 }, analysis, keywords);
112
+ return {
113
+ name: skill.name,
114
+ author: skill.author,
115
+ scopedName: skill.scoped_name || `@${skill.author}/${skill.name}`,
116
+ description: skill.description || '',
117
+ score,
118
+ matchReasons: reasons,
119
+ githubUrl: skill.github_url || '',
120
+ stars: skill.stars || 0,
121
+ };
122
+ })
123
+ .filter(s => s.score >= (options.minScore || 20))
124
+ .sort((a, b) => b.score - a.score)
125
+ .slice(0, options.limit || 10);
126
+ spinner2.succeed(`Found ${suggestions.length} matching skills`);
127
+ console.log('');
128
+ // Step 4: Display results
129
+ if (options.json) {
130
+ console.log(JSON.stringify(suggestions, null, 2));
131
+ return;
132
+ }
133
+ if (suggestions.length === 0) {
134
+ console.log(chalk.yellow('No skills matched with sufficient confidence. Try lowering --min-score.'));
135
+ return;
136
+ }
137
+ const stackLabel = [...analysis.frameworks, ...analysis.languages].slice(0, 3).join(' + ');
138
+ console.log(chalk.bold(`🎯 Skill Suggestions for your project (${stackLabel})`));
139
+ console.log('');
140
+ for (const suggestion of suggestions) {
141
+ const scoreColor = suggestion.score >= 80
142
+ ? chalk.green
143
+ : suggestion.score >= 50
144
+ ? chalk.yellow
145
+ : chalk.dim;
146
+ const starsStr = suggestion.stars > 0 ? chalk.dim(` ★${suggestion.stars}`) : '';
147
+ const scoreStr = scoreColor(`${suggestion.score}%`.padStart(4));
148
+ console.log(` ${scoreStr} ${chalk.cyan(suggestion.scopedName.padEnd(40))} ${chalk.dim(truncate(suggestion.description, 50))}${starsStr}`);
149
+ if (options.verbose && suggestion.matchReasons.length > 0) {
150
+ for (const reason of suggestion.matchReasons) {
151
+ console.log(` ${chalk.dim('↳')} ${chalk.dim(reason)}`);
152
+ }
153
+ }
154
+ }
155
+ console.log('');
156
+ console.log(chalk.dim(` Install: ${chalk.white('skills install <name>')}`));
157
+ console.log('');
158
+ }
159
+ function truncate(str, maxLen) {
160
+ if (str.length <= maxLen)
161
+ return str;
162
+ return str.slice(0, maxLen - 1) + '…';
163
+ }
164
+ //# sourceMappingURL=suggest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../../src/cli/commands/suggest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Track Command
3
+ * Session state tracking — save/restore working context
4
+ * (SkillKit calls this "session" — we call it "track")
5
+ */
6
+ import { Command } from 'commander';
7
+ /**
8
+ * Register the track command
9
+ */
10
+ export declare function registerTrackCommand(program: Command): void;
11
+ //# sourceMappingURL=track.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/track.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoC3D"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Track Command
3
+ * Session state tracking — save/restore working context
4
+ * (SkillKit calls this "session" — we call it "track")
5
+ */
6
+ import chalk from 'chalk';
7
+ import { readFile, writeFile, mkdir, readdir } from 'fs/promises';
8
+ import { existsSync } from 'fs';
9
+ import { join } from 'path';
10
+ import { homedir } from 'os';
11
+ const SESSIONS_DIR = join(homedir(), '.agent-skills', 'sessions');
12
+ /**
13
+ * Register the track command
14
+ */
15
+ export function registerTrackCommand(program) {
16
+ const track = program
17
+ .command('track')
18
+ .alias('tk')
19
+ .description('Session state tracking');
20
+ track.command('save <name>')
21
+ .description('Save current session state')
22
+ .option('-n, --notes <notes>', 'Add session notes')
23
+ .action(async (name, options) => {
24
+ try {
25
+ await trackSave(name, options.notes);
26
+ }
27
+ catch (err) {
28
+ console.error(chalk.red('Error:'), err.message);
29
+ process.exit(1);
30
+ }
31
+ });
32
+ track.command('restore <name>')
33
+ .description('Restore a saved session')
34
+ .action(async (name) => {
35
+ try {
36
+ await trackRestore(name);
37
+ }
38
+ catch (err) {
39
+ console.error(chalk.red('Error:'), err.message);
40
+ process.exit(1);
41
+ }
42
+ });
43
+ track.command('list')
44
+ .description('List saved sessions')
45
+ .action(async () => {
46
+ try {
47
+ await trackList();
48
+ }
49
+ catch (err) {
50
+ console.error(chalk.red('Error:'), err.message);
51
+ process.exit(1);
52
+ }
53
+ });
54
+ track.command('show <name>')
55
+ .description('Show session details')
56
+ .action(async (name) => {
57
+ try {
58
+ await trackShow(name);
59
+ }
60
+ catch (err) {
61
+ console.error(chalk.red('Error:'), err.message);
62
+ process.exit(1);
63
+ }
64
+ });
65
+ track.command('delete <name>')
66
+ .description('Delete a saved session')
67
+ .action(async (name) => {
68
+ try {
69
+ await trackDelete(name);
70
+ }
71
+ catch (err) {
72
+ console.error(chalk.red('Error:'), err.message);
73
+ process.exit(1);
74
+ }
75
+ });
76
+ }
77
+ function getSessionPath(name) {
78
+ return join(SESSIONS_DIR, `${name}.json`);
79
+ }
80
+ async function trackSave(name, notes) {
81
+ await mkdir(SESSIONS_DIR, { recursive: true });
82
+ // Get current git branch
83
+ let branch;
84
+ try {
85
+ const { execSync } = await import('child_process');
86
+ branch = execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
87
+ }
88
+ catch { /* not in git repo */ }
89
+ // Get recently modified files
90
+ let activeFiles = [];
91
+ try {
92
+ const { execSync } = await import('child_process');
93
+ const result = execSync('git diff --name-only HEAD 2>/dev/null || true', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
94
+ activeFiles = result.trim().split('\n').filter(Boolean).slice(0, 20);
95
+ }
96
+ catch { /* ignore */ }
97
+ const snapshot = {
98
+ id: Date.now().toString(36),
99
+ name,
100
+ cwd: process.cwd(),
101
+ branch,
102
+ timestamp: new Date().toISOString(),
103
+ notes,
104
+ activeFiles,
105
+ env: {
106
+ NODE_ENV: process.env.NODE_ENV || '',
107
+ },
108
+ };
109
+ await writeFile(getSessionPath(name), JSON.stringify(snapshot, null, 2));
110
+ console.log(chalk.green(`✓ Session saved: ${chalk.cyan(name)}`));
111
+ if (branch)
112
+ console.log(chalk.dim(` Branch: ${branch}`));
113
+ if (activeFiles.length > 0)
114
+ console.log(chalk.dim(` Active files: ${activeFiles.length}`));
115
+ }
116
+ async function trackRestore(name) {
117
+ const path = getSessionPath(name);
118
+ if (!existsSync(path)) {
119
+ console.error(chalk.red(`Session "${name}" not found`));
120
+ process.exit(1);
121
+ }
122
+ const snapshot = JSON.parse(await readFile(path, 'utf-8'));
123
+ console.log('');
124
+ console.log(chalk.bold(`🔄 Restoring session: ${chalk.cyan(name)}`));
125
+ console.log('');
126
+ console.log(` ${chalk.dim('Directory:')} ${snapshot.cwd}`);
127
+ if (snapshot.branch)
128
+ console.log(` ${chalk.dim('Branch:')} ${snapshot.branch}`);
129
+ if (snapshot.notes)
130
+ console.log(` ${chalk.dim('Notes:')} ${snapshot.notes}`);
131
+ if (snapshot.activeFiles.length > 0) {
132
+ console.log('');
133
+ console.log(chalk.dim(' Active files:'));
134
+ for (const f of snapshot.activeFiles) {
135
+ console.log(` ${chalk.cyan('•')} ${f}`);
136
+ }
137
+ }
138
+ if (snapshot.branch) {
139
+ console.log('');
140
+ console.log(chalk.dim(` To switch branch: git checkout ${snapshot.branch}`));
141
+ }
142
+ console.log('');
143
+ }
144
+ async function trackList() {
145
+ await mkdir(SESSIONS_DIR, { recursive: true });
146
+ const files = await readdir(SESSIONS_DIR);
147
+ const sessions = files.filter(f => f.endsWith('.json'));
148
+ if (sessions.length === 0) {
149
+ console.log(chalk.dim('No saved sessions.'));
150
+ console.log(chalk.dim(' Save one: skills track save "my-session"'));
151
+ return;
152
+ }
153
+ console.log('');
154
+ console.log(chalk.bold(`📍 Saved Sessions (${sessions.length})`));
155
+ console.log('');
156
+ for (const file of sessions) {
157
+ try {
158
+ const snapshot = JSON.parse(await readFile(join(SESSIONS_DIR, file), 'utf-8'));
159
+ const age = timeAgo(new Date(snapshot.timestamp));
160
+ console.log(` ${chalk.cyan('●')} ${chalk.bold(snapshot.name)} ${chalk.dim(`(${age})`)}`);
161
+ if (snapshot.branch)
162
+ console.log(` ${chalk.dim('branch:')} ${snapshot.branch}`);
163
+ if (snapshot.notes)
164
+ console.log(` ${chalk.dim('notes:')} ${snapshot.notes}`);
165
+ }
166
+ catch { /* skip corrupt files */ }
167
+ }
168
+ console.log('');
169
+ }
170
+ async function trackShow(name) {
171
+ const path = getSessionPath(name);
172
+ if (!existsSync(path)) {
173
+ console.error(chalk.red(`Session "${name}" not found`));
174
+ return;
175
+ }
176
+ const snapshot = JSON.parse(await readFile(path, 'utf-8'));
177
+ console.log(JSON.stringify(snapshot, null, 2));
178
+ }
179
+ async function trackDelete(name) {
180
+ const path = getSessionPath(name);
181
+ if (!existsSync(path)) {
182
+ console.error(chalk.red(`Session "${name}" not found`));
183
+ return;
184
+ }
185
+ const { unlink } = await import('fs/promises');
186
+ await unlink(path);
187
+ console.log(chalk.green(`✓ Deleted session: ${name}`));
188
+ }
189
+ function timeAgo(date) {
190
+ const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
191
+ if (seconds < 60)
192
+ return `${seconds}s ago`;
193
+ if (seconds < 3600)
194
+ return `${Math.floor(seconds / 60)}m ago`;
195
+ if (seconds < 86400)
196
+ return `${Math.floor(seconds / 3600)}h ago`;
197
+ return `${Math.floor(seconds / 86400)}d ago`;
198
+ }
199
+ //# sourceMappingURL=track.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track.js","sourceRoot":"","sources":["../../../src/cli/commands/track.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Trigger Command
3
+ * Auto-trigger skills on file/event changes
4
+ * (SkillKit calls this "workflow" — we call it "trigger")
5
+ */
6
+ import { Command } from 'commander';
7
+ /**
8
+ * Register the trigger command
9
+ */
10
+ export declare function registerTriggerCommand(program: Command): void;
11
+ //# sourceMappingURL=trigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/trigger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsD7D"}