@skillsmith/cli 0.6.2 → 0.6.4

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 (210) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/commands/__meta__/telemetry-coverage.test.d.ts +20 -0
  4. package/dist/src/commands/__meta__/telemetry-coverage.test.d.ts.map +1 -0
  5. package/dist/src/commands/__meta__/telemetry-coverage.test.js +118 -0
  6. package/dist/src/commands/__meta__/telemetry-coverage.test.js.map +1 -0
  7. package/dist/src/commands/ab-test.d.ts +1 -0
  8. package/dist/src/commands/ab-test.d.ts.map +1 -1
  9. package/dist/src/commands/ab-test.js +17 -8
  10. package/dist/src/commands/ab-test.js.map +1 -1
  11. package/dist/src/commands/analyze.d.ts +1 -0
  12. package/dist/src/commands/analyze.d.ts.map +1 -1
  13. package/dist/src/commands/analyze.js +32 -23
  14. package/dist/src/commands/analyze.js.map +1 -1
  15. package/dist/src/commands/audit-collisions.d.ts +1 -4
  16. package/dist/src/commands/audit-collisions.d.ts.map +1 -1
  17. package/dist/src/commands/audit-collisions.js +32 -23
  18. package/dist/src/commands/audit-collisions.js.map +1 -1
  19. package/dist/src/commands/audit-sources.action.d.ts +37 -0
  20. package/dist/src/commands/audit-sources.action.d.ts.map +1 -0
  21. package/dist/src/commands/audit-sources.action.js +300 -0
  22. package/dist/src/commands/audit-sources.action.js.map +1 -0
  23. package/dist/src/commands/audit-sources.d.ts +37 -0
  24. package/dist/src/commands/audit-sources.d.ts.map +1 -0
  25. package/dist/src/commands/audit-sources.js +55 -0
  26. package/dist/src/commands/audit-sources.js.map +1 -0
  27. package/dist/src/commands/audit-sources.test.d.ts +9 -0
  28. package/dist/src/commands/audit-sources.test.d.ts.map +1 -0
  29. package/dist/src/commands/audit-sources.test.js +228 -0
  30. package/dist/src/commands/audit-sources.test.js.map +1 -0
  31. package/dist/src/commands/audit.d.ts +2 -6
  32. package/dist/src/commands/audit.d.ts.map +1 -1
  33. package/dist/src/commands/audit.js +52 -31
  34. package/dist/src/commands/audit.js.map +1 -1
  35. package/dist/src/commands/author/index.d.ts +2 -1
  36. package/dist/src/commands/author/index.d.ts.map +1 -1
  37. package/dist/src/commands/author/index.js +4 -1
  38. package/dist/src/commands/author/index.js.map +1 -1
  39. package/dist/src/commands/author/init.action.d.ts +29 -0
  40. package/dist/src/commands/author/init.action.d.ts.map +1 -0
  41. package/dist/src/commands/author/init.action.js +131 -0
  42. package/dist/src/commands/author/init.action.js.map +1 -0
  43. package/dist/src/commands/author/init.d.ts +0 -14
  44. package/dist/src/commands/author/init.d.ts.map +1 -1
  45. package/dist/src/commands/author/init.js +3 -87
  46. package/dist/src/commands/author/init.js.map +1 -1
  47. package/dist/src/commands/author/mcp-init.d.ts +1 -0
  48. package/dist/src/commands/author/mcp-init.d.ts.map +1 -1
  49. package/dist/src/commands/author/mcp-init.js +21 -13
  50. package/dist/src/commands/author/mcp-init.js.map +1 -1
  51. package/dist/src/commands/author/subagent.d.ts +1 -0
  52. package/dist/src/commands/author/subagent.d.ts.map +1 -1
  53. package/dist/src/commands/author/subagent.js +23 -15
  54. package/dist/src/commands/author/subagent.js.map +1 -1
  55. package/dist/src/commands/author/transform.d.ts +1 -0
  56. package/dist/src/commands/author/transform.d.ts.map +1 -1
  57. package/dist/src/commands/author/transform.js +23 -15
  58. package/dist/src/commands/author/transform.js.map +1 -1
  59. package/dist/src/commands/config.d.ts +2 -0
  60. package/dist/src/commands/config.d.ts.map +1 -1
  61. package/dist/src/commands/config.js +43 -28
  62. package/dist/src/commands/config.js.map +1 -1
  63. package/dist/src/commands/create.d.ts +1 -0
  64. package/dist/src/commands/create.d.ts.map +1 -1
  65. package/dist/src/commands/create.js +28 -19
  66. package/dist/src/commands/create.js.map +1 -1
  67. package/dist/src/commands/diff.d.ts +4 -0
  68. package/dist/src/commands/diff.d.ts.map +1 -1
  69. package/dist/src/commands/diff.js +57 -42
  70. package/dist/src/commands/diff.js.map +1 -1
  71. package/dist/src/commands/diff.test.js +30 -0
  72. package/dist/src/commands/diff.test.js.map +1 -1
  73. package/dist/src/commands/import-local.d.ts +7 -0
  74. package/dist/src/commands/import-local.d.ts.map +1 -1
  75. package/dist/src/commands/import-local.js +43 -34
  76. package/dist/src/commands/import-local.js.map +1 -1
  77. package/dist/src/commands/import.d.ts +6 -0
  78. package/dist/src/commands/import.d.ts.map +1 -1
  79. package/dist/src/commands/import.js +23 -14
  80. package/dist/src/commands/import.js.map +1 -1
  81. package/dist/src/commands/index.d.ts +1 -0
  82. package/dist/src/commands/index.d.ts.map +1 -1
  83. package/dist/src/commands/index.js +2 -0
  84. package/dist/src/commands/index.js.map +1 -1
  85. package/dist/src/commands/info.d.ts +7 -0
  86. package/dist/src/commands/info.d.ts.map +1 -1
  87. package/dist/src/commands/info.js +77 -68
  88. package/dist/src/commands/info.js.map +1 -1
  89. package/dist/src/commands/install-skill.d.ts +3 -0
  90. package/dist/src/commands/install-skill.d.ts.map +1 -1
  91. package/dist/src/commands/install-skill.js +23 -15
  92. package/dist/src/commands/install-skill.js.map +1 -1
  93. package/dist/src/commands/install.d.ts +21 -0
  94. package/dist/src/commands/install.d.ts.map +1 -1
  95. package/dist/src/commands/install.js +154 -139
  96. package/dist/src/commands/install.js.map +1 -1
  97. package/dist/src/commands/login.d.ts +4 -0
  98. package/dist/src/commands/login.d.ts.map +1 -1
  99. package/dist/src/commands/login.js +56 -47
  100. package/dist/src/commands/login.js.map +1 -1
  101. package/dist/src/commands/logout.d.ts +1 -0
  102. package/dist/src/commands/logout.d.ts.map +1 -1
  103. package/dist/src/commands/logout.js +36 -27
  104. package/dist/src/commands/logout.js.map +1 -1
  105. package/dist/src/commands/manage.d.ts +3 -9
  106. package/dist/src/commands/manage.d.ts.map +1 -1
  107. package/dist/src/commands/manage.js +69 -45
  108. package/dist/src/commands/manage.js.map +1 -1
  109. package/dist/src/commands/merge.d.ts +7 -0
  110. package/dist/src/commands/merge.d.ts.map +1 -1
  111. package/dist/src/commands/merge.js +117 -108
  112. package/dist/src/commands/merge.js.map +1 -1
  113. package/dist/src/commands/pin.d.ts +2 -0
  114. package/dist/src/commands/pin.d.ts.map +1 -1
  115. package/dist/src/commands/pin.js +88 -73
  116. package/dist/src/commands/pin.js.map +1 -1
  117. package/dist/src/commands/recommend.d.ts +1 -0
  118. package/dist/src/commands/recommend.d.ts.map +1 -1
  119. package/dist/src/commands/recommend.js +35 -27
  120. package/dist/src/commands/recommend.js.map +1 -1
  121. package/dist/src/commands/search-formatters.d.ts +1 -0
  122. package/dist/src/commands/search-formatters.d.ts.map +1 -1
  123. package/dist/src/commands/search-formatters.js +3 -0
  124. package/dist/src/commands/search-formatters.js.map +1 -1
  125. package/dist/src/commands/search.action.d.ts +16 -0
  126. package/dist/src/commands/search.action.d.ts.map +1 -0
  127. package/dist/src/commands/search.action.js +384 -0
  128. package/dist/src/commands/search.action.js.map +1 -0
  129. package/dist/src/commands/search.d.ts +3 -0
  130. package/dist/src/commands/search.d.ts.map +1 -1
  131. package/dist/src/commands/search.js +5 -343
  132. package/dist/src/commands/search.js.map +1 -1
  133. package/dist/src/commands/sync.action.d.ts +39 -0
  134. package/dist/src/commands/sync.action.d.ts.map +1 -0
  135. package/dist/src/commands/sync.action.js +353 -0
  136. package/dist/src/commands/sync.action.js.map +1 -0
  137. package/dist/src/commands/sync.d.ts +3 -0
  138. package/dist/src/commands/sync.d.ts.map +1 -1
  139. package/dist/src/commands/sync.js +8 -310
  140. package/dist/src/commands/sync.js.map +1 -1
  141. package/dist/src/commands/telemetry.action.d.ts +38 -0
  142. package/dist/src/commands/telemetry.action.d.ts.map +1 -0
  143. package/dist/src/commands/telemetry.action.js +350 -0
  144. package/dist/src/commands/telemetry.action.js.map +1 -0
  145. package/dist/src/commands/telemetry.d.ts +30 -0
  146. package/dist/src/commands/telemetry.d.ts.map +1 -0
  147. package/dist/src/commands/telemetry.helpers.d.ts +58 -0
  148. package/dist/src/commands/telemetry.helpers.d.ts.map +1 -0
  149. package/dist/src/commands/telemetry.helpers.js +173 -0
  150. package/dist/src/commands/telemetry.helpers.js.map +1 -0
  151. package/dist/src/commands/telemetry.helpers.test.d.ts +15 -0
  152. package/dist/src/commands/telemetry.helpers.test.d.ts.map +1 -0
  153. package/dist/src/commands/telemetry.helpers.test.js +240 -0
  154. package/dist/src/commands/telemetry.helpers.test.js.map +1 -0
  155. package/dist/src/commands/telemetry.js +65 -0
  156. package/dist/src/commands/telemetry.js.map +1 -0
  157. package/dist/src/commands/telemetry.test.d.ts +18 -0
  158. package/dist/src/commands/telemetry.test.d.ts.map +1 -0
  159. package/dist/src/commands/telemetry.test.js +401 -0
  160. package/dist/src/commands/telemetry.test.js.map +1 -0
  161. package/dist/src/commands/whoami.d.ts +1 -0
  162. package/dist/src/commands/whoami.d.ts.map +1 -1
  163. package/dist/src/commands/whoami.js +29 -21
  164. package/dist/src/commands/whoami.js.map +1 -1
  165. package/dist/src/index.js +3 -1
  166. package/dist/src/index.js.map +1 -1
  167. package/dist/src/utils/manifest.d.ts +75 -0
  168. package/dist/src/utils/manifest.d.ts.map +1 -1
  169. package/dist/src/utils/manifest.js +78 -0
  170. package/dist/src/utils/manifest.js.map +1 -1
  171. package/dist/src/utils/manifest.test.d.ts +20 -0
  172. package/dist/src/utils/manifest.test.d.ts.map +1 -0
  173. package/dist/src/utils/manifest.test.js +344 -0
  174. package/dist/src/utils/manifest.test.js.map +1 -0
  175. package/dist/src/utils/open-database.d.ts +10 -2
  176. package/dist/src/utils/open-database.d.ts.map +1 -1
  177. package/dist/src/utils/open-database.js +15 -2
  178. package/dist/src/utils/open-database.js.map +1 -1
  179. package/dist/src/utils/skills-directory.d.ts.map +1 -1
  180. package/dist/src/utils/skills-directory.js +5 -1
  181. package/dist/src/utils/skills-directory.js.map +1 -1
  182. package/dist/tests/e2e/audit-sources-apply.test.d.ts +13 -0
  183. package/dist/tests/e2e/audit-sources-apply.test.d.ts.map +1 -0
  184. package/dist/tests/e2e/audit-sources-apply.test.js +166 -0
  185. package/dist/tests/e2e/audit-sources-apply.test.js.map +1 -0
  186. package/dist/tests/e2e/audit-sources-recovery.test.d.ts +15 -0
  187. package/dist/tests/e2e/audit-sources-recovery.test.d.ts.map +1 -0
  188. package/dist/tests/e2e/audit-sources-recovery.test.js +179 -0
  189. package/dist/tests/e2e/audit-sources-recovery.test.js.map +1 -0
  190. package/dist/tests/e2e/audit-sources-roundtrip.test.d.ts +23 -0
  191. package/dist/tests/e2e/audit-sources-roundtrip.test.d.ts.map +1 -0
  192. package/dist/tests/e2e/audit-sources-roundtrip.test.js +107 -0
  193. package/dist/tests/e2e/audit-sources-roundtrip.test.js.map +1 -0
  194. package/dist/tests/e2e/utils/source-recovery-fixture.d.ts +49 -0
  195. package/dist/tests/e2e/utils/source-recovery-fixture.d.ts.map +1 -0
  196. package/dist/tests/e2e/utils/source-recovery-fixture.js +106 -0
  197. package/dist/tests/e2e/utils/source-recovery-fixture.js.map +1 -0
  198. package/dist/tests/embedding-probe-stdio.test.d.ts +11 -0
  199. package/dist/tests/embedding-probe-stdio.test.d.ts.map +1 -0
  200. package/dist/tests/embedding-probe-stdio.test.js +58 -0
  201. package/dist/tests/embedding-probe-stdio.test.js.map +1 -0
  202. package/dist/tests/init.test.js +2 -1
  203. package/dist/tests/init.test.js.map +1 -1
  204. package/dist/tests/install-quarantine.test.d.ts +10 -0
  205. package/dist/tests/install-quarantine.test.d.ts.map +1 -0
  206. package/dist/tests/install-quarantine.test.js +86 -0
  207. package/dist/tests/install-quarantine.test.js.map +1 -0
  208. package/package.json +5 -5
  209. package/templates/skill-telemetry.cmd +16 -0
  210. package/templates/skill-telemetry.sh +199 -0
