@skillsmith/cli 0.6.3 → 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.
- package/CHANGELOG.md +5 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/commands/__meta__/telemetry-coverage.test.d.ts +20 -0
- package/dist/src/commands/__meta__/telemetry-coverage.test.d.ts.map +1 -0
- package/dist/src/commands/__meta__/telemetry-coverage.test.js +118 -0
- package/dist/src/commands/__meta__/telemetry-coverage.test.js.map +1 -0
- package/dist/src/commands/ab-test.d.ts +1 -0
- package/dist/src/commands/ab-test.d.ts.map +1 -1
- package/dist/src/commands/ab-test.js +17 -8
- package/dist/src/commands/ab-test.js.map +1 -1
- package/dist/src/commands/analyze.d.ts +1 -0
- package/dist/src/commands/analyze.d.ts.map +1 -1
- package/dist/src/commands/analyze.js +32 -23
- package/dist/src/commands/analyze.js.map +1 -1
- package/dist/src/commands/audit-collisions.d.ts +1 -4
- package/dist/src/commands/audit-collisions.d.ts.map +1 -1
- package/dist/src/commands/audit-collisions.js +32 -23
- package/dist/src/commands/audit-collisions.js.map +1 -1
- package/dist/src/commands/audit-sources.action.d.ts +37 -0
- package/dist/src/commands/audit-sources.action.d.ts.map +1 -0
- package/dist/src/commands/audit-sources.action.js +300 -0
- package/dist/src/commands/audit-sources.action.js.map +1 -0
- package/dist/src/commands/audit-sources.d.ts +37 -0
- package/dist/src/commands/audit-sources.d.ts.map +1 -0
- package/dist/src/commands/audit-sources.js +55 -0
- package/dist/src/commands/audit-sources.js.map +1 -0
- package/dist/src/commands/audit-sources.test.d.ts +9 -0
- package/dist/src/commands/audit-sources.test.d.ts.map +1 -0
- package/dist/src/commands/audit-sources.test.js +228 -0
- package/dist/src/commands/audit-sources.test.js.map +1 -0
- package/dist/src/commands/audit.d.ts +2 -6
- package/dist/src/commands/audit.d.ts.map +1 -1
- package/dist/src/commands/audit.js +52 -31
- package/dist/src/commands/audit.js.map +1 -1
- package/dist/src/commands/author/index.d.ts +2 -1
- package/dist/src/commands/author/index.d.ts.map +1 -1
- package/dist/src/commands/author/index.js +4 -1
- package/dist/src/commands/author/index.js.map +1 -1
- package/dist/src/commands/author/init.action.d.ts +29 -0
- package/dist/src/commands/author/init.action.d.ts.map +1 -0
- package/dist/src/commands/author/init.action.js +131 -0
- package/dist/src/commands/author/init.action.js.map +1 -0
- package/dist/src/commands/author/init.d.ts +0 -14
- package/dist/src/commands/author/init.d.ts.map +1 -1
- package/dist/src/commands/author/init.js +3 -87
- package/dist/src/commands/author/init.js.map +1 -1
- package/dist/src/commands/author/mcp-init.d.ts +1 -0
- package/dist/src/commands/author/mcp-init.d.ts.map +1 -1
- package/dist/src/commands/author/mcp-init.js +21 -13
- package/dist/src/commands/author/mcp-init.js.map +1 -1
- package/dist/src/commands/author/subagent.d.ts +1 -0
- package/dist/src/commands/author/subagent.d.ts.map +1 -1
- package/dist/src/commands/author/subagent.js +23 -15
- package/dist/src/commands/author/subagent.js.map +1 -1
- package/dist/src/commands/author/transform.d.ts +1 -0
- package/dist/src/commands/author/transform.d.ts.map +1 -1
- package/dist/src/commands/author/transform.js +23 -15
- package/dist/src/commands/author/transform.js.map +1 -1
- package/dist/src/commands/config.d.ts +2 -0
- package/dist/src/commands/config.d.ts.map +1 -1
- package/dist/src/commands/config.js +43 -28
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/create.d.ts +1 -0
- package/dist/src/commands/create.d.ts.map +1 -1
- package/dist/src/commands/create.js +28 -19
- package/dist/src/commands/create.js.map +1 -1
- package/dist/src/commands/diff.d.ts +4 -0
- package/dist/src/commands/diff.d.ts.map +1 -1
- package/dist/src/commands/diff.js +57 -42
- package/dist/src/commands/diff.js.map +1 -1
- package/dist/src/commands/diff.test.js +30 -0
- package/dist/src/commands/diff.test.js.map +1 -1
- package/dist/src/commands/import-local.d.ts +7 -0
- package/dist/src/commands/import-local.d.ts.map +1 -1
- package/dist/src/commands/import-local.js +43 -34
- package/dist/src/commands/import-local.js.map +1 -1
- package/dist/src/commands/import.d.ts +6 -0
- package/dist/src/commands/import.d.ts.map +1 -1
- package/dist/src/commands/import.js +23 -14
- package/dist/src/commands/import.js.map +1 -1
- package/dist/src/commands/info.d.ts +7 -0
- package/dist/src/commands/info.d.ts.map +1 -1
- package/dist/src/commands/info.js +77 -68
- package/dist/src/commands/info.js.map +1 -1
- package/dist/src/commands/install-skill.d.ts +3 -0
- package/dist/src/commands/install-skill.d.ts.map +1 -1
- package/dist/src/commands/install-skill.js +23 -15
- package/dist/src/commands/install-skill.js.map +1 -1
- package/dist/src/commands/install.d.ts +21 -0
- package/dist/src/commands/install.d.ts.map +1 -1
- package/dist/src/commands/install.js +154 -139
- package/dist/src/commands/install.js.map +1 -1
- package/dist/src/commands/login.d.ts +4 -0
- package/dist/src/commands/login.d.ts.map +1 -1
- package/dist/src/commands/login.js +56 -47
- package/dist/src/commands/login.js.map +1 -1
- package/dist/src/commands/logout.d.ts +1 -0
- package/dist/src/commands/logout.d.ts.map +1 -1
- package/dist/src/commands/logout.js +36 -27
- package/dist/src/commands/logout.js.map +1 -1
- package/dist/src/commands/manage.d.ts +3 -9
- package/dist/src/commands/manage.d.ts.map +1 -1
- package/dist/src/commands/manage.js +69 -45
- package/dist/src/commands/manage.js.map +1 -1
- package/dist/src/commands/merge.d.ts +7 -0
- package/dist/src/commands/merge.d.ts.map +1 -1
- package/dist/src/commands/merge.js +117 -108
- package/dist/src/commands/merge.js.map +1 -1
- package/dist/src/commands/pin.d.ts +2 -0
- package/dist/src/commands/pin.d.ts.map +1 -1
- package/dist/src/commands/pin.js +88 -73
- package/dist/src/commands/pin.js.map +1 -1
- package/dist/src/commands/recommend.d.ts +1 -0
- package/dist/src/commands/recommend.d.ts.map +1 -1
- package/dist/src/commands/recommend.js +35 -27
- package/dist/src/commands/recommend.js.map +1 -1
- package/dist/src/commands/search-formatters.d.ts +1 -0
- package/dist/src/commands/search-formatters.d.ts.map +1 -1
- package/dist/src/commands/search-formatters.js +3 -0
- package/dist/src/commands/search-formatters.js.map +1 -1
- package/dist/src/commands/search.action.d.ts +16 -0
- package/dist/src/commands/search.action.d.ts.map +1 -0
- package/dist/src/commands/search.action.js +384 -0
- package/dist/src/commands/search.action.js.map +1 -0
- package/dist/src/commands/search.d.ts +3 -0
- package/dist/src/commands/search.d.ts.map +1 -1
- package/dist/src/commands/search.js +5 -354
- package/dist/src/commands/search.js.map +1 -1
- package/dist/src/commands/sync.action.d.ts +39 -0
- package/dist/src/commands/sync.action.d.ts.map +1 -0
- package/dist/src/commands/sync.action.js +353 -0
- package/dist/src/commands/sync.action.js.map +1 -0
- package/dist/src/commands/sync.d.ts +3 -0
- package/dist/src/commands/sync.d.ts.map +1 -1
- package/dist/src/commands/sync.js +8 -310
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/telemetry.action.d.ts +38 -0
- package/dist/src/commands/telemetry.action.d.ts.map +1 -0
- package/dist/src/commands/telemetry.action.js +350 -0
- package/dist/src/commands/telemetry.action.js.map +1 -0
- package/dist/src/commands/telemetry.d.ts +5 -13
- package/dist/src/commands/telemetry.d.ts.map +1 -1
- package/dist/src/commands/telemetry.js +13 -302
- package/dist/src/commands/telemetry.js.map +1 -1
- package/dist/src/commands/whoami.d.ts +1 -0
- package/dist/src/commands/whoami.d.ts.map +1 -1
- package/dist/src/commands/whoami.js +29 -21
- package/dist/src/commands/whoami.js.map +1 -1
- package/dist/src/utils/open-database.d.ts +10 -2
- package/dist/src/utils/open-database.d.ts.map +1 -1
- package/dist/src/utils/open-database.js +15 -2
- package/dist/src/utils/open-database.js.map +1 -1
- package/dist/src/utils/skills-directory.d.ts.map +1 -1
- package/dist/src/utils/skills-directory.js +5 -1
- package/dist/src/utils/skills-directory.js.map +1 -1
- package/dist/tests/e2e/audit-sources-apply.test.d.ts +13 -0
- package/dist/tests/e2e/audit-sources-apply.test.d.ts.map +1 -0
- package/dist/tests/e2e/audit-sources-apply.test.js +166 -0
- package/dist/tests/e2e/audit-sources-apply.test.js.map +1 -0
- package/dist/tests/e2e/audit-sources-recovery.test.d.ts +15 -0
- package/dist/tests/e2e/audit-sources-recovery.test.d.ts.map +1 -0
- package/dist/tests/e2e/audit-sources-recovery.test.js +179 -0
- package/dist/tests/e2e/audit-sources-recovery.test.js.map +1 -0
- package/dist/tests/e2e/audit-sources-roundtrip.test.d.ts +23 -0
- package/dist/tests/e2e/audit-sources-roundtrip.test.d.ts.map +1 -0
- package/dist/tests/e2e/audit-sources-roundtrip.test.js +107 -0
- package/dist/tests/e2e/audit-sources-roundtrip.test.js.map +1 -0
- package/dist/tests/e2e/utils/source-recovery-fixture.d.ts +49 -0
- package/dist/tests/e2e/utils/source-recovery-fixture.d.ts.map +1 -0
- package/dist/tests/e2e/utils/source-recovery-fixture.js +106 -0
- package/dist/tests/e2e/utils/source-recovery-fixture.js.map +1 -0
- package/dist/tests/init.test.js +2 -1
- package/dist/tests/init.test.js.map +1 -1
- package/dist/tests/install-quarantine.test.d.ts +10 -0
- package/dist/tests/install-quarantine.test.d.ts.map +1 -0
- package/dist/tests/install-quarantine.test.js +86 -0
- package/dist/tests/install-quarantine.test.js.map +1 -0
- package/package.json +4 -5
|
@@ -2,275 +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
|
-
// SMI-5039: lazy embedding-capability probe. CLI `search` is the only
|
|
12
|
-
// embedding-relevant command — it surfaces a degraded-search warning to the
|
|
13
|
-
// operator without blocking the FTS fallback path. The probe is hard-bounded
|
|
14
|
-
// at 2 s, stderr-only, and never throws; `SKILLSMITH_QUIET=true` suppresses
|
|
15
|
-
// the warning line for scripted use.
|
|
16
|
-
import { probeEmbeddingCapability } from '@skillsmith/core/embeddings/probe';
|
|
17
|
-
import { openCliDatabase } from '../utils/open-database.js';
|
|
18
|
-
import { autoSyncIfEmpty, isLocalIndexEmpty, formatEmptyIndexHint } from './search.helpers.js';
|
|
19
10
|
import { DEFAULT_DB_PATH } from '../config.js';
|
|
20
|
-
import {
|
|
21
|
-
import { PAGE_SIZE } from './search-types.js';
|
|
22
|
-
import { TRUST_TIER_COLORS, displayResults, displaySkillDetails } from './search-formatters.js';
|
|
11
|
+
import { searchAction } from './search.action.js';
|
|
23
12
|
export { PAGE_SIZE } from './search-types.js';
|
|
24
13
|
export { TRUST_TIER_COLORS, formatSecurityStatus, formatSkillRow, displayResults, displaySkillDetails, getTrustTierColor, } from './search-formatters.js';
|
|
25
|
-
/**
|
|
26
|
-
* Run interactive search loop using state machine pattern (SMI-759)
|
|
27
|
-
* Uses iterative while loop instead of recursion for new searches.
|
|
28
|
-
*/
|
|
29
|
-
async function runInteractiveSearch(dbPath) {
|
|
30
|
-
const db = await openCliDatabase(dbPath);
|
|
31
|
-
// SMI-4917 Bug 3: bootstrap the local registry on a first-time search.
|
|
32
|
-
await autoSyncIfEmpty(db);
|
|
33
|
-
const searchService = new SearchService(db);
|
|
34
|
-
console.log(chalk.bold.blue('\n=== Skillsmith Interactive Search ===\n'));
|
|
35
|
-
try {
|
|
36
|
-
// State machine: phase controls the loop behavior
|
|
37
|
-
let phase = 'collect_query';
|
|
38
|
-
let state = null;
|
|
39
|
-
// Main state machine loop - replaces recursive calls
|
|
40
|
-
while (phase !== 'exit') {
|
|
41
|
-
// Phase: Collect search query and filters
|
|
42
|
-
if (phase === 'collect_query') {
|
|
43
|
-
// Step 1: Enter search query (optional if filters will be provided)
|
|
44
|
-
const query = await input({
|
|
45
|
-
message: 'Enter search query (or press Enter to browse with filters):',
|
|
46
|
-
default: '',
|
|
47
|
-
});
|
|
48
|
-
// Step 2: Filter by trust tier
|
|
49
|
-
const trustTiers = await checkbox({
|
|
50
|
-
message: 'Filter by trust tier (select with space, enter to continue):',
|
|
51
|
-
choices: [
|
|
52
|
-
{ name: chalk.green('Verified'), value: 'verified' },
|
|
53
|
-
{ name: chalk.blue('Curated'), value: 'curated' },
|
|
54
|
-
{ name: chalk.yellow('Community'), value: 'community' },
|
|
55
|
-
{ name: chalk.red('Experimental'), value: 'experimental' },
|
|
56
|
-
{ name: chalk.gray('Unknown'), value: 'unknown' },
|
|
57
|
-
{ name: chalk.cyan('Local'), value: 'local' },
|
|
58
|
-
],
|
|
59
|
-
});
|
|
60
|
-
// Step 3: Minimum quality score
|
|
61
|
-
const minQualityScore = await number({
|
|
62
|
-
message: 'Minimum quality score (0-100, leave empty for no filter):',
|
|
63
|
-
default: 0,
|
|
64
|
-
min: 0,
|
|
65
|
-
max: 100,
|
|
66
|
-
});
|
|
67
|
-
// Validate: require query OR at least one filter
|
|
68
|
-
const hasQuery = query.trim().length > 0;
|
|
69
|
-
const hasFilters = trustTiers.length > 0 || (minQualityScore !== undefined && minQualityScore > 0);
|
|
70
|
-
if (!hasQuery && !hasFilters) {
|
|
71
|
-
console.log(chalk.red('Please provide a search query or select at least one filter.'));
|
|
72
|
-
continue; // Stay in collect_query phase
|
|
73
|
-
}
|
|
74
|
-
state = {
|
|
75
|
-
query,
|
|
76
|
-
trustTiers,
|
|
77
|
-
minQualityScore: (minQualityScore || 0) / 100,
|
|
78
|
-
offset: 0,
|
|
79
|
-
};
|
|
80
|
-
phase = 'searching';
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
// Phase: Search and display results
|
|
84
|
-
if (phase === 'searching' && state !== null) {
|
|
85
|
-
// Build search options - only add optional properties when they have values
|
|
86
|
-
const searchOptions = {
|
|
87
|
-
query: state.query,
|
|
88
|
-
limit: PAGE_SIZE,
|
|
89
|
-
offset: state.offset,
|
|
90
|
-
};
|
|
91
|
-
// Add optional filters only when they have values (exactOptionalPropertyTypes)
|
|
92
|
-
if (state.minQualityScore > 0) {
|
|
93
|
-
searchOptions.minQualityScore = state.minQualityScore;
|
|
94
|
-
}
|
|
95
|
-
// Filter by first selected trust tier (API only supports one)
|
|
96
|
-
if (state.trustTiers.length === 1 && state.trustTiers[0] !== undefined) {
|
|
97
|
-
searchOptions.trustTier = state.trustTiers[0];
|
|
98
|
-
}
|
|
99
|
-
// Execute search
|
|
100
|
-
const results = searchService.search(searchOptions);
|
|
101
|
-
// If filtering by multiple trust tiers, filter client-side
|
|
102
|
-
let filteredItems = results.items;
|
|
103
|
-
const trustTiersForFilter = state.trustTiers;
|
|
104
|
-
if (trustTiersForFilter.length > 1) {
|
|
105
|
-
filteredItems = results.items.filter((r) => trustTiersForFilter.includes(r.skill.trustTier));
|
|
106
|
-
}
|
|
107
|
-
if (results.items.length === 0) {
|
|
108
|
-
// SMI-4926: distinguish an empty/unsynced local index from a no-match.
|
|
109
|
-
if (isLocalIndexEmpty(db)) {
|
|
110
|
-
console.log(formatEmptyIndexHint(db));
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
displayResults(filteredItems, results.total, state.offset, PAGE_SIZE);
|
|
114
|
-
}
|
|
115
|
-
phase = 'exit';
|
|
116
|
-
continue;
|
|
117
|
-
}
|
|
118
|
-
displayResults(filteredItems, results.total, state.offset, PAGE_SIZE);
|
|
119
|
-
// Build action choices
|
|
120
|
-
const choices = [];
|
|
121
|
-
// Add skill selection options
|
|
122
|
-
for (let i = 0; i < filteredItems.length; i++) {
|
|
123
|
-
const skill = filteredItems[i].skill;
|
|
124
|
-
const colorFn = TRUST_TIER_COLORS[skill.trustTier];
|
|
125
|
-
choices.push({
|
|
126
|
-
name: `${i + 1}. ${colorFn(skill.name)} - View details`,
|
|
127
|
-
value: `view_${i}`,
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
// Add navigation options
|
|
131
|
-
choices.push({ name: chalk.dim('---'), value: 'separator' });
|
|
132
|
-
if (state.offset > 0) {
|
|
133
|
-
choices.push({ name: chalk.cyan('<< Previous page'), value: 'prev' });
|
|
134
|
-
}
|
|
135
|
-
if (results.hasMore) {
|
|
136
|
-
choices.push({ name: chalk.cyan('Next page >>'), value: 'next' });
|
|
137
|
-
}
|
|
138
|
-
choices.push({ name: chalk.magenta('New search'), value: 'new' });
|
|
139
|
-
choices.push({ name: chalk.red('Exit'), value: 'exit' });
|
|
140
|
-
const action = await select({
|
|
141
|
-
message: 'Select a skill to view or navigate:',
|
|
142
|
-
choices,
|
|
143
|
-
});
|
|
144
|
-
if (action === 'separator') {
|
|
145
|
-
continue;
|
|
146
|
-
}
|
|
147
|
-
else if (action === 'exit') {
|
|
148
|
-
phase = 'exit';
|
|
149
|
-
}
|
|
150
|
-
else if (action === 'new') {
|
|
151
|
-
// SMI-759: Reset to collect_query phase instead of recursive call
|
|
152
|
-
phase = 'collect_query';
|
|
153
|
-
console.log(chalk.bold.blue('\n=== New Search ===\n'));
|
|
154
|
-
}
|
|
155
|
-
else if (action === 'prev') {
|
|
156
|
-
state.offset = Math.max(0, state.offset - PAGE_SIZE);
|
|
157
|
-
}
|
|
158
|
-
else if (action === 'next') {
|
|
159
|
-
state.offset += PAGE_SIZE;
|
|
160
|
-
}
|
|
161
|
-
else if (action.startsWith('view_')) {
|
|
162
|
-
const index = parseInt(action.replace('view_', ''), 10);
|
|
163
|
-
const selectedResult = filteredItems[index];
|
|
164
|
-
if (selectedResult) {
|
|
165
|
-
displaySkillDetails(selectedResult);
|
|
166
|
-
// Ask what to do next
|
|
167
|
-
const nextAction = await select({
|
|
168
|
-
message: 'What would you like to do?',
|
|
169
|
-
choices: [
|
|
170
|
-
{ name: 'Back to results', value: 'back' },
|
|
171
|
-
{ name: 'Install this skill', value: 'install' },
|
|
172
|
-
{ name: 'Exit', value: 'exit' },
|
|
173
|
-
],
|
|
174
|
-
});
|
|
175
|
-
if (nextAction === 'install') {
|
|
176
|
-
const installSpinner = ora('Installing skill...').start();
|
|
177
|
-
try {
|
|
178
|
-
const skillRepo = new SkillRepository(db);
|
|
179
|
-
const skillDependencyRepo = new SkillDependencyRepository(db);
|
|
180
|
-
const registryLookup = {
|
|
181
|
-
async lookup(sid) {
|
|
182
|
-
const s = skillRepo.findById(sid);
|
|
183
|
-
if (!s || !s.repoUrl)
|
|
184
|
-
return null;
|
|
185
|
-
return {
|
|
186
|
-
repoUrl: s.repoUrl,
|
|
187
|
-
name: s.name,
|
|
188
|
-
trustTier: s.trustTier,
|
|
189
|
-
quarantined: false,
|
|
190
|
-
};
|
|
191
|
-
},
|
|
192
|
-
};
|
|
193
|
-
const installService = new SkillInstallationService({
|
|
194
|
-
db,
|
|
195
|
-
skillRepo,
|
|
196
|
-
skillDependencyRepo,
|
|
197
|
-
registryLookup,
|
|
198
|
-
onProgress: (_stage, detail) => {
|
|
199
|
-
installSpinner.text = detail;
|
|
200
|
-
},
|
|
201
|
-
});
|
|
202
|
-
const installResult = await installService.install(selectedResult.skill.id, {});
|
|
203
|
-
if (installResult.success) {
|
|
204
|
-
installSpinner.succeed(chalk.green(`Installed "${selectedResult.skill.name}" successfully`));
|
|
205
|
-
if (installResult.installPath) {
|
|
206
|
-
console.log(chalk.dim(` Path: ${installResult.installPath}`));
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
installSpinner.fail(chalk.red(`Installation failed: ${installResult.error}`));
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
catch (installError) {
|
|
214
|
-
installSpinner.fail(chalk.red(`Installation error: ${installError instanceof Error ? installError.message : String(installError)}`));
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
else if (nextAction === 'exit') {
|
|
218
|
-
phase = 'exit';
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
finally {
|
|
226
|
-
db.close();
|
|
227
|
-
}
|
|
228
|
-
console.log(chalk.dim('\nGoodbye!\n'));
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Run non-interactive search
|
|
232
|
-
*/
|
|
233
|
-
async function runSearch(query, options) {
|
|
234
|
-
const db = await openCliDatabase(options.db);
|
|
235
|
-
// SMI-4917 Bug 3: bootstrap the local registry on a first-time search.
|
|
236
|
-
await autoSyncIfEmpty(db);
|
|
237
|
-
const searchService = new SearchService(db);
|
|
238
|
-
try {
|
|
239
|
-
// Build search options - only add optional properties when they have values
|
|
240
|
-
const searchOptions = {
|
|
241
|
-
query,
|
|
242
|
-
limit: options.limit,
|
|
243
|
-
};
|
|
244
|
-
// Add optional filters only when they have values (exactOptionalPropertyTypes)
|
|
245
|
-
if (options.tier !== undefined) {
|
|
246
|
-
searchOptions.trustTier = options.tier;
|
|
247
|
-
}
|
|
248
|
-
if (options.category !== undefined) {
|
|
249
|
-
searchOptions.category = options.category;
|
|
250
|
-
}
|
|
251
|
-
if (options.minScore !== undefined) {
|
|
252
|
-
searchOptions.minQualityScore = options.minScore / 100;
|
|
253
|
-
}
|
|
254
|
-
// SMI-825: Security filters
|
|
255
|
-
if (options.safeOnly !== undefined) {
|
|
256
|
-
searchOptions.safeOnly = options.safeOnly;
|
|
257
|
-
}
|
|
258
|
-
if (options.maxRisk !== undefined) {
|
|
259
|
-
searchOptions.maxRiskScore = options.maxRisk;
|
|
260
|
-
}
|
|
261
|
-
const results = searchService.search(searchOptions);
|
|
262
|
-
// SMI-4926: an empty local index produces 0 results that look like a
|
|
263
|
-
// genuine no-match — surface a sync-state-aware hint instead.
|
|
264
|
-
if (results.items.length === 0 && isLocalIndexEmpty(db)) {
|
|
265
|
-
console.log(formatEmptyIndexHint(db));
|
|
266
|
-
return;
|
|
267
|
-
}
|
|
268
|
-
displayResults(results.items, results.total, 0, options.limit);
|
|
269
|
-
}
|
|
270
|
-
finally {
|
|
271
|
-
db.close();
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
14
|
/**
|
|
275
15
|
* Create search command
|
|
276
16
|
*/
|
|
@@ -301,96 +41,7 @@ Quality Score Formula:
|
|
|
301
41
|
// SMI-825: Security filters
|
|
302
42
|
.option('--safe-only', 'Only show skills that passed security scan')
|
|
303
43
|
.option('--max-risk <number>', 'Maximum risk score (0-100, lower is safer)')
|
|
304
|
-
.action(
|
|
305
|
-
try {
|
|
306
|
-
// SMI-5039: lazy probe — only fires on the search command, NOT on
|
|
307
|
-
// --version / --help (those short-circuit at commander level before
|
|
308
|
-
// any .action runs). Honors SKILLSMITH_QUIET=true for scripted use.
|
|
309
|
-
// Probe cannot throw; safe to await unconditionally.
|
|
310
|
-
await probeEmbeddingCapability();
|
|
311
|
-
const interactive = opts['interactive'];
|
|
312
|
-
const dbPath = opts['db'];
|
|
313
|
-
const limit = parseInt(opts['limit'], 10);
|
|
314
|
-
const tier = opts['tier'];
|
|
315
|
-
const category = opts['category'];
|
|
316
|
-
const minScore = opts['min-score'] ? parseInt(opts['min-score'], 10) : undefined;
|
|
317
|
-
// SMI-825: Security filters
|
|
318
|
-
const safeOnly = opts['safe-only'];
|
|
319
|
-
const maxRisk = opts['max-risk'] ? parseInt(opts['max-risk'], 10) : undefined;
|
|
320
|
-
if (interactive) {
|
|
321
|
-
await runInteractiveSearch(dbPath);
|
|
322
|
-
}
|
|
323
|
-
else if (query) {
|
|
324
|
-
// Query provided - run search with optional filters
|
|
325
|
-
const searchOpts = {
|
|
326
|
-
db: dbPath,
|
|
327
|
-
limit,
|
|
328
|
-
};
|
|
329
|
-
if (tier !== undefined) {
|
|
330
|
-
searchOpts.tier = tier;
|
|
331
|
-
}
|
|
332
|
-
if (category !== undefined) {
|
|
333
|
-
searchOpts.category = category;
|
|
334
|
-
}
|
|
335
|
-
if (minScore !== undefined) {
|
|
336
|
-
searchOpts.minScore = minScore;
|
|
337
|
-
}
|
|
338
|
-
// SMI-825: Security filters
|
|
339
|
-
if (safeOnly !== undefined) {
|
|
340
|
-
searchOpts.safeOnly = safeOnly;
|
|
341
|
-
}
|
|
342
|
-
if (maxRisk !== undefined) {
|
|
343
|
-
searchOpts.maxRisk = maxRisk;
|
|
344
|
-
}
|
|
345
|
-
await runSearch(query, searchOpts);
|
|
346
|
-
}
|
|
347
|
-
else if (tier !== undefined ||
|
|
348
|
-
category !== undefined ||
|
|
349
|
-
minScore !== undefined ||
|
|
350
|
-
safeOnly !== undefined ||
|
|
351
|
-
maxRisk !== undefined) {
|
|
352
|
-
// No query but filters provided - run filter-only search
|
|
353
|
-
console.log(chalk.blue('Running filter-only search...'));
|
|
354
|
-
const searchOpts = {
|
|
355
|
-
db: dbPath,
|
|
356
|
-
limit,
|
|
357
|
-
};
|
|
358
|
-
if (tier !== undefined) {
|
|
359
|
-
searchOpts.tier = tier;
|
|
360
|
-
}
|
|
361
|
-
if (category !== undefined) {
|
|
362
|
-
searchOpts.category = category;
|
|
363
|
-
}
|
|
364
|
-
if (minScore !== undefined) {
|
|
365
|
-
searchOpts.minScore = minScore;
|
|
366
|
-
}
|
|
367
|
-
// SMI-825: Security filters
|
|
368
|
-
if (safeOnly !== undefined) {
|
|
369
|
-
searchOpts.safeOnly = safeOnly;
|
|
370
|
-
}
|
|
371
|
-
if (maxRisk !== undefined) {
|
|
372
|
-
searchOpts.maxRisk = maxRisk;
|
|
373
|
-
}
|
|
374
|
-
await runSearch('', searchOpts);
|
|
375
|
-
}
|
|
376
|
-
else {
|
|
377
|
-
// No query and no filters
|
|
378
|
-
console.log(chalk.yellow('Please provide a search query, filters (--tier, --category, --min-score, --safe-only, --max-risk), or use -i for interactive mode'));
|
|
379
|
-
console.log(chalk.dim('Examples:'));
|
|
380
|
-
console.log(chalk.dim(' skillsmith search "authentication"'));
|
|
381
|
-
console.log(chalk.dim(' skillsmith search --tier verified'));
|
|
382
|
-
console.log(chalk.dim(' skillsmith search --category security'));
|
|
383
|
-
console.log(chalk.dim(' skillsmith search --tier community --min-score 70'));
|
|
384
|
-
console.log(chalk.dim(' skillsmith search --safe-only'));
|
|
385
|
-
console.log(chalk.dim(' skillsmith search --max-risk 30'));
|
|
386
|
-
console.log(chalk.dim(' skillsmith search -i'));
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
catch (error) {
|
|
390
|
-
console.error(chalk.red('Search error:'), sanitizeError(error));
|
|
391
|
-
process.exit(1);
|
|
392
|
-
}
|
|
393
|
-
});
|
|
44
|
+
.action(searchAction);
|
|
394
45
|
return cmd;
|
|
395
46
|
}
|
|
396
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"}
|