@skillsmith/cli 0.6.0 → 0.6.2
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 +11 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/commands/audit.d.ts.map +1 -1
- package/dist/src/commands/audit.js +3 -3
- package/dist/src/commands/audit.js.map +1 -1
- package/dist/src/commands/import-local.d.ts.map +1 -1
- package/dist/src/commands/import-local.js +4 -5
- package/dist/src/commands/import-local.js.map +1 -1
- package/dist/src/commands/import.d.ts.map +1 -1
- package/dist/src/commands/import.js +3 -2
- package/dist/src/commands/import.js.map +1 -1
- package/dist/src/commands/info.d.ts.map +1 -1
- package/dist/src/commands/info.js +4 -4
- package/dist/src/commands/info.js.map +1 -1
- package/dist/src/commands/install.d.ts.map +1 -1
- package/dist/src/commands/install.js +11 -6
- package/dist/src/commands/install.js.map +1 -1
- package/dist/src/commands/login.d.ts.map +1 -1
- package/dist/src/commands/login.js +37 -0
- package/dist/src/commands/login.js.map +1 -1
- package/dist/src/commands/login.post-login-sync.test.d.ts +2 -0
- package/dist/src/commands/login.post-login-sync.test.d.ts.map +1 -0
- package/dist/src/commands/login.post-login-sync.test.js +120 -0
- package/dist/src/commands/login.post-login-sync.test.js.map +1 -0
- package/dist/src/commands/login.test-helpers.d.ts +7 -0
- package/dist/src/commands/login.test-helpers.d.ts.map +1 -0
- package/dist/src/commands/login.test-helpers.js +44 -0
- package/dist/src/commands/login.test-helpers.js.map +1 -0
- package/dist/src/commands/login.test.js +30 -31
- package/dist/src/commands/login.test.js.map +1 -1
- package/dist/src/commands/manage.d.ts.map +1 -1
- package/dist/src/commands/manage.js +4 -4
- package/dist/src/commands/manage.js.map +1 -1
- package/dist/src/commands/run-registry-sync.d.ts +31 -0
- package/dist/src/commands/run-registry-sync.d.ts.map +1 -0
- package/dist/src/commands/run-registry-sync.js +45 -0
- package/dist/src/commands/run-registry-sync.js.map +1 -0
- package/dist/src/commands/search.d.ts.map +1 -1
- package/dist/src/commands/search.helpers.d.ts +52 -0
- package/dist/src/commands/search.helpers.d.ts.map +1 -0
- package/dist/src/commands/search.helpers.js +95 -0
- package/dist/src/commands/search.helpers.js.map +1 -0
- package/dist/src/commands/search.js +26 -6
- package/dist/src/commands/search.js.map +1 -1
- package/dist/src/commands/search.test.d.ts +10 -0
- package/dist/src/commands/search.test.d.ts.map +1 -0
- package/dist/src/commands/search.test.js +179 -0
- package/dist/src/commands/search.test.js.map +1 -0
- package/dist/src/commands/sync.d.ts.map +1 -1
- package/dist/src/commands/sync.helpers.d.ts +29 -1
- package/dist/src/commands/sync.helpers.d.ts.map +1 -1
- package/dist/src/commands/sync.helpers.js +38 -0
- package/dist/src/commands/sync.helpers.js.map +1 -1
- package/dist/src/commands/sync.js +30 -22
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/utils/open-database.d.ts +27 -0
- package/dist/src/utils/open-database.d.ts.map +1 -0
- package/dist/src/utils/open-database.js +60 -0
- package/dist/src/utils/open-database.js.map +1 -0
- package/dist/src/utils/skills-directory.d.ts.map +1 -1
- package/dist/src/utils/skills-directory.js +3 -3
- package/dist/src/utils/skills-directory.js.map +1 -1
- package/dist/tests/open-database.test.d.ts +2 -0
- package/dist/tests/open-database.test.d.ts.map +1 -0
- package/dist/tests/open-database.test.js +77 -0
- package/dist/tests/open-database.test.js.map +1 -0
- package/dist/tests/search-helpers.test.d.ts +2 -0
- package/dist/tests/search-helpers.test.d.ts.map +1 -0
- package/dist/tests/search-helpers.test.js +110 -0
- package/dist/tests/search-helpers.test.js.map +1 -0
- package/dist/tests/sync.auth-ux.test.d.ts +14 -0
- package/dist/tests/sync.auth-ux.test.d.ts.map +1 -0
- package/dist/tests/sync.auth-ux.test.js +148 -0
- package/dist/tests/sync.auth-ux.test.js.map +1 -0
- package/dist/tests/unit/commands/install.test.js +75 -1
- package/dist/tests/unit/commands/install.test.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Helpers for the `search` command.
|
|
3
|
+
* @see SMI-4917
|
|
4
|
+
*
|
|
5
|
+
* Extracted from `search.ts` pre-emptively so the empty-DB auto-sync logic does
|
|
6
|
+
* not push `search.ts` past the 500-line `audit:standards` gate.
|
|
7
|
+
*/
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import ora from 'ora';
|
|
10
|
+
import { SkillRepository, SyncHistoryRepository, loadStoredAccessToken, } from '@skillsmith/core';
|
|
11
|
+
import { runRegistrySync } from './run-registry-sync.js';
|
|
12
|
+
/** Skip the auto-sync if a sync attempt started within this window. */
|
|
13
|
+
export const AUTO_SYNC_COOLDOWN_MS = 15 * 60_000;
|
|
14
|
+
/**
|
|
15
|
+
* Bootstrap the local registry on a first-time `search` against an empty DB.
|
|
16
|
+
*
|
|
17
|
+
* Bug 3 of SMI-4917: a fresh install (or a login that pre-dates the post-login
|
|
18
|
+
* auto-sync) leaves an empty `skills` table, so the first `search` returns
|
|
19
|
+
* nothing. This helper syncs the registry once, best-effort, when the DB is
|
|
20
|
+
* empty.
|
|
21
|
+
*
|
|
22
|
+
* Bounded (H5) to avoid hammering the registry:
|
|
23
|
+
* - skipped when the DB already has skills,
|
|
24
|
+
* - skipped for anonymous users (no stored token) — they would only hit the
|
|
25
|
+
* trial cap; `search` falls back to whatever is local,
|
|
26
|
+
* - skipped when a sync was attempted within the last 15 minutes (so a string
|
|
27
|
+
* of failed/offline searches does not re-trigger a full sync each time).
|
|
28
|
+
*
|
|
29
|
+
* Never throws: a sync failure downgrades to a warning and `search` proceeds
|
|
30
|
+
* with local results.
|
|
31
|
+
*
|
|
32
|
+
* @param db - An open, schema-initialized CLI database.
|
|
33
|
+
*/
|
|
34
|
+
export async function autoSyncIfEmpty(db) {
|
|
35
|
+
if (new SkillRepository(db).count() > 0)
|
|
36
|
+
return;
|
|
37
|
+
// Anonymous users would only hit the trial cap — skip the auto-sync.
|
|
38
|
+
if (!(await loadStoredAccessToken()))
|
|
39
|
+
return;
|
|
40
|
+
// Skip when a sync was attempted recently (success OR failure).
|
|
41
|
+
const lastAttempt = new SyncHistoryRepository(db).getHistory(1)[0];
|
|
42
|
+
if (lastAttempt) {
|
|
43
|
+
const startedMs = new Date(lastAttempt.startedAt).getTime();
|
|
44
|
+
if (!Number.isNaN(startedMs) && Date.now() - startedMs < AUTO_SYNC_COOLDOWN_MS) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const spinner = ora('No skills found locally — syncing from registry…').start();
|
|
49
|
+
try {
|
|
50
|
+
const result = await runRegistrySync(db);
|
|
51
|
+
spinner.succeed(chalk.green(`Synced ${result.totalProcessed} skills.`));
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
spinner.warn(chalk.yellow('Could not sync — showing local results only.'));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Whether the local `skills` table has no rows.
|
|
59
|
+
*
|
|
60
|
+
* SMI-4926: a 0-result search against an empty index is meaningfully different
|
|
61
|
+
* from a genuine no-match — the registry has not been synced locally yet.
|
|
62
|
+
* Reuses the same `SkillRepository.count()` that `autoSyncIfEmpty` relies on
|
|
63
|
+
* (no raw SQL).
|
|
64
|
+
*
|
|
65
|
+
* @param db - An open, schema-initialized CLI database.
|
|
66
|
+
*/
|
|
67
|
+
export function isLocalIndexEmpty(db) {
|
|
68
|
+
return new SkillRepository(db).count() === 0;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Build a sync-state-aware hint for a 0-result search against an empty index.
|
|
72
|
+
*
|
|
73
|
+
* SMI-4926: `autoSyncIfEmpty` may legitimately skip the sync (anonymous user,
|
|
74
|
+
* or a sync attempted within `AUTO_SYNC_COOLDOWN_MS`), so the hint must not
|
|
75
|
+
* unconditionally claim a sync is running. If the most recent sync attempt
|
|
76
|
+
* started within the cooldown window, the user is told to retry shortly;
|
|
77
|
+
* otherwise they are told to run `skillsmith sync`.
|
|
78
|
+
*
|
|
79
|
+
* Both messages start with a literal `ℹ ` text marker so they remain
|
|
80
|
+
* distinguishable from the yellow no-match message under `NO_COLOR`, and carry
|
|
81
|
+
* leading/trailing newlines to match `displayResults` padding.
|
|
82
|
+
*
|
|
83
|
+
* @param db - An open, schema-initialized CLI database.
|
|
84
|
+
*/
|
|
85
|
+
export function formatEmptyIndexHint(db) {
|
|
86
|
+
const lastAttempt = new SyncHistoryRepository(db).getHistory(1)[0];
|
|
87
|
+
if (lastAttempt) {
|
|
88
|
+
const startedMs = new Date(lastAttempt.startedAt).getTime();
|
|
89
|
+
if (!Number.isNaN(startedMs) && Date.now() - startedMs < AUTO_SYNC_COOLDOWN_MS) {
|
|
90
|
+
return chalk.yellow('\nℹ Your local skill index is still being populated — a sync is in progress. Try this search again shortly.\n');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return chalk.yellow('\nℹ Your local skill index is empty. Run `skillsmith sync` to populate it, then search again.\n');
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=search.helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.helpers.js","sourceRoot":"","sources":["../../../src/commands/search.helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,qBAAqB,GAEtB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,uEAAuE;AACvE,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,GAAG,MAAM,CAAA;AAEhD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAAgB;IACpD,IAAI,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC;QAAE,OAAM;IAE/C,qEAAqE;IACrE,IAAI,CAAC,CAAC,MAAM,qBAAqB,EAAE,CAAC;QAAE,OAAM;IAE5C,gEAAgE;IAChE,MAAM,WAAW,GAAG,IAAI,qBAAqB,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAClE,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;QAC3D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,qBAAqB,EAAE,CAAC;YAC/E,OAAM;QACR,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,kDAAkD,CAAC,CAAC,KAAK,EAAE,CAAA;IAC/E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,CAAC,CAAA;QACxC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,cAAc,UAAU,CAAC,CAAC,CAAA;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAC,CAAA;IAC5E,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAgB;IAChD,OAAO,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC9C,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAgB;IACnD,MAAM,WAAW,GAAG,IAAI,qBAAqB,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAClE,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;QAC3D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,qBAAqB,EAAE,CAAC;YAC/E,OAAO,KAAK,CAAC,MAAM,CACjB,+GAA+G,CAChH,CAAA;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CACjB,iGAAiG,CAClG,CAAA;AACH,CAAC"}
|
|
@@ -7,7 +7,9 @@ import { Command } from 'commander';
|
|
|
7
7
|
import { input, checkbox, number, select } from '@inquirer/prompts';
|
|
8
8
|
import chalk from 'chalk';
|
|
9
9
|
import ora from 'ora';
|
|
10
|
-
import {
|
|
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';
|
|
11
13
|
import { DEFAULT_DB_PATH } from '../config.js';
|
|
12
14
|
import { sanitizeError } from '../utils/sanitize.js';
|
|
13
15
|
import { PAGE_SIZE } from './search-types.js';
|
|
@@ -19,7 +21,9 @@ export { TRUST_TIER_COLORS, formatSecurityStatus, formatSkillRow, displayResults
|
|
|
19
21
|
* Uses iterative while loop instead of recursion for new searches.
|
|
20
22
|
*/
|
|
21
23
|
async function runInteractiveSearch(dbPath) {
|
|
22
|
-
const db = await
|
|
24
|
+
const db = await openCliDatabase(dbPath);
|
|
25
|
+
// SMI-4917 Bug 3: bootstrap the local registry on a first-time search.
|
|
26
|
+
await autoSyncIfEmpty(db);
|
|
23
27
|
const searchService = new SearchService(db);
|
|
24
28
|
console.log(chalk.bold.blue('\n=== Skillsmith Interactive Search ===\n'));
|
|
25
29
|
try {
|
|
@@ -40,9 +44,11 @@ async function runInteractiveSearch(dbPath) {
|
|
|
40
44
|
message: 'Filter by trust tier (select with space, enter to continue):',
|
|
41
45
|
choices: [
|
|
42
46
|
{ name: chalk.green('Verified'), value: 'verified' },
|
|
47
|
+
{ name: chalk.blue('Curated'), value: 'curated' },
|
|
43
48
|
{ name: chalk.yellow('Community'), value: 'community' },
|
|
44
49
|
{ name: chalk.red('Experimental'), value: 'experimental' },
|
|
45
50
|
{ name: chalk.gray('Unknown'), value: 'unknown' },
|
|
51
|
+
{ name: chalk.cyan('Local'), value: 'local' },
|
|
46
52
|
],
|
|
47
53
|
});
|
|
48
54
|
// Step 3: Minimum quality score
|
|
@@ -92,11 +98,18 @@ async function runInteractiveSearch(dbPath) {
|
|
|
92
98
|
if (trustTiersForFilter.length > 1) {
|
|
93
99
|
filteredItems = results.items.filter((r) => trustTiersForFilter.includes(r.skill.trustTier));
|
|
94
100
|
}
|
|
95
|
-
displayResults(filteredItems, results.total, state.offset, PAGE_SIZE);
|
|
96
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
|
+
}
|
|
97
109
|
phase = 'exit';
|
|
98
110
|
continue;
|
|
99
111
|
}
|
|
112
|
+
displayResults(filteredItems, results.total, state.offset, PAGE_SIZE);
|
|
100
113
|
// Build action choices
|
|
101
114
|
const choices = [];
|
|
102
115
|
// Add skill selection options
|
|
@@ -156,7 +169,6 @@ async function runInteractiveSearch(dbPath) {
|
|
|
156
169
|
if (nextAction === 'install') {
|
|
157
170
|
const installSpinner = ora('Installing skill...').start();
|
|
158
171
|
try {
|
|
159
|
-
initializeSchema(db);
|
|
160
172
|
const skillRepo = new SkillRepository(db);
|
|
161
173
|
const skillDependencyRepo = new SkillDependencyRepository(db);
|
|
162
174
|
const registryLookup = {
|
|
@@ -213,7 +225,9 @@ async function runInteractiveSearch(dbPath) {
|
|
|
213
225
|
* Run non-interactive search
|
|
214
226
|
*/
|
|
215
227
|
async function runSearch(query, options) {
|
|
216
|
-
const db = await
|
|
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);
|
|
217
231
|
const searchService = new SearchService(db);
|
|
218
232
|
try {
|
|
219
233
|
// Build search options - only add optional properties when they have values
|
|
@@ -239,6 +253,12 @@ async function runSearch(query, options) {
|
|
|
239
253
|
searchOptions.maxRiskScore = options.maxRisk;
|
|
240
254
|
}
|
|
241
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
|
+
}
|
|
242
262
|
displayResults(results.items, results.total, 0, options.limit);
|
|
243
263
|
}
|
|
244
264
|
finally {
|
|
@@ -269,7 +289,7 @@ Quality Score Formula:
|
|
|
269
289
|
.option('-i, --interactive', 'Launch interactive search mode')
|
|
270
290
|
.option('-d, --db <path>', 'Database file path', DEFAULT_DB_PATH)
|
|
271
291
|
.option('-l, --limit <number>', 'Maximum results to show', '20')
|
|
272
|
-
.option('-t, --tier <tier>', 'Filter by trust tier (verified, community, experimental, unknown)')
|
|
292
|
+
.option('-t, --tier <tier>', 'Filter by trust tier (verified, curated, community, experimental, unknown, local)')
|
|
273
293
|
.option('-c, --category <category>', 'Filter by category (development, testing, devops, documentation, productivity, security)')
|
|
274
294
|
.option('-s, --min-score <number>', 'Minimum quality score (0-100, see above for formula)')
|
|
275
295
|
// SMI-825: Security filters
|
|
@@ -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":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Unit tests for `skillsmith search` empty-index hinting.
|
|
3
|
+
* @see SMI-4926
|
|
4
|
+
*
|
|
5
|
+
* A 0-result search against an EMPTY local index (not yet synced) must surface
|
|
6
|
+
* an actionable, sync-state-aware hint instead of the bare "no skills found
|
|
7
|
+
* matching your criteria" message used for a genuine no-match.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=search.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.test.d.ts","sourceRoot":"","sources":["../../../src/commands/search.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Unit tests for `skillsmith search` empty-index hinting.
|
|
3
|
+
* @see SMI-4926
|
|
4
|
+
*
|
|
5
|
+
* A 0-result search against an EMPTY local index (not yet synced) must surface
|
|
6
|
+
* an actionable, sync-state-aware hint instead of the bare "no skills found
|
|
7
|
+
* matching your criteria" message used for a genuine no-match.
|
|
8
|
+
*/
|
|
9
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
10
|
+
import { SearchService, SkillRepository, SyncHistoryRepository } from '@skillsmith/core';
|
|
11
|
+
import { createTestDatabase, closeDatabase } from '@skillsmith/core/testkit';
|
|
12
|
+
import { displayResults } from './search-formatters.js';
|
|
13
|
+
import { isLocalIndexEmpty, formatEmptyIndexHint, AUTO_SYNC_COOLDOWN_MS } from './search.helpers.js';
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Helpers
|
|
16
|
+
// ============================================================================
|
|
17
|
+
const NO_MATCH_SUBSTRING = 'matching your criteria';
|
|
18
|
+
const HINT_MARKER = 'ℹ';
|
|
19
|
+
/** Strip ANSI color codes so newline-padding assertions are color-agnostic. */
|
|
20
|
+
const ANSI_RE = new RegExp(String.fromCharCode(27) + '\\[[0-9;]*m', 'g');
|
|
21
|
+
function stripAnsi(s) {
|
|
22
|
+
return s.replace(ANSI_RE, '');
|
|
23
|
+
}
|
|
24
|
+
/** Seed one skill so the local index is non-empty. */
|
|
25
|
+
function seedSkill(db) {
|
|
26
|
+
new SkillRepository(db).create({
|
|
27
|
+
id: 'community/auth-helper',
|
|
28
|
+
name: 'auth-helper',
|
|
29
|
+
description: 'Authentication helper skill',
|
|
30
|
+
author: 'community',
|
|
31
|
+
trustTier: 'community',
|
|
32
|
+
tags: ['authentication'],
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Record a sync attempt and force its `started_at` to a given ISO timestamp,
|
|
37
|
+
* since SyncHistoryRepository.startRun() always stamps "now".
|
|
38
|
+
*/
|
|
39
|
+
function seedSyncAttempt(db, startedAt) {
|
|
40
|
+
const id = new SyncHistoryRepository(db).startRun();
|
|
41
|
+
db.prepare('UPDATE sync_history SET started_at = ? WHERE id = ?').run(startedAt, id);
|
|
42
|
+
}
|
|
43
|
+
/** Capture console.log output produced by `fn`. */
|
|
44
|
+
function captureOutput(fn) {
|
|
45
|
+
const lines = [];
|
|
46
|
+
const original = console.log;
|
|
47
|
+
console.log = (...args) => {
|
|
48
|
+
lines.push(args.map((a) => String(a)).join(' '));
|
|
49
|
+
};
|
|
50
|
+
try {
|
|
51
|
+
fn();
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
console.log = original;
|
|
55
|
+
}
|
|
56
|
+
return lines.join('\n');
|
|
57
|
+
}
|
|
58
|
+
// ============================================================================
|
|
59
|
+
// Tests — search output: empty vs no-match vs match
|
|
60
|
+
// ============================================================================
|
|
61
|
+
describe('search — empty-index hinting (SMI-4926)', () => {
|
|
62
|
+
let db;
|
|
63
|
+
beforeEach(async () => {
|
|
64
|
+
db = await createTestDatabase();
|
|
65
|
+
});
|
|
66
|
+
afterEach(() => {
|
|
67
|
+
closeDatabase(db);
|
|
68
|
+
});
|
|
69
|
+
it('empty index + query → shows the hint, not the bare no-match message', () => {
|
|
70
|
+
const results = new SearchService(db).search({ query: 'anything', limit: 20 });
|
|
71
|
+
expect(results.items).toHaveLength(0);
|
|
72
|
+
expect(isLocalIndexEmpty(db)).toBe(true);
|
|
73
|
+
const output = captureOutput(() => {
|
|
74
|
+
if (results.items.length === 0 && isLocalIndexEmpty(db)) {
|
|
75
|
+
console.log(formatEmptyIndexHint(db));
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
displayResults(results.items, results.total, 0, 20);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
expect(output).toContain(HINT_MARKER);
|
|
82
|
+
expect(output).not.toContain(NO_MATCH_SUBSTRING);
|
|
83
|
+
});
|
|
84
|
+
it('populated index + no-match query → shows the bare no-match message, not the hint', () => {
|
|
85
|
+
seedSkill(db);
|
|
86
|
+
const results = new SearchService(db).search({ query: 'zzz-nonexistent-zzz', limit: 20 });
|
|
87
|
+
expect(results.items).toHaveLength(0);
|
|
88
|
+
expect(isLocalIndexEmpty(db)).toBe(false);
|
|
89
|
+
const output = captureOutput(() => {
|
|
90
|
+
if (results.items.length === 0 && isLocalIndexEmpty(db)) {
|
|
91
|
+
console.log(formatEmptyIndexHint(db));
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
displayResults(results.items, results.total, 0, 20);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
expect(output).toContain(NO_MATCH_SUBSTRING);
|
|
98
|
+
expect(output).not.toContain(HINT_MARKER);
|
|
99
|
+
});
|
|
100
|
+
it('populated index + matching query → renders results, no hint', () => {
|
|
101
|
+
seedSkill(db);
|
|
102
|
+
const results = new SearchService(db).search({ query: 'auth', limit: 20 });
|
|
103
|
+
expect(results.items.length).toBeGreaterThan(0);
|
|
104
|
+
const output = captureOutput(() => {
|
|
105
|
+
if (results.items.length === 0 && isLocalIndexEmpty(db)) {
|
|
106
|
+
console.log(formatEmptyIndexHint(db));
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
displayResults(results.items, results.total, 0, 20);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
expect(output).toContain('auth-helper');
|
|
113
|
+
expect(output).not.toContain(HINT_MARKER);
|
|
114
|
+
expect(output).not.toContain(NO_MATCH_SUBSTRING);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
// ============================================================================
|
|
118
|
+
// Tests — isLocalIndexEmpty (pure given a db)
|
|
119
|
+
// ============================================================================
|
|
120
|
+
describe('isLocalIndexEmpty (SMI-4926)', () => {
|
|
121
|
+
let db;
|
|
122
|
+
beforeEach(async () => {
|
|
123
|
+
db = await createTestDatabase();
|
|
124
|
+
});
|
|
125
|
+
afterEach(() => {
|
|
126
|
+
closeDatabase(db);
|
|
127
|
+
});
|
|
128
|
+
it('returns true for a fresh DB with no skills', () => {
|
|
129
|
+
expect(isLocalIndexEmpty(db)).toBe(true);
|
|
130
|
+
});
|
|
131
|
+
it('returns false once a skill is present', () => {
|
|
132
|
+
seedSkill(db);
|
|
133
|
+
expect(isLocalIndexEmpty(db)).toBe(false);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
// ============================================================================
|
|
137
|
+
// Tests — formatEmptyIndexHint (sync-state aware)
|
|
138
|
+
// ============================================================================
|
|
139
|
+
describe('formatEmptyIndexHint (SMI-4926)', () => {
|
|
140
|
+
let db;
|
|
141
|
+
beforeEach(async () => {
|
|
142
|
+
db = await createTestDatabase();
|
|
143
|
+
});
|
|
144
|
+
afterEach(() => {
|
|
145
|
+
closeDatabase(db);
|
|
146
|
+
});
|
|
147
|
+
it('no recent sync attempt → "run `skillsmith sync`" wording with the ℹ prefix', () => {
|
|
148
|
+
const hint = formatEmptyIndexHint(db);
|
|
149
|
+
expect(hint).toContain(HINT_MARKER);
|
|
150
|
+
expect(hint).toContain('skillsmith sync');
|
|
151
|
+
expect(hint).not.toContain('in progress');
|
|
152
|
+
});
|
|
153
|
+
it('stale sync attempt (outside cooldown) → still "run `skillsmith sync`" wording', () => {
|
|
154
|
+
const stale = new Date(Date.now() - AUTO_SYNC_COOLDOWN_MS - 60_000).toISOString();
|
|
155
|
+
seedSyncAttempt(db, stale);
|
|
156
|
+
const hint = formatEmptyIndexHint(db);
|
|
157
|
+
expect(hint).toContain(HINT_MARKER);
|
|
158
|
+
expect(hint).toContain('skillsmith sync');
|
|
159
|
+
expect(hint).not.toContain('in progress');
|
|
160
|
+
});
|
|
161
|
+
it('recent sync attempt (within cooldown) → "in progress" wording with the ℹ prefix', () => {
|
|
162
|
+
const recent = new Date(Date.now() - 60_000).toISOString();
|
|
163
|
+
seedSyncAttempt(db, recent);
|
|
164
|
+
const hint = formatEmptyIndexHint(db);
|
|
165
|
+
expect(hint).toContain(HINT_MARKER);
|
|
166
|
+
expect(hint).toContain('in progress');
|
|
167
|
+
expect(hint).not.toContain('skillsmith sync');
|
|
168
|
+
});
|
|
169
|
+
it('both wordings carry leading and trailing newlines for displayResults padding', () => {
|
|
170
|
+
const noAttempt = stripAnsi(formatEmptyIndexHint(db));
|
|
171
|
+
expect(noAttempt.startsWith('\n')).toBe(true);
|
|
172
|
+
expect(noAttempt.endsWith('\n')).toBe(true);
|
|
173
|
+
seedSyncAttempt(db, new Date(Date.now() - 60_000).toISOString());
|
|
174
|
+
const recent = stripAnsi(formatEmptyIndexHint(db));
|
|
175
|
+
expect(recent.startsWith('\n')).toBe(true);
|
|
176
|
+
expect(recent.endsWith('\n')).toBe(true);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
//# sourceMappingURL=search.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.test.js","sourceRoot":"","sources":["../../../src/commands/search.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/commands/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/commands/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA+bnC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAsB3C;AAED,eAAe,iBAAiB,CAAA"}
|
|
@@ -5,7 +5,35 @@
|
|
|
5
5
|
* governance ceiling. Covers local-skill adapter scanning and warning
|
|
6
6
|
* formatting for the `sync status` subcommand.
|
|
7
7
|
*/
|
|
8
|
-
import { type AdapterError } from '@skillsmith/core';
|
|
8
|
+
import { type AdapterError, type SyncResult } from '@skillsmith/core';
|
|
9
|
+
/**
|
|
10
|
+
* SMI-4482: Detect whether a failed sync was caused by exhausted/absent
|
|
11
|
+
* credentials rather than a transient network or server error.
|
|
12
|
+
*
|
|
13
|
+
* Root cause: on a fresh install (`skillsmith sync` before `skillsmith login`,
|
|
14
|
+
* no `SKILLSMITH_API_KEY`) the API client correctly falls back to the public
|
|
15
|
+
* Supabase anon key and reaches the anonymous IP-trial path. Once the per-IP
|
|
16
|
+
* free-trial limit is exhausted the `skills-search` edge function returns
|
|
17
|
+
* HTTP 401 with body `{"error":"Authentication required", ...}`. `SyncEngine`
|
|
18
|
+
* surfaces that raw string in `SyncResult.errors`, so the CLI used to print a
|
|
19
|
+
* bare `Authentication required` with `Σ Total: 0` and no next step.
|
|
20
|
+
*
|
|
21
|
+
* This matches the 401 auth signal so `sync.ts` can replace the bare error
|
|
22
|
+
* with actionable guidance.
|
|
23
|
+
*
|
|
24
|
+
* @param result - The `SyncResult` returned by the sync engine.
|
|
25
|
+
* @returns `true` when the sync failed solely because no usable credentials
|
|
26
|
+
* were available (anonymous trial exhausted or auth rejected).
|
|
27
|
+
*/
|
|
28
|
+
export declare function isAuthFailure(result: SyncResult): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* SMI-4482: Actionable, multi-line guidance shown when `sync` fails because
|
|
31
|
+
* no credentials are available. Replaces the previous bare
|
|
32
|
+
* `Error: Authentication required` so the user always has a clear next step.
|
|
33
|
+
*
|
|
34
|
+
* @returns Lines to print to stderr, in order.
|
|
35
|
+
*/
|
|
36
|
+
export declare function formatAuthGuidance(): string[];
|
|
9
37
|
/**
|
|
10
38
|
* Scan `~/.claude/skills` for non-fatal adapter warnings.
|
|
11
39
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/sync.helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAgC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"sync.helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/sync.helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAgC,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAGnG;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAKzD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAK7C;AAED;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAiB1E;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAKxE"}
|
|
@@ -8,6 +8,44 @@
|
|
|
8
8
|
import chalk from 'chalk';
|
|
9
9
|
import { createLocalFilesystemAdapter } from '@skillsmith/core';
|
|
10
10
|
import { DEFAULT_SKILLS_DIR } from '../config.js';
|
|
11
|
+
/**
|
|
12
|
+
* SMI-4482: Detect whether a failed sync was caused by exhausted/absent
|
|
13
|
+
* credentials rather than a transient network or server error.
|
|
14
|
+
*
|
|
15
|
+
* Root cause: on a fresh install (`skillsmith sync` before `skillsmith login`,
|
|
16
|
+
* no `SKILLSMITH_API_KEY`) the API client correctly falls back to the public
|
|
17
|
+
* Supabase anon key and reaches the anonymous IP-trial path. Once the per-IP
|
|
18
|
+
* free-trial limit is exhausted the `skills-search` edge function returns
|
|
19
|
+
* HTTP 401 with body `{"error":"Authentication required", ...}`. `SyncEngine`
|
|
20
|
+
* surfaces that raw string in `SyncResult.errors`, so the CLI used to print a
|
|
21
|
+
* bare `Authentication required` with `Σ Total: 0` and no next step.
|
|
22
|
+
*
|
|
23
|
+
* This matches the 401 auth signal so `sync.ts` can replace the bare error
|
|
24
|
+
* with actionable guidance.
|
|
25
|
+
*
|
|
26
|
+
* @param result - The `SyncResult` returned by the sync engine.
|
|
27
|
+
* @returns `true` when the sync failed solely because no usable credentials
|
|
28
|
+
* were available (anonymous trial exhausted or auth rejected).
|
|
29
|
+
*/
|
|
30
|
+
export function isAuthFailure(result) {
|
|
31
|
+
if (result.success || result.totalProcessed > 0) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
return result.errors.some((error) => /authentication required|unauthorized/i.test(error));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* SMI-4482: Actionable, multi-line guidance shown when `sync` fails because
|
|
38
|
+
* no credentials are available. Replaces the previous bare
|
|
39
|
+
* `Error: Authentication required` so the user always has a clear next step.
|
|
40
|
+
*
|
|
41
|
+
* @returns Lines to print to stderr, in order.
|
|
42
|
+
*/
|
|
43
|
+
export function formatAuthGuidance() {
|
|
44
|
+
return [
|
|
45
|
+
chalk.yellow('Sync requires authentication. Run: ') + chalk.cyan('skillsmith login'),
|
|
46
|
+
chalk.dim('Or set SKILLSMITH_API_KEY for headless/CI use.'),
|
|
47
|
+
];
|
|
48
|
+
}
|
|
11
49
|
/**
|
|
12
50
|
* Scan `~/.claude/skills` for non-fatal adapter warnings.
|
|
13
51
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.helpers.js","sourceRoot":"","sources":["../../../src/commands/sync.helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,4BAA4B,
|
|
1
|
+
{"version":3,"file":"sync.helpers.js","sourceRoot":"","sources":["../../../src/commands/sync.helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,4BAA4B,EAAsC,MAAM,kBAAkB,CAAA;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,aAAa,CAAC,MAAkB;IAC9C,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,uCAAuC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;AAC3F,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,qCAAqC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACpF,KAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC;KAC5D,CAAA;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,4BAA4B,CAAC;YAC3C,EAAE,EAAE,mBAAmB;YACvB,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,kBAAkB;YAC3B,cAAc,EAAE,IAAI;SACrB,CAAC,CAAA;QACF,MAAM,OAAO,CAAC,UAAU,EAAE,CAAA;QAC1B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACvC,OAAO,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAA;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAwB;IAC5D,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAA;QACjF,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;AACJ,CAAC"}
|