@@ -2,269 +2,15 @@
2
2
  * SMI-744: Interactive Search Mode
3
3
  *
4
4
  * Provides interactive CLI for searching skills with filters and pagination.
5
+ *
6
+ * SMI-5127: Action implementation moved to search.action.ts.
7
+ * This file retains only the commander factory function and re-exports.
5
8
  */
6
9
  import { Command } from 'commander';
7
- import { input, checkbox, number, select } from '@inquirer/prompts';
8
- import chalk from 'chalk';
9
- import ora from 'ora';
10
- import { SearchService, SkillRepository, SkillDependencyRepository, SkillInstallationService, } from '@skillsmith/core';
11
- import { openCliDatabase } from '../utils/open-database.js';
12
- import { autoSyncIfEmpty, isLocalIndexEmpty, formatEmptyIndexHint } from './search.helpers.js';
13
10
  import { DEFAULT_DB_PATH } from '../config.js';
14
- import { sanitizeError } from '../utils/sanitize.js';
15
- import { PAGE_SIZE } from './search-types.js';
16
- import { TRUST_TIER_COLORS, displayResults, displaySkillDetails } from './search-formatters.js';
11
+ import { searchAction } from './search.action.js';
17
12
  export { PAGE_SIZE } from './search-types.js';
18
13
  export { TRUST_TIER_COLORS, formatSecurityStatus, formatSkillRow, displayResults, displaySkillDetails, getTrustTierColor, } from './search-formatters.js';
19
- /**
20
- * Run interactive search loop using state machine pattern (SMI-759)
21
- * Uses iterative while loop instead of recursion for new searches.
22
- */
23
- async function runInteractiveSearch(dbPath) {
24
- const db = await openCliDatabase(dbPath);
25
- // SMI-4917 Bug 3: bootstrap the local registry on a first-time search.
26
- await autoSyncIfEmpty(db);
27
- const searchService = new SearchService(db);
28
- console.log(chalk.bold.blue('\n=== Skillsmith Interactive Search ===\n'));
29
- try {
30
- // State machine: phase controls the loop behavior
31
- let phase = 'collect_query';
32
- let state = null;
33
- // Main state machine loop - replaces recursive calls
34
- while (phase !== 'exit') {
35
- // Phase: Collect search query and filters
36
- if (phase === 'collect_query') {
37
- // Step 1: Enter search query (optional if filters will be provided)
38
- const query = await input({
39
- message: 'Enter search query (or press Enter to browse with filters):',
40
- default: '',
41
- });
42
- // Step 2: Filter by trust tier
43
- const trustTiers = await checkbox({
44
- message: 'Filter by trust tier (select with space, enter to continue):',
45
- choices: [
46
- { name: chalk.green('Verified'), value: 'verified' },
47
- { name: chalk.blue('Curated'), value: 'curated' },
48
- { name: chalk.yellow('Community'), value: 'community' },
49
- { name: chalk.red('Experimental'), value: 'experimental' },
50
- { name: chalk.gray('Unknown'), value: 'unknown' },
51
- { name: chalk.cyan('Local'), value: 'local' },
52
- ],
53
- });
54
- // Step 3: Minimum quality score
55
- const minQualityScore = await number({
56
- message: 'Minimum quality score (0-100, leave empty for no filter):',
57
- default: 0,
58
- min: 0,
59
- max: 100,
60
- });
61
- // Validate: require query OR at least one filter
62
- const hasQuery = query.trim().length > 0;
63
- const hasFilters = trustTiers.length > 0 || (minQualityScore !== undefined && minQualityScore > 0);
64
- if (!hasQuery && !hasFilters) {
65
- console.log(chalk.red('Please provide a search query or select at least one filter.'));
66
- continue; // Stay in collect_query phase
67
- }
68
- state = {
69
- query,
70
- trustTiers,
71
- minQualityScore: (minQualityScore || 0) / 100,
72
- offset: 0,
73
- };
74
- phase = 'searching';
75
- continue;
76
- }
77
- // Phase: Search and display results
78
- if (phase === 'searching' && state !== null) {
79
- // Build search options - only add optional properties when they have values
80
- const searchOptions = {
81
- query: state.query,
82
- limit: PAGE_SIZE,
83
- offset: state.offset,
84
- };
85
- // Add optional filters only when they have values (exactOptionalPropertyTypes)
86
- if (state.minQualityScore > 0) {
87
- searchOptions.minQualityScore = state.minQualityScore;
88
- }
89
- // Filter by first selected trust tier (API only supports one)
90
- if (state.trustTiers.length === 1 && state.trustTiers[0] !== undefined) {
91
- searchOptions.trustTier = state.trustTiers[0];
92
- }
93
- // Execute search
94
- const results = searchService.search(searchOptions);
95
- // If filtering by multiple trust tiers, filter client-side
96
- let filteredItems = results.items;
97
- const trustTiersForFilter = state.trustTiers;
98
- if (trustTiersForFilter.length > 1) {
99
- filteredItems = results.items.filter((r) => trustTiersForFilter.includes(r.skill.trustTier));
100
- }
101
- if (results.items.length === 0) {
102
- // SMI-4926: distinguish an empty/unsynced local index from a no-match.
103
- if (isLocalIndexEmpty(db)) {
104
- console.log(formatEmptyIndexHint(db));
105
- }
106
- else {
107
- displayResults(filteredItems, results.total, state.offset, PAGE_SIZE);
108
- }
109
- phase = 'exit';
110
- continue;
111
- }
112
- displayResults(filteredItems, results.total, state.offset, PAGE_SIZE);
113
- // Build action choices
114
- const choices = [];
115
- // Add skill selection options
116
- for (let i = 0; i < filteredItems.length; i++) {
117
- const skill = filteredItems[i].skill;
118
- const colorFn = TRUST_TIER_COLORS[skill.trustTier];
119
- choices.push({
120
- name: `${i + 1}. ${colorFn(skill.name)} - View details`,
121
- value: `view_${i}`,
122
- });
123
- }
124
- // Add navigation options
125
- choices.push({ name: chalk.dim('---'), value: 'separator' });
126
- if (state.offset > 0) {
127
- choices.push({ name: chalk.cyan('<< Previous page'), value: 'prev' });
128
- }
129
- if (results.hasMore) {
130
- choices.push({ name: chalk.cyan('Next page >>'), value: 'next' });
131
- }
132
- choices.push({ name: chalk.magenta('New search'), value: 'new' });
133
- choices.push({ name: chalk.red('Exit'), value: 'exit' });
134
- const action = await select({
135
- message: 'Select a skill to view or navigate:',
136
- choices,
137
- });
138
- if (action === 'separator') {
139
- continue;
140
- }
141
- else if (action === 'exit') {
142
- phase = 'exit';
143
- }
144
- else if (action === 'new') {
145
- // SMI-759: Reset to collect_query phase instead of recursive call
146
- phase = 'collect_query';
147
- console.log(chalk.bold.blue('\n=== New Search ===\n'));
148
- }
149
- else if (action === 'prev') {
150
- state.offset = Math.max(0, state.offset - PAGE_SIZE);
151
- }
152
- else if (action === 'next') {
153
- state.offset += PAGE_SIZE;
154
- }
155
- else if (action.startsWith('view_')) {
156
- const index = parseInt(action.replace('view_', ''), 10);
157
- const selectedResult = filteredItems[index];
158
- if (selectedResult) {
159
- displaySkillDetails(selectedResult);
160
- // Ask what to do next
161
- const nextAction = await select({
162
- message: 'What would you like to do?',
163
- choices: [
164
- { name: 'Back to results', value: 'back' },
165
- { name: 'Install this skill', value: 'install' },
166
- { name: 'Exit', value: 'exit' },
167
- ],
168
- });
169
- if (nextAction === 'install') {
170
- const installSpinner = ora('Installing skill...').start();
171
- try {
172
- const skillRepo = new SkillRepository(db);
173
- const skillDependencyRepo = new SkillDependencyRepository(db);
174
- const registryLookup = {
175
- async lookup(sid) {
176
- const s = skillRepo.findById(sid);
177
- if (!s || !s.repoUrl)
178
- return null;
179
- return {
180
- repoUrl: s.repoUrl,
181
- name: s.name,
182
- trustTier: s.trustTier,
183
- quarantined: false,
184
- };
185
- },
186
- };
187
- const installService = new SkillInstallationService({
188
- db,
189
- skillRepo,
190
- skillDependencyRepo,
191
- registryLookup,
192
- onProgress: (_stage, detail) => {
193
- installSpinner.text = detail;
194
- },
195
- });
196
- const installResult = await installService.install(selectedResult.skill.id, {});
197
- if (installResult.success) {
198
- installSpinner.succeed(chalk.green(`Installed "${selectedResult.skill.name}" successfully`));
199
- if (installResult.installPath) {
200
- console.log(chalk.dim(` Path: ${installResult.installPath}`));
201
- }
202
- }
203
- else {
204
- installSpinner.fail(chalk.red(`Installation failed: ${installResult.error}`));
205
- }
206
- }
207
- catch (installError) {
208
- installSpinner.fail(chalk.red(`Installation error: ${installError instanceof Error ? installError.message : String(installError)}`));
209
- }
210
- }
211
- else if (nextAction === 'exit') {
212
- phase = 'exit';
213
- }
214
- }
215
- }
216
- }
217
- }
218
- }
219
- finally {
220
- db.close();
221
- }
222
- console.log(chalk.dim('\nGoodbye!\n'));
223
- }
224
- /**
225
- * Run non-interactive search
226
- */
227
- async function runSearch(query, options) {
228
- const db = await openCliDatabase(options.db);
229
- // SMI-4917 Bug 3: bootstrap the local registry on a first-time search.
230
- await autoSyncIfEmpty(db);
231
- const searchService = new SearchService(db);
232
- try {
233
- // Build search options - only add optional properties when they have values
234
- const searchOptions = {
235
- query,
236
- limit: options.limit,
237
- };
238
- // Add optional filters only when they have values (exactOptionalPropertyTypes)
239
- if (options.tier !== undefined) {
240
- searchOptions.trustTier = options.tier;
241
- }
242
- if (options.category !== undefined) {
243
- searchOptions.category = options.category;
244
- }
245
- if (options.minScore !== undefined) {
246
- searchOptions.minQualityScore = options.minScore / 100;
247
- }
248
- // SMI-825: Security filters
249
- if (options.safeOnly !== undefined) {
250
- searchOptions.safeOnly = options.safeOnly;
251
- }
252
- if (options.maxRisk !== undefined) {
253
- searchOptions.maxRiskScore = options.maxRisk;
254
- }
255
- const results = searchService.search(searchOptions);
256
- // SMI-4926: an empty local index produces 0 results that look like a
257
- // genuine no-match — surface a sync-state-aware hint instead.
258
- if (results.items.length === 0 && isLocalIndexEmpty(db)) {
259
- console.log(formatEmptyIndexHint(db));
260
- return;
261
- }
262
- displayResults(results.items, results.total, 0, options.limit);
263
- }
264
- finally {
265
- db.close();
266
- }
267
- }
268
14
  /**
269
15
  * Create search command
270
16
  */
@@ -295,91 +41,7 @@ Quality Score Formula:
295
41
  // SMI-825: Security filters
296
42
  .option('--safe-only', 'Only show skills that passed security scan')
297
43
  .option('--max-risk <number>', 'Maximum risk score (0-100, lower is safer)')
298
- .action(async (query, opts) => {
299
- try {
300
- const interactive = opts['interactive'];
301
- const dbPath = opts['db'];
302
- const limit = parseInt(opts['limit'], 10);
303
- const tier = opts['tier'];
304
- const category = opts['category'];
305
- const minScore = opts['min-score'] ? parseInt(opts['min-score'], 10) : undefined;
306
- // SMI-825: Security filters
307
- const safeOnly = opts['safe-only'];
308
- const maxRisk = opts['max-risk'] ? parseInt(opts['max-risk'], 10) : undefined;
309
- if (interactive) {
310
- await runInteractiveSearch(dbPath);
311
- }
312
- else if (query) {
313
- // Query provided - run search with optional filters
314
- const searchOpts = {
315
- db: dbPath,
316
- limit,
317
- };
318
- if (tier !== undefined) {
319
- searchOpts.tier = tier;
320
- }
321
- if (category !== undefined) {
322
- searchOpts.category = category;
323
- }
324
- if (minScore !== undefined) {
325
- searchOpts.minScore = minScore;
326
- }
327
- // SMI-825: Security filters
328
- if (safeOnly !== undefined) {
329
- searchOpts.safeOnly = safeOnly;
330
- }
331
- if (maxRisk !== undefined) {
332
- searchOpts.maxRisk = maxRisk;
333
- }
334
- await runSearch(query, searchOpts);
335
- }
336
- else if (tier !== undefined ||
337
- category !== undefined ||
338
- minScore !== undefined ||
339
- safeOnly !== undefined ||
340
- maxRisk !== undefined) {
341
- // No query but filters provided - run filter-only search
342
- console.log(chalk.blue('Running filter-only search...'));
343
- const searchOpts = {
344
- db: dbPath,
345
- limit,
346
- };
347
- if (tier !== undefined) {
348
- searchOpts.tier = tier;
349
- }
350
- if (category !== undefined) {
351
- searchOpts.category = category;
352
- }
353
- if (minScore !== undefined) {
354
- searchOpts.minScore = minScore;
355
- }
356
- // SMI-825: Security filters
357
- if (safeOnly !== undefined) {
358
- searchOpts.safeOnly = safeOnly;
359
- }
360
- if (maxRisk !== undefined) {
361
- searchOpts.maxRisk = maxRisk;
362
- }
363
- await runSearch('', searchOpts);
364
- }
365
- else {
366
- // No query and no filters
367
- console.log(chalk.yellow('Please provide a search query, filters (--tier, --category, --min-score, --safe-only, --max-risk), or use -i for interactive mode'));
368
- console.log(chalk.dim('Examples:'));
369
- console.log(chalk.dim(' skillsmith search "authentication"'));
370
- console.log(chalk.dim(' skillsmith search --tier verified'));
371
- console.log(chalk.dim(' skillsmith search --category security'));
372
- console.log(chalk.dim(' skillsmith search --tier community --min-score 70'));
373
- console.log(chalk.dim(' skillsmith search --safe-only'));
374
- console.log(chalk.dim(' skillsmith search --max-risk 30'));
375
- console.log(chalk.dim(' skillsmith search -i'));
376
- }
377
- }
378
- catch (error) {
379
- console.error(chalk.red('Search error:'), sanitizeError(error));
380
- process.exit(1);
381
- }
382
- });
44
+ .action(searchAction);
383
45
  return cmd;
384
46
  }
385
47
  export default createSearchCommand;
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAIjD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,wBAAwB,CAAA;AAE/B;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;SAC9B,WAAW,CACV;;;;;;;;;;;;;;6EAcuE,CACxE;SACA,QAAQ,CACP,SAAS,EACT,+EAA+E,CAChF;SACA,MAAM,CAAC,mBAAmB,EAAE,gCAAgC,CAAC;SAC7D,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,eAAe,CAAC;SAChE,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,EAAE,IAAI,CAAC;SAC/D,MAAM,CACL,mBAAmB,EACnB,mFAAmF,CACpF;SACA,MAAM,CACL,2BAA2B,EAC3B,0FAA0F,CAC3F;SACA,MAAM,CAAC,0BAA0B,EAAE,sDAAsD,CAAC;QAC3F,4BAA4B;SAC3B,MAAM,CAAC,aAAa,EAAE,4CAA4C,CAAC;SACnE,MAAM,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;SAC3E,MAAM,CAAC,YAAY,CAAC,CAAA;IAEvB,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,eAAe,mBAAmB,CAAA"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * SMI-5127: Sync command action implementations + telemetry wrappers.
3
+ *
4
+ * Sibling-split from sync.ts following the <command>.action.ts convention
5
+ * established by SMI-5040. The four impl functions are extracted here and
6
+ * wrapped with withTelemetry so the CLI_DISPATCHER_MAP coverage test can
7
+ * assert 100% telemetry coverage without importing the full commander tree.
8
+ *
9
+ * Opts-adaptation choice: each *ActionImpl accepts the same typed options
10
+ * struct that the sync.ts factory closures were building — the factory
11
+ * closures remain in sync.ts, do the same Record<string,…> → typed cast they
12
+ * always did, then call the wrapped action. This keeps sync.ts factories
13
+ * identical to before (no signature churn) and keeps sync.action.ts free of
14
+ * commander imports.
15
+ */
16
+ export declare const syncAction: (options: {
17
+ dbPath: string;
18
+ force: boolean;
19
+ dryRun: boolean;
20
+ json: boolean;
21
+ }) => Promise<void>;
22
+ export declare const syncStatusAction: (options: {
23
+ dbPath: string;
24
+ json: boolean;
25
+ }) => Promise<void>;
26
+ export declare const syncHistoryAction: (options: {
27
+ dbPath: string;
28
+ limit: number;
29
+ json: boolean;
30
+ }) => Promise<void>;
31
+ export declare const syncConfigAction: (options: {
32
+ dbPath: string;
33
+ enable: boolean | undefined;
34
+ disable: boolean | undefined;
35
+ frequency: string | undefined;
36
+ show: boolean | undefined;
37
+ json: boolean;
38
+ }) => Promise<void>;
39
+ //# sourceMappingURL=sync.action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.action.d.ts","sourceRoot":"","sources":["../../../src/commands/sync.action.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAkZH,eAAO,MAAM,UAAU;YAnXb,MAAM;WACP,OAAO;YACN,OAAO;UACT,OAAO;mBAoXb,CAAA;AAEF,eAAO,MAAM,gBAAgB;YA5Q0B,MAAM;UAAQ,OAAO;mBAgR1E,CAAA;AAEF,eAAO,MAAM,iBAAiB;YA1KpB,MAAM;WACP,MAAM;UACP,OAAO;mBA4Kb,CAAA;AAEF,eAAO,MAAM,gBAAgB;YAnGnB,MAAM;YACN,OAAO,GAAG,SAAS;aAClB,OAAO,GAAG,SAAS;eACjB,MAAM,GAAG,SAAS;UACvB,OAAO,GAAG,SAAS;UACnB,OAAO;mBAkGb,CAAA"}