@skillsmith/cli 0.7.2 → 0.7.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 +9 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/cli.js +44014 -0
- package/package.json +21 -11
- package/dist/src/commands/__meta__/telemetry-coverage.test.d.ts +0 -20
- package/dist/src/commands/__meta__/telemetry-coverage.test.d.ts.map +0 -1
- package/dist/src/commands/__meta__/telemetry-coverage.test.js +0 -118
- package/dist/src/commands/__meta__/telemetry-coverage.test.js.map +0 -1
- package/dist/src/commands/ab-test.d.ts +0 -29
- package/dist/src/commands/ab-test.d.ts.map +0 -1
- package/dist/src/commands/ab-test.js +0 -226
- package/dist/src/commands/ab-test.js.map +0 -1
- package/dist/src/commands/ab-test.test.d.ts +0 -7
- package/dist/src/commands/ab-test.test.d.ts.map +0 -1
- package/dist/src/commands/ab-test.test.js +0 -255
- package/dist/src/commands/ab-test.test.js.map +0 -1
- package/dist/src/commands/analyze.d.ts +0 -14
- package/dist/src/commands/analyze.d.ts.map +0 -1
- package/dist/src/commands/analyze.js +0 -191
- package/dist/src/commands/analyze.js.map +0 -1
- package/dist/src/commands/audit-collisions.d.ts +0 -68
- package/dist/src/commands/audit-collisions.d.ts.map +0 -1
- package/dist/src/commands/audit-collisions.js +0 -309
- package/dist/src/commands/audit-collisions.js.map +0 -1
- package/dist/src/commands/audit-sources.action.d.ts +0 -37
- package/dist/src/commands/audit-sources.action.d.ts.map +0 -1
- package/dist/src/commands/audit-sources.action.js +0 -321
- package/dist/src/commands/audit-sources.action.js.map +0 -1
- package/dist/src/commands/audit-sources.d.ts +0 -37
- package/dist/src/commands/audit-sources.d.ts.map +0 -1
- package/dist/src/commands/audit-sources.js +0 -55
- package/dist/src/commands/audit-sources.js.map +0 -1
- package/dist/src/commands/audit-sources.test.d.ts +0 -9
- package/dist/src/commands/audit-sources.test.d.ts.map +0 -1
- package/dist/src/commands/audit-sources.test.js +0 -228
- package/dist/src/commands/audit-sources.test.js.map +0 -1
- package/dist/src/commands/audit.d.ts +0 -40
- package/dist/src/commands/audit.d.ts.map +0 -1
- package/dist/src/commands/audit.js +0 -223
- package/dist/src/commands/audit.js.map +0 -1
- package/dist/src/commands/audit.test.d.ts +0 -8
- package/dist/src/commands/audit.test.d.ts.map +0 -1
- package/dist/src/commands/audit.test.js +0 -97
- package/dist/src/commands/audit.test.js.map +0 -1
- package/dist/src/commands/author/index.d.ts +0 -17
- package/dist/src/commands/author/index.d.ts.map +0 -1
- package/dist/src/commands/author/index.js +0 -21
- package/dist/src/commands/author/index.js.map +0 -1
- package/dist/src/commands/author/init.action.d.ts +0 -29
- package/dist/src/commands/author/init.action.d.ts.map +0 -1
- package/dist/src/commands/author/init.action.js +0 -131
- package/dist/src/commands/author/init.action.js.map +0 -1
- package/dist/src/commands/author/init.d.ts +0 -36
- package/dist/src/commands/author/init.d.ts.map +0 -1
- package/dist/src/commands/author/init.helpers.d.ts +0 -80
- package/dist/src/commands/author/init.helpers.d.ts.map +0 -1
- package/dist/src/commands/author/init.helpers.js +0 -107
- package/dist/src/commands/author/init.helpers.js.map +0 -1
- package/dist/src/commands/author/init.js +0 -320
- package/dist/src/commands/author/init.js.map +0 -1
- package/dist/src/commands/author/mcp-init.d.ts +0 -21
- package/dist/src/commands/author/mcp-init.d.ts.map +0 -1
- package/dist/src/commands/author/mcp-init.js +0 -202
- package/dist/src/commands/author/mcp-init.js.map +0 -1
- package/dist/src/commands/author/subagent.d.ts +0 -23
- package/dist/src/commands/author/subagent.d.ts.map +0 -1
- package/dist/src/commands/author/subagent.js +0 -174
- package/dist/src/commands/author/subagent.js.map +0 -1
- package/dist/src/commands/author/transform.d.ts +0 -23
- package/dist/src/commands/author/transform.d.ts.map +0 -1
- package/dist/src/commands/author/transform.js +0 -149
- package/dist/src/commands/author/transform.js.map +0 -1
- package/dist/src/commands/author/utils.d.ts +0 -27
- package/dist/src/commands/author/utils.d.ts.map +0 -1
- package/dist/src/commands/author/utils.js +0 -118
- package/dist/src/commands/author/utils.js.map +0 -1
- package/dist/src/commands/config.d.ts +0 -57
- package/dist/src/commands/config.d.ts.map +0 -1
- package/dist/src/commands/config.js +0 -226
- package/dist/src/commands/config.js.map +0 -1
- package/dist/src/commands/create.d.ts +0 -43
- package/dist/src/commands/create.d.ts.map +0 -1
- package/dist/src/commands/create.js +0 -336
- package/dist/src/commands/create.js.map +0 -1
- package/dist/src/commands/diff.d.ts +0 -21
- package/dist/src/commands/diff.d.ts.map +0 -1
- package/dist/src/commands/diff.js +0 -227
- package/dist/src/commands/diff.js.map +0 -1
- package/dist/src/commands/diff.test.d.ts +0 -6
- package/dist/src/commands/diff.test.d.ts.map +0 -1
- package/dist/src/commands/diff.test.js +0 -327
- package/dist/src/commands/diff.test.js.map +0 -1
- package/dist/src/commands/import-local.d.ts +0 -28
- package/dist/src/commands/import-local.d.ts.map +0 -1
- package/dist/src/commands/import-local.helpers.d.ts +0 -28
- package/dist/src/commands/import-local.helpers.d.ts.map +0 -1
- package/dist/src/commands/import-local.helpers.js +0 -166
- package/dist/src/commands/import-local.helpers.js.map +0 -1
- package/dist/src/commands/import-local.js +0 -273
- package/dist/src/commands/import-local.js.map +0 -1
- package/dist/src/commands/import-local.types.d.ts +0 -59
- package/dist/src/commands/import-local.types.d.ts.map +0 -1
- package/dist/src/commands/import-local.types.js +0 -2
- package/dist/src/commands/import-local.types.js.map +0 -1
- package/dist/src/commands/import.d.ts +0 -47
- package/dist/src/commands/import.d.ts.map +0 -1
- package/dist/src/commands/import.js +0 -314
- package/dist/src/commands/import.js.map +0 -1
- package/dist/src/commands/index.d.ts +0 -28
- package/dist/src/commands/index.d.ts.map +0 -1
- package/dist/src/commands/index.js +0 -50
- package/dist/src/commands/index.js.map +0 -1
- package/dist/src/commands/info.d.ts +0 -19
- package/dist/src/commands/info.d.ts.map +0 -1
- package/dist/src/commands/info.js +0 -110
- package/dist/src/commands/info.js.map +0 -1
- package/dist/src/commands/install-skill.d.ts +0 -16
- package/dist/src/commands/install-skill.d.ts.map +0 -1
- package/dist/src/commands/install-skill.js +0 -155
- package/dist/src/commands/install-skill.js.map +0 -1
- package/dist/src/commands/install.d.ts +0 -34
- package/dist/src/commands/install.d.ts.map +0 -1
- package/dist/src/commands/install.js +0 -311
- package/dist/src/commands/install.js.map +0 -1
- package/dist/src/commands/inventory.action.d.ts +0 -55
- package/dist/src/commands/inventory.action.d.ts.map +0 -1
- package/dist/src/commands/inventory.action.js +0 -179
- package/dist/src/commands/inventory.action.js.map +0 -1
- package/dist/src/commands/inventory.action.test.d.ts +0 -19
- package/dist/src/commands/inventory.action.test.d.ts.map +0 -1
- package/dist/src/commands/inventory.action.test.js +0 -371
- package/dist/src/commands/inventory.action.test.js.map +0 -1
- package/dist/src/commands/inventory.d.ts +0 -21
- package/dist/src/commands/inventory.d.ts.map +0 -1
- package/dist/src/commands/inventory.js +0 -42
- package/dist/src/commands/inventory.js.map +0 -1
- package/dist/src/commands/login.d.ts +0 -7
- package/dist/src/commands/login.d.ts.map +0 -1
- package/dist/src/commands/login.js +0 -323
- package/dist/src/commands/login.js.map +0 -1
- package/dist/src/commands/login.test-helpers.d.ts +0 -7
- package/dist/src/commands/login.test-helpers.d.ts.map +0 -1
- package/dist/src/commands/login.test-helpers.js +0 -44
- package/dist/src/commands/login.test-helpers.js.map +0 -1
- package/dist/src/commands/login.test.d.ts +0 -2
- package/dist/src/commands/login.test.d.ts.map +0 -1
- package/dist/src/commands/login.test.js +0 -387
- package/dist/src/commands/login.test.js.map +0 -1
- package/dist/src/commands/logout.d.ts +0 -15
- package/dist/src/commands/logout.d.ts.map +0 -1
- package/dist/src/commands/logout.js +0 -54
- package/dist/src/commands/logout.js.map +0 -1
- package/dist/src/commands/logout.test.d.ts +0 -8
- package/dist/src/commands/logout.test.d.ts.map +0 -1
- package/dist/src/commands/logout.test.js +0 -137
- package/dist/src/commands/logout.test.js.map +0 -1
- package/dist/src/commands/manage.d.ts +0 -19
- package/dist/src/commands/manage.d.ts.map +0 -1
- package/dist/src/commands/manage.js +0 -346
- package/dist/src/commands/manage.js.map +0 -1
- package/dist/src/commands/merge.d.ts +0 -24
- package/dist/src/commands/merge.d.ts.map +0 -1
- package/dist/src/commands/merge.js +0 -168
- package/dist/src/commands/merge.js.map +0 -1
- package/dist/src/commands/pin.d.ts +0 -26
- package/dist/src/commands/pin.d.ts.map +0 -1
- package/dist/src/commands/pin.js +0 -138
- package/dist/src/commands/pin.js.map +0 -1
- package/dist/src/commands/pin.test.d.ts +0 -6
- package/dist/src/commands/pin.test.d.ts.map +0 -1
- package/dist/src/commands/pin.test.js +0 -206
- package/dist/src/commands/pin.test.js.map +0 -1
- package/dist/src/commands/recommend-scoring.d.ts +0 -29
- package/dist/src/commands/recommend-scoring.d.ts.map +0 -1
- package/dist/src/commands/recommend-scoring.js +0 -141
- package/dist/src/commands/recommend-scoring.js.map +0 -1
- package/dist/src/commands/recommend.d.ts +0 -15
- package/dist/src/commands/recommend.d.ts.map +0 -1
- package/dist/src/commands/recommend.helpers.d.ts +0 -44
- package/dist/src/commands/recommend.helpers.d.ts.map +0 -1
- package/dist/src/commands/recommend.helpers.js +0 -303
- package/dist/src/commands/recommend.helpers.js.map +0 -1
- package/dist/src/commands/recommend.js +0 -198
- package/dist/src/commands/recommend.js.map +0 -1
- package/dist/src/commands/recommend.types.d.ts +0 -66
- package/dist/src/commands/recommend.types.d.ts.map +0 -1
- package/dist/src/commands/recommend.types.js +0 -14
- package/dist/src/commands/recommend.types.js.map +0 -1
- package/dist/src/commands/run-registry-sync.d.ts +0 -31
- package/dist/src/commands/run-registry-sync.d.ts.map +0 -1
- package/dist/src/commands/run-registry-sync.js +0 -45
- package/dist/src/commands/run-registry-sync.js.map +0 -1
- package/dist/src/commands/search-formatters.d.ts +0 -36
- package/dist/src/commands/search-formatters.d.ts.map +0 -1
- package/dist/src/commands/search-formatters.js +0 -132
- package/dist/src/commands/search-formatters.js.map +0 -1
- package/dist/src/commands/search-types.d.ts +0 -46
- package/dist/src/commands/search-types.d.ts.map +0 -1
- package/dist/src/commands/search-types.js +0 -12
- package/dist/src/commands/search-types.js.map +0 -1
- package/dist/src/commands/search.action.d.ts +0 -16
- package/dist/src/commands/search.action.d.ts.map +0 -1
- package/dist/src/commands/search.action.js +0 -384
- package/dist/src/commands/search.action.js.map +0 -1
- package/dist/src/commands/search.d.ts +0 -18
- package/dist/src/commands/search.d.ts.map +0 -1
- package/dist/src/commands/search.helpers.d.ts +0 -52
- package/dist/src/commands/search.helpers.d.ts.map +0 -1
- package/dist/src/commands/search.helpers.js +0 -95
- package/dist/src/commands/search.helpers.js.map +0 -1
- package/dist/src/commands/search.js +0 -48
- package/dist/src/commands/search.js.map +0 -1
- package/dist/src/commands/search.test.d.ts +0 -10
- package/dist/src/commands/search.test.d.ts.map +0 -1
- package/dist/src/commands/search.test.js +0 -179
- package/dist/src/commands/search.test.js.map +0 -1
- package/dist/src/commands/sync.action.d.ts +0 -39
- package/dist/src/commands/sync.action.d.ts.map +0 -1
- package/dist/src/commands/sync.action.js +0 -353
- package/dist/src/commands/sync.action.js.map +0 -1
- package/dist/src/commands/sync.d.ts +0 -24
- package/dist/src/commands/sync.d.ts.map +0 -1
- package/dist/src/commands/sync.helpers.d.ts +0 -55
- package/dist/src/commands/sync.helpers.d.ts.map +0 -1
- package/dist/src/commands/sync.helpers.js +0 -90
- package/dist/src/commands/sync.helpers.js.map +0 -1
- package/dist/src/commands/sync.js +0 -101
- package/dist/src/commands/sync.js.map +0 -1
- package/dist/src/commands/telemetry.action.d.ts +0 -38
- package/dist/src/commands/telemetry.action.d.ts.map +0 -1
- package/dist/src/commands/telemetry.action.js +0 -350
- package/dist/src/commands/telemetry.action.js.map +0 -1
- package/dist/src/commands/telemetry.d.ts +0 -30
- package/dist/src/commands/telemetry.d.ts.map +0 -1
- package/dist/src/commands/telemetry.helpers.d.ts +0 -58
- package/dist/src/commands/telemetry.helpers.d.ts.map +0 -1
- package/dist/src/commands/telemetry.helpers.js +0 -173
- package/dist/src/commands/telemetry.helpers.js.map +0 -1
- package/dist/src/commands/telemetry.helpers.test.d.ts +0 -15
- package/dist/src/commands/telemetry.helpers.test.d.ts.map +0 -1
- package/dist/src/commands/telemetry.helpers.test.js +0 -240
- package/dist/src/commands/telemetry.helpers.test.js.map +0 -1
- package/dist/src/commands/telemetry.js +0 -65
- package/dist/src/commands/telemetry.js.map +0 -1
- package/dist/src/commands/telemetry.test.d.ts +0 -18
- package/dist/src/commands/telemetry.test.d.ts.map +0 -1
- package/dist/src/commands/telemetry.test.js +0 -401
- package/dist/src/commands/telemetry.test.js.map +0 -1
- package/dist/src/commands/whoami.d.ts +0 -15
- package/dist/src/commands/whoami.d.ts.map +0 -1
- package/dist/src/commands/whoami.js +0 -55
- package/dist/src/commands/whoami.js.map +0 -1
- package/dist/src/commands/whoami.test.d.ts +0 -8
- package/dist/src/commands/whoami.test.d.ts.map +0 -1
- package/dist/src/commands/whoami.test.js +0 -133
- package/dist/src/commands/whoami.test.js.map +0 -1
- package/dist/src/config.d.ts +0 -29
- package/dist/src/config.d.ts.map +0 -1
- package/dist/src/config.js +0 -34
- package/dist/src/config.js.map +0 -1
- package/dist/src/index.d.ts +0 -22
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -117
- package/dist/src/index.js.map +0 -1
- package/dist/src/templates/changelog.md.template.d.ts +0 -8
- package/dist/src/templates/changelog.md.template.d.ts.map +0 -1
- package/dist/src/templates/changelog.md.template.js +0 -19
- package/dist/src/templates/changelog.md.template.js.map +0 -1
- package/dist/src/templates/index.d.ts +0 -11
- package/dist/src/templates/index.d.ts.map +0 -1
- package/dist/src/templates/index.js +0 -11
- package/dist/src/templates/index.js.map +0 -1
- package/dist/src/templates/mcp-server.template.d.ts +0 -82
- package/dist/src/templates/mcp-server.template.d.ts.map +0 -1
- package/dist/src/templates/mcp-server.template.js +0 -430
- package/dist/src/templates/mcp-server.template.js.map +0 -1
- package/dist/src/templates/mcp-server.template.snippets.d.ts +0 -51
- package/dist/src/templates/mcp-server.template.snippets.d.ts.map +0 -1
- package/dist/src/templates/mcp-server.template.snippets.js +0 -162
- package/dist/src/templates/mcp-server.template.snippets.js.map +0 -1
- package/dist/src/templates/mcp-template-handlers.d.ts +0 -33
- package/dist/src/templates/mcp-template-handlers.d.ts.map +0 -1
- package/dist/src/templates/mcp-template-handlers.js +0 -106
- package/dist/src/templates/mcp-template-handlers.js.map +0 -1
- package/dist/src/templates/mcp-template-types.d.ts +0 -48
- package/dist/src/templates/mcp-template-types.d.ts.map +0 -1
- package/dist/src/templates/mcp-template-types.js +0 -18
- package/dist/src/templates/mcp-template-types.js.map +0 -1
- package/dist/src/templates/readme.md.template.d.ts +0 -8
- package/dist/src/templates/readme.md.template.d.ts.map +0 -1
- package/dist/src/templates/readme.md.template.js +0 -86
- package/dist/src/templates/readme.md.template.js.map +0 -1
- package/dist/src/templates/skill.md.template.d.ts +0 -8
- package/dist/src/templates/skill.md.template.d.ts.map +0 -1
- package/dist/src/templates/skill.md.template.js +0 -97
- package/dist/src/templates/skill.md.template.js.map +0 -1
- package/dist/src/templates/subagent.md.template.d.ts +0 -38
- package/dist/src/templates/subagent.md.template.d.ts.map +0 -1
- package/dist/src/templates/subagent.md.template.js +0 -128
- package/dist/src/templates/subagent.md.template.js.map +0 -1
- package/dist/src/utils/errors.d.ts +0 -52
- package/dist/src/utils/errors.d.ts.map +0 -1
- package/dist/src/utils/errors.js +0 -58
- package/dist/src/utils/errors.js.map +0 -1
- package/dist/src/utils/formatters.d.ts +0 -39
- package/dist/src/utils/formatters.d.ts.map +0 -1
- package/dist/src/utils/formatters.js +0 -69
- package/dist/src/utils/formatters.js.map +0 -1
- package/dist/src/utils/license-types.d.ts +0 -88
- package/dist/src/utils/license-types.d.ts.map +0 -1
- package/dist/src/utils/license-types.js +0 -60
- package/dist/src/utils/license-types.js.map +0 -1
- package/dist/src/utils/license-validation.d.ts +0 -61
- package/dist/src/utils/license-validation.d.ts.map +0 -1
- package/dist/src/utils/license-validation.js +0 -198
- package/dist/src/utils/license-validation.js.map +0 -1
- package/dist/src/utils/license.d.ts +0 -56
- package/dist/src/utils/license.d.ts.map +0 -1
- package/dist/src/utils/license.js +0 -163
- package/dist/src/utils/license.js.map +0 -1
- package/dist/src/utils/license.test.d.ts +0 -7
- package/dist/src/utils/license.test.d.ts.map +0 -1
- package/dist/src/utils/license.test.js +0 -308
- package/dist/src/utils/license.test.js.map +0 -1
- package/dist/src/utils/manifest.d.ts +0 -121
- package/dist/src/utils/manifest.d.ts.map +0 -1
- package/dist/src/utils/manifest.js +0 -133
- package/dist/src/utils/manifest.js.map +0 -1
- package/dist/src/utils/manifest.test.d.ts +0 -20
- package/dist/src/utils/manifest.test.d.ts.map +0 -1
- package/dist/src/utils/manifest.test.js +0 -344
- package/dist/src/utils/manifest.test.js.map +0 -1
- package/dist/src/utils/node-version.d.ts +0 -41
- package/dist/src/utils/node-version.d.ts.map +0 -1
- package/dist/src/utils/node-version.js +0 -123
- package/dist/src/utils/node-version.js.map +0 -1
- package/dist/src/utils/open-database.d.ts +0 -35
- package/dist/src/utils/open-database.d.ts.map +0 -1
- package/dist/src/utils/open-database.js +0 -73
- package/dist/src/utils/open-database.js.map +0 -1
- package/dist/src/utils/require-tier.d.ts +0 -38
- package/dist/src/utils/require-tier.d.ts.map +0 -1
- package/dist/src/utils/require-tier.js +0 -74
- package/dist/src/utils/require-tier.js.map +0 -1
- package/dist/src/utils/sanitize.d.ts +0 -30
- package/dist/src/utils/sanitize.d.ts.map +0 -1
- package/dist/src/utils/sanitize.js +0 -45
- package/dist/src/utils/sanitize.js.map +0 -1
- package/dist/src/utils/skill-name.d.ts +0 -19
- package/dist/src/utils/skill-name.d.ts.map +0 -1
- package/dist/src/utils/skill-name.js +0 -26
- package/dist/src/utils/skill-name.js.map +0 -1
- package/dist/src/utils/skills-directory.d.ts +0 -95
- package/dist/src/utils/skills-directory.d.ts.map +0 -1
- package/dist/src/utils/skills-directory.js +0 -285
- package/dist/src/utils/skills-directory.js.map +0 -1
- package/dist/src/utils/startup-header-gate.d.ts +0 -29
- package/dist/src/utils/startup-header-gate.d.ts.map +0 -1
- package/dist/src/utils/startup-header-gate.js +0 -44
- package/dist/src/utils/startup-header-gate.js.map +0 -1
- package/dist/src/utils/startup-header-gate.test.d.ts +0 -2
- package/dist/src/utils/startup-header-gate.test.d.ts.map +0 -1
- package/dist/src/utils/startup-header-gate.test.js +0 -46
- package/dist/src/utils/startup-header-gate.test.js.map +0 -1
- package/dist/src/utils/tool-analyzer.d.ts +0 -54
- package/dist/src/utils/tool-analyzer.d.ts.map +0 -1
- package/dist/src/utils/tool-analyzer.js +0 -156
- package/dist/src/utils/tool-analyzer.js.map +0 -1
- package/dist/src/version.d.ts +0 -2
- package/dist/src/version.d.ts.map +0 -1
- package/dist/src/version.js +0 -24
- package/dist/src/version.js.map +0 -1
- package/dist/tests/audit-collisions.test.d.ts +0 -42
- package/dist/tests/audit-collisions.test.d.ts.map +0 -1
- package/dist/tests/audit-collisions.test.js +0 -370
- package/dist/tests/audit-collisions.test.js.map +0 -1
- package/dist/tests/audit-restructure.test.d.ts +0 -15
- package/dist/tests/audit-restructure.test.d.ts.map +0 -1
- package/dist/tests/audit-restructure.test.js +0 -151
- package/dist/tests/audit-restructure.test.js.map +0 -1
- package/dist/tests/author.test.d.ts +0 -5
- package/dist/tests/author.test.d.ts.map +0 -1
- package/dist/tests/author.test.js +0 -653
- package/dist/tests/author.test.js.map +0 -1
- package/dist/tests/config.test.d.ts +0 -33
- package/dist/tests/config.test.d.ts.map +0 -1
- package/dist/tests/config.test.js +0 -240
- package/dist/tests/config.test.js.map +0 -1
- package/dist/tests/create.test.d.ts +0 -5
- package/dist/tests/create.test.d.ts.map +0 -1
- package/dist/tests/create.test.js +0 -449
- package/dist/tests/create.test.js.map +0 -1
- package/dist/tests/e2e/audit-sources-affix.test.d.ts +0 -11
- package/dist/tests/e2e/audit-sources-affix.test.d.ts.map +0 -1
- package/dist/tests/e2e/audit-sources-affix.test.js +0 -121
- package/dist/tests/e2e/audit-sources-affix.test.js.map +0 -1
- package/dist/tests/e2e/audit-sources-apply.test.d.ts +0 -13
- package/dist/tests/e2e/audit-sources-apply.test.d.ts.map +0 -1
- package/dist/tests/e2e/audit-sources-apply.test.js +0 -166
- package/dist/tests/e2e/audit-sources-apply.test.js.map +0 -1
- package/dist/tests/e2e/audit-sources-recovery.test.d.ts +0 -15
- package/dist/tests/e2e/audit-sources-recovery.test.d.ts.map +0 -1
- package/dist/tests/e2e/audit-sources-recovery.test.js +0 -179
- package/dist/tests/e2e/audit-sources-recovery.test.js.map +0 -1
- package/dist/tests/e2e/audit-sources-roundtrip.test.d.ts +0 -23
- package/dist/tests/e2e/audit-sources-roundtrip.test.d.ts.map +0 -1
- package/dist/tests/e2e/audit-sources-roundtrip.test.js +0 -139
- package/dist/tests/e2e/audit-sources-roundtrip.test.js.map +0 -1
- package/dist/tests/e2e/author.e2e.test.d.ts +0 -9
- package/dist/tests/e2e/author.e2e.test.d.ts.map +0 -1
- package/dist/tests/e2e/author.e2e.test.js +0 -666
- package/dist/tests/e2e/author.e2e.test.js.map +0 -1
- package/dist/tests/e2e/import.e2e.test.d.ts +0 -10
- package/dist/tests/e2e/import.e2e.test.d.ts.map +0 -1
- package/dist/tests/e2e/import.e2e.test.js +0 -213
- package/dist/tests/e2e/import.e2e.test.js.map +0 -1
- package/dist/tests/e2e/manage.e2e.test.d.ts +0 -9
- package/dist/tests/e2e/manage.e2e.test.d.ts.map +0 -1
- package/dist/tests/e2e/manage.e2e.test.js +0 -277
- package/dist/tests/e2e/manage.e2e.test.js.map +0 -1
- package/dist/tests/e2e/search.e2e.test.d.ts +0 -10
- package/dist/tests/e2e/search.e2e.test.d.ts.map +0 -1
- package/dist/tests/e2e/search.e2e.test.js +0 -324
- package/dist/tests/e2e/search.e2e.test.js.map +0 -1
- package/dist/tests/e2e/test-config.d.ts +0 -39
- package/dist/tests/e2e/test-config.d.ts.map +0 -1
- package/dist/tests/e2e/test-config.js +0 -44
- package/dist/tests/e2e/test-config.js.map +0 -1
- package/dist/tests/e2e/utils/baseline-collector.d.ts +0 -107
- package/dist/tests/e2e/utils/baseline-collector.d.ts.map +0 -1
- package/dist/tests/e2e/utils/baseline-collector.js +0 -211
- package/dist/tests/e2e/utils/baseline-collector.js.map +0 -1
- package/dist/tests/e2e/utils/hardcoded-detector.d.ts +0 -46
- package/dist/tests/e2e/utils/hardcoded-detector.d.ts.map +0 -1
- package/dist/tests/e2e/utils/hardcoded-detector.js +0 -238
- package/dist/tests/e2e/utils/hardcoded-detector.js.map +0 -1
- package/dist/tests/e2e/utils/index.d.ts +0 -12
- package/dist/tests/e2e/utils/index.d.ts.map +0 -1
- package/dist/tests/e2e/utils/index.js +0 -12
- package/dist/tests/e2e/utils/index.js.map +0 -1
- package/dist/tests/e2e/utils/linear-reporter.d.ts +0 -60
- package/dist/tests/e2e/utils/linear-reporter.d.ts.map +0 -1
- package/dist/tests/e2e/utils/linear-reporter.js +0 -223
- package/dist/tests/e2e/utils/linear-reporter.js.map +0 -1
- package/dist/tests/e2e/utils/mock-github.d.ts +0 -23
- package/dist/tests/e2e/utils/mock-github.d.ts.map +0 -1
- package/dist/tests/e2e/utils/mock-github.js +0 -60
- package/dist/tests/e2e/utils/mock-github.js.map +0 -1
- package/dist/tests/e2e/utils/mock-prompts.d.ts +0 -19
- package/dist/tests/e2e/utils/mock-prompts.d.ts.map +0 -1
- package/dist/tests/e2e/utils/mock-prompts.js +0 -48
- package/dist/tests/e2e/utils/mock-prompts.js.map +0 -1
- package/dist/tests/e2e/utils/source-recovery-fixture.d.ts +0 -49
- package/dist/tests/e2e/utils/source-recovery-fixture.d.ts.map +0 -1
- package/dist/tests/e2e/utils/source-recovery-fixture.js +0 -106
- package/dist/tests/e2e/utils/source-recovery-fixture.js.map +0 -1
- package/dist/tests/embedding-probe-stdio.test.d.ts +0 -11
- package/dist/tests/embedding-probe-stdio.test.d.ts.map +0 -1
- package/dist/tests/embedding-probe-stdio.test.js +0 -58
- package/dist/tests/embedding-probe-stdio.test.js.map +0 -1
- package/dist/tests/import.test.d.ts +0 -5
- package/dist/tests/import.test.d.ts.map +0 -1
- package/dist/tests/import.test.js +0 -11
- package/dist/tests/import.test.js.map +0 -1
- package/dist/tests/init.test.d.ts +0 -30
- package/dist/tests/init.test.d.ts.map +0 -1
- package/dist/tests/init.test.js +0 -357
- package/dist/tests/init.test.js.map +0 -1
- package/dist/tests/install-multi-client.test.d.ts +0 -2
- package/dist/tests/install-multi-client.test.d.ts.map +0 -1
- package/dist/tests/install-multi-client.test.js +0 -202
- package/dist/tests/install-multi-client.test.js.map +0 -1
- package/dist/tests/install-quarantine.test.d.ts +0 -10
- package/dist/tests/install-quarantine.test.d.ts.map +0 -1
- package/dist/tests/install-quarantine.test.js +0 -86
- package/dist/tests/install-quarantine.test.js.map +0 -1
- package/dist/tests/install-skill.test.d.ts +0 -8
- package/dist/tests/install-skill.test.d.ts.map +0 -1
- package/dist/tests/install-skill.test.js +0 -414
- package/dist/tests/install-skill.test.js.map +0 -1
- package/dist/tests/integration/import-local.test.d.ts +0 -2
- package/dist/tests/integration/import-local.test.d.ts.map +0 -1
- package/dist/tests/integration/import-local.test.js +0 -158
- package/dist/tests/integration/import-local.test.js.map +0 -1
- package/dist/tests/license-validation.test.d.ts +0 -8
- package/dist/tests/license-validation.test.d.ts.map +0 -1
- package/dist/tests/license-validation.test.js +0 -186
- package/dist/tests/license-validation.test.js.map +0 -1
- package/dist/tests/manage.test.d.ts +0 -5
- package/dist/tests/manage.test.d.ts.map +0 -1
- package/dist/tests/manage.test.js +0 -495
- package/dist/tests/manage.test.js.map +0 -1
- package/dist/tests/mcp-server-template.test.d.ts +0 -7
- package/dist/tests/mcp-server-template.test.d.ts.map +0 -1
- package/dist/tests/mcp-server-template.test.js +0 -372
- package/dist/tests/mcp-server-template.test.js.map +0 -1
- package/dist/tests/node-version.test.d.ts +0 -8
- package/dist/tests/node-version.test.d.ts.map +0 -1
- package/dist/tests/node-version.test.js +0 -200
- package/dist/tests/node-version.test.js.map +0 -1
- package/dist/tests/open-database.test.d.ts +0 -2
- package/dist/tests/open-database.test.d.ts.map +0 -1
- package/dist/tests/open-database.test.js +0 -77
- package/dist/tests/open-database.test.js.map +0 -1
- package/dist/tests/recommend-helpers.test.d.ts +0 -9
- package/dist/tests/recommend-helpers.test.d.ts.map +0 -1
- package/dist/tests/recommend-helpers.test.js +0 -308
- package/dist/tests/recommend-helpers.test.js.map +0 -1
- package/dist/tests/recommend-scoring.test.d.ts +0 -8
- package/dist/tests/recommend-scoring.test.d.ts.map +0 -1
- package/dist/tests/recommend-scoring.test.js +0 -184
- package/dist/tests/recommend-scoring.test.js.map +0 -1
- package/dist/tests/recommend.errors.test.d.ts +0 -8
- package/dist/tests/recommend.errors.test.d.ts.map +0 -1
- package/dist/tests/recommend.errors.test.js +0 -232
- package/dist/tests/recommend.errors.test.js.map +0 -1
- package/dist/tests/recommend.filters.test.d.ts +0 -9
- package/dist/tests/recommend.filters.test.d.ts.map +0 -1
- package/dist/tests/recommend.filters.test.js +0 -235
- package/dist/tests/recommend.filters.test.js.map +0 -1
- package/dist/tests/recommend.test-helpers.d.ts +0 -66
- package/dist/tests/recommend.test-helpers.d.ts.map +0 -1
- package/dist/tests/recommend.test-helpers.js +0 -79
- package/dist/tests/recommend.test-helpers.js.map +0 -1
- package/dist/tests/recommend.test.d.ts +0 -11
- package/dist/tests/recommend.test.d.ts.map +0 -1
- package/dist/tests/recommend.test.js +0 -320
- package/dist/tests/recommend.test.js.map +0 -1
- package/dist/tests/search-helpers.test.d.ts +0 -2
- package/dist/tests/search-helpers.test.d.ts.map +0 -1
- package/dist/tests/search-helpers.test.js +0 -110
- package/dist/tests/search-helpers.test.js.map +0 -1
- package/dist/tests/search.test.d.ts +0 -5
- package/dist/tests/search.test.d.ts.map +0 -1
- package/dist/tests/search.test.js +0 -91
- package/dist/tests/search.test.js.map +0 -1
- package/dist/tests/skills-directory-per-harness.test.d.ts +0 -2
- package/dist/tests/skills-directory-per-harness.test.d.ts.map +0 -1
- package/dist/tests/skills-directory-per-harness.test.js +0 -116
- package/dist/tests/skills-directory-per-harness.test.js.map +0 -1
- package/dist/tests/skills-directory.test.d.ts +0 -2
- package/dist/tests/skills-directory.test.d.ts.map +0 -1
- package/dist/tests/skills-directory.test.js +0 -108
- package/dist/tests/skills-directory.test.js.map +0 -1
- package/dist/tests/sync.auth-ux.test.d.ts +0 -14
- package/dist/tests/sync.auth-ux.test.d.ts.map +0 -1
- package/dist/tests/sync.auth-ux.test.js +0 -148
- package/dist/tests/sync.auth-ux.test.js.map +0 -1
- package/dist/tests/tool-analyzer.test.d.ts +0 -8
- package/dist/tests/tool-analyzer.test.d.ts.map +0 -1
- package/dist/tests/tool-analyzer.test.js +0 -149
- package/dist/tests/tool-analyzer.test.js.map +0 -1
- package/dist/tests/unit/commands/install.test.d.ts +0 -7
- package/dist/tests/unit/commands/install.test.d.ts.map +0 -1
- package/dist/tests/unit/commands/install.test.js +0 -482
- package/dist/tests/unit/commands/install.test.js.map +0 -1
- package/dist/tests/unit/import-local.helpers.test.d.ts +0 -2
- package/dist/tests/unit/import-local.helpers.test.d.ts.map +0 -1
- package/dist/tests/unit/import-local.helpers.test.js +0 -96
- package/dist/tests/unit/import-local.helpers.test.js.map +0 -1
|
@@ -1,384 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SMI-5127: Search command action implementation + telemetry wrapper.
|
|
3
|
-
*
|
|
4
|
-
* Sibling-split from search.ts following the <command>.action.ts convention
|
|
5
|
-
* established by SMI-5040. The action impl is extracted here and wrapped with
|
|
6
|
-
* withTelemetry so the CLI_DISPATCHER_MAP coverage test can assert coverage
|
|
7
|
-
* without importing the full commander tree.
|
|
8
|
-
*
|
|
9
|
-
* Opts-adaptation choice: searchActionImpl accepts the same (query, opts)
|
|
10
|
-
* signature that commander passes to .action() — the factory in search.ts
|
|
11
|
-
* passes the wrapped action directly to .action() with no closure needed.
|
|
12
|
-
* The interactive sub-functions (runInteractiveSearch, runSearch) remain
|
|
13
|
-
* private to this module.
|
|
14
|
-
*/
|
|
15
|
-
import chalk from 'chalk';
|
|
16
|
-
import ora from 'ora';
|
|
17
|
-
import { input, checkbox, number, select } from '@inquirer/prompts';
|
|
18
|
-
import { SearchService, SkillRepository, SkillDependencyRepository, SkillInstallationService, } from '@skillsmith/core';
|
|
19
|
-
// SMI-5039: lazy embedding-capability probe. CLI `search` is the only
|
|
20
|
-
// embedding-relevant command — it surfaces a degraded-search warning to the
|
|
21
|
-
// operator without blocking the FTS fallback path. The probe is hard-bounded
|
|
22
|
-
// at 2 s, stderr-only, and never throws; `SKILLSMITH_QUIET=true` suppresses
|
|
23
|
-
// the warning line for scripted use.
|
|
24
|
-
import { probeEmbeddingCapability } from '@skillsmith/core/embeddings/probe';
|
|
25
|
-
import { withTelemetry } from '@skillsmith/core/telemetry';
|
|
26
|
-
import { openCliDatabase } from '../utils/open-database.js';
|
|
27
|
-
import { autoSyncIfEmpty, isLocalIndexEmpty, formatEmptyIndexHint } from './search.helpers.js';
|
|
28
|
-
import { sanitizeError } from '../utils/sanitize.js';
|
|
29
|
-
import { PAGE_SIZE } from './search-types.js';
|
|
30
|
-
import { TRUST_TIER_COLORS, displayResults, displaySkillDetails } from './search-formatters.js';
|
|
31
|
-
// ---------------------------------------------------------------------------
|
|
32
|
-
// Private helpers (not exported — used only by searchActionImpl)
|
|
33
|
-
// ---------------------------------------------------------------------------
|
|
34
|
-
/**
|
|
35
|
-
* Run interactive search loop using state machine pattern (SMI-759)
|
|
36
|
-
* Uses iterative while loop instead of recursion for new searches.
|
|
37
|
-
*/
|
|
38
|
-
async function runInteractiveSearch(dbPath) {
|
|
39
|
-
const db = await openCliDatabase(dbPath);
|
|
40
|
-
// SMI-4917 Bug 3: bootstrap the local registry on a first-time search.
|
|
41
|
-
await autoSyncIfEmpty(db);
|
|
42
|
-
const searchService = new SearchService(db);
|
|
43
|
-
console.log(chalk.bold.blue('\n=== Skillsmith Interactive Search ===\n'));
|
|
44
|
-
try {
|
|
45
|
-
// State machine: phase controls the loop behavior
|
|
46
|
-
let phase = 'collect_query';
|
|
47
|
-
let state = null;
|
|
48
|
-
// Main state machine loop - replaces recursive calls
|
|
49
|
-
while (phase !== 'exit') {
|
|
50
|
-
// Phase: Collect search query and filters
|
|
51
|
-
if (phase === 'collect_query') {
|
|
52
|
-
// Step 1: Enter search query (optional if filters will be provided)
|
|
53
|
-
const query = await input({
|
|
54
|
-
message: 'Enter search query (or press Enter to browse with filters):',
|
|
55
|
-
default: '',
|
|
56
|
-
});
|
|
57
|
-
// Step 2: Filter by trust tier
|
|
58
|
-
const trustTiers = await checkbox({
|
|
59
|
-
message: 'Filter by trust tier (select with space, enter to continue):',
|
|
60
|
-
choices: [
|
|
61
|
-
{ name: chalk.green('Verified'), value: 'verified' },
|
|
62
|
-
{ name: chalk.blue('Curated'), value: 'curated' },
|
|
63
|
-
{ name: chalk.yellow('Community'), value: 'community' },
|
|
64
|
-
{ name: chalk.red('Experimental'), value: 'experimental' },
|
|
65
|
-
{ name: chalk.gray('Unknown'), value: 'unknown' },
|
|
66
|
-
{ name: chalk.cyan('Local'), value: 'local' },
|
|
67
|
-
],
|
|
68
|
-
});
|
|
69
|
-
// Step 3: Minimum quality score
|
|
70
|
-
const minQualityScore = await number({
|
|
71
|
-
message: 'Minimum quality score (0-100, leave empty for no filter):',
|
|
72
|
-
default: 0,
|
|
73
|
-
min: 0,
|
|
74
|
-
max: 100,
|
|
75
|
-
});
|
|
76
|
-
// Validate: require query OR at least one filter
|
|
77
|
-
const hasQuery = query.trim().length > 0;
|
|
78
|
-
const hasFilters = trustTiers.length > 0 || (minQualityScore !== undefined && minQualityScore > 0);
|
|
79
|
-
if (!hasQuery && !hasFilters) {
|
|
80
|
-
console.log(chalk.red('Please provide a search query or select at least one filter.'));
|
|
81
|
-
continue; // Stay in collect_query phase
|
|
82
|
-
}
|
|
83
|
-
state = {
|
|
84
|
-
query,
|
|
85
|
-
trustTiers,
|
|
86
|
-
minQualityScore: (minQualityScore || 0) / 100,
|
|
87
|
-
offset: 0,
|
|
88
|
-
};
|
|
89
|
-
phase = 'searching';
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
// Phase: Search and display results
|
|
93
|
-
if (phase === 'searching' && state !== null) {
|
|
94
|
-
// Build search options - only add optional properties when they have values
|
|
95
|
-
const searchOptions = {
|
|
96
|
-
query: state.query,
|
|
97
|
-
limit: PAGE_SIZE,
|
|
98
|
-
offset: state.offset,
|
|
99
|
-
};
|
|
100
|
-
// Add optional filters only when they have values (exactOptionalPropertyTypes)
|
|
101
|
-
if (state.minQualityScore > 0) {
|
|
102
|
-
searchOptions.minQualityScore = state.minQualityScore;
|
|
103
|
-
}
|
|
104
|
-
// Filter by first selected trust tier (API only supports one)
|
|
105
|
-
if (state.trustTiers.length === 1 && state.trustTiers[0] !== undefined) {
|
|
106
|
-
searchOptions.trustTier = state.trustTiers[0];
|
|
107
|
-
}
|
|
108
|
-
// Execute search
|
|
109
|
-
const results = searchService.search(searchOptions);
|
|
110
|
-
// If filtering by multiple trust tiers, filter client-side
|
|
111
|
-
let filteredItems = results.items;
|
|
112
|
-
const trustTiersForFilter = state.trustTiers;
|
|
113
|
-
if (trustTiersForFilter.length > 1) {
|
|
114
|
-
filteredItems = results.items.filter((r) => trustTiersForFilter.includes(r.skill.trustTier));
|
|
115
|
-
}
|
|
116
|
-
if (results.items.length === 0) {
|
|
117
|
-
// SMI-4926: distinguish an empty/unsynced local index from a no-match.
|
|
118
|
-
if (isLocalIndexEmpty(db)) {
|
|
119
|
-
console.log(formatEmptyIndexHint(db));
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
displayResults(filteredItems, results.total, state.offset, PAGE_SIZE);
|
|
123
|
-
}
|
|
124
|
-
phase = 'exit';
|
|
125
|
-
continue;
|
|
126
|
-
}
|
|
127
|
-
displayResults(filteredItems, results.total, state.offset, PAGE_SIZE);
|
|
128
|
-
// Build action choices
|
|
129
|
-
const choices = [];
|
|
130
|
-
// Add skill selection options
|
|
131
|
-
for (let i = 0; i < filteredItems.length; i++) {
|
|
132
|
-
const skill = filteredItems[i].skill;
|
|
133
|
-
const colorFn = TRUST_TIER_COLORS[skill.trustTier];
|
|
134
|
-
choices.push({
|
|
135
|
-
name: `${i + 1}. ${colorFn(skill.name)} - View details`,
|
|
136
|
-
value: `view_${i}`,
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
// Add navigation options
|
|
140
|
-
choices.push({ name: chalk.dim('---'), value: 'separator' });
|
|
141
|
-
if (state.offset > 0) {
|
|
142
|
-
choices.push({ name: chalk.cyan('<< Previous page'), value: 'prev' });
|
|
143
|
-
}
|
|
144
|
-
if (results.hasMore) {
|
|
145
|
-
choices.push({ name: chalk.cyan('Next page >>'), value: 'next' });
|
|
146
|
-
}
|
|
147
|
-
choices.push({ name: chalk.magenta('New search'), value: 'new' });
|
|
148
|
-
choices.push({ name: chalk.red('Exit'), value: 'exit' });
|
|
149
|
-
const action = await select({
|
|
150
|
-
message: 'Select a skill to view or navigate:',
|
|
151
|
-
choices,
|
|
152
|
-
});
|
|
153
|
-
if (action === 'separator') {
|
|
154
|
-
continue;
|
|
155
|
-
}
|
|
156
|
-
else if (action === 'exit') {
|
|
157
|
-
phase = 'exit';
|
|
158
|
-
}
|
|
159
|
-
else if (action === 'new') {
|
|
160
|
-
// SMI-759: Reset to collect_query phase instead of recursive call
|
|
161
|
-
phase = 'collect_query';
|
|
162
|
-
console.log(chalk.bold.blue('\n=== New Search ===\n'));
|
|
163
|
-
}
|
|
164
|
-
else if (action === 'prev') {
|
|
165
|
-
state.offset = Math.max(0, state.offset - PAGE_SIZE);
|
|
166
|
-
}
|
|
167
|
-
else if (action === 'next') {
|
|
168
|
-
state.offset += PAGE_SIZE;
|
|
169
|
-
}
|
|
170
|
-
else if (action.startsWith('view_')) {
|
|
171
|
-
const index = parseInt(action.replace('view_', ''), 10);
|
|
172
|
-
const selectedResult = filteredItems[index];
|
|
173
|
-
if (selectedResult) {
|
|
174
|
-
displaySkillDetails(selectedResult);
|
|
175
|
-
// Ask what to do next
|
|
176
|
-
const nextAction = await select({
|
|
177
|
-
message: 'What would you like to do?',
|
|
178
|
-
choices: [
|
|
179
|
-
{ name: 'Back to results', value: 'back' },
|
|
180
|
-
{ name: 'Install this skill', value: 'install' },
|
|
181
|
-
{ name: 'Exit', value: 'exit' },
|
|
182
|
-
],
|
|
183
|
-
});
|
|
184
|
-
if (nextAction === 'install') {
|
|
185
|
-
const installSpinner = ora('Installing skill...').start();
|
|
186
|
-
try {
|
|
187
|
-
const skillRepo = new SkillRepository(db);
|
|
188
|
-
const skillDependencyRepo = new SkillDependencyRepository(db);
|
|
189
|
-
const registryLookup = {
|
|
190
|
-
async lookup(sid) {
|
|
191
|
-
const s = skillRepo.findById(sid);
|
|
192
|
-
if (!s || !s.repoUrl)
|
|
193
|
-
return null;
|
|
194
|
-
return {
|
|
195
|
-
repoUrl: s.repoUrl,
|
|
196
|
-
name: s.name,
|
|
197
|
-
trustTier: s.trustTier,
|
|
198
|
-
quarantined: false,
|
|
199
|
-
};
|
|
200
|
-
},
|
|
201
|
-
};
|
|
202
|
-
const installService = new SkillInstallationService({
|
|
203
|
-
db,
|
|
204
|
-
skillRepo,
|
|
205
|
-
skillDependencyRepo,
|
|
206
|
-
registryLookup,
|
|
207
|
-
onProgress: (_stage, detail) => {
|
|
208
|
-
installSpinner.text = detail;
|
|
209
|
-
},
|
|
210
|
-
});
|
|
211
|
-
const installResult = await installService.install(selectedResult.skill.id, {});
|
|
212
|
-
if (installResult.success) {
|
|
213
|
-
installSpinner.succeed(chalk.green(`Installed "${selectedResult.skill.name}" successfully`));
|
|
214
|
-
if (installResult.installPath) {
|
|
215
|
-
console.log(chalk.dim(` Path: ${installResult.installPath}`));
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
else {
|
|
219
|
-
installSpinner.fail(chalk.red(`Installation failed: ${installResult.error}`));
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
catch (installError) {
|
|
223
|
-
installSpinner.fail(chalk.red(`Installation error: ${installError instanceof Error ? installError.message : String(installError)}`));
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
else if (nextAction === 'exit') {
|
|
227
|
-
phase = 'exit';
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
finally {
|
|
235
|
-
db.close();
|
|
236
|
-
}
|
|
237
|
-
console.log(chalk.dim('\nGoodbye!\n'));
|
|
238
|
-
}
|
|
239
|
-
/**
|
|
240
|
-
* Run non-interactive search
|
|
241
|
-
*/
|
|
242
|
-
async function runSearch(query, options) {
|
|
243
|
-
const db = await openCliDatabase(options.db);
|
|
244
|
-
// SMI-4917 Bug 3: bootstrap the local registry on a first-time search.
|
|
245
|
-
await autoSyncIfEmpty(db);
|
|
246
|
-
const searchService = new SearchService(db);
|
|
247
|
-
try {
|
|
248
|
-
// Build search options - only add optional properties when they have values
|
|
249
|
-
const searchOptions = {
|
|
250
|
-
query,
|
|
251
|
-
limit: options.limit,
|
|
252
|
-
};
|
|
253
|
-
// Add optional filters only when they have values (exactOptionalPropertyTypes)
|
|
254
|
-
if (options.tier !== undefined) {
|
|
255
|
-
searchOptions.trustTier = options.tier;
|
|
256
|
-
}
|
|
257
|
-
if (options.category !== undefined) {
|
|
258
|
-
searchOptions.category = options.category;
|
|
259
|
-
}
|
|
260
|
-
if (options.minScore !== undefined) {
|
|
261
|
-
searchOptions.minQualityScore = options.minScore / 100;
|
|
262
|
-
}
|
|
263
|
-
// SMI-825: Security filters
|
|
264
|
-
if (options.safeOnly !== undefined) {
|
|
265
|
-
searchOptions.safeOnly = options.safeOnly;
|
|
266
|
-
}
|
|
267
|
-
if (options.maxRisk !== undefined) {
|
|
268
|
-
searchOptions.maxRiskScore = options.maxRisk;
|
|
269
|
-
}
|
|
270
|
-
const results = searchService.search(searchOptions);
|
|
271
|
-
// SMI-4926: an empty local index produces 0 results that look like a
|
|
272
|
-
// genuine no-match — surface a sync-state-aware hint instead.
|
|
273
|
-
if (results.items.length === 0 && isLocalIndexEmpty(db)) {
|
|
274
|
-
console.log(formatEmptyIndexHint(db));
|
|
275
|
-
return;
|
|
276
|
-
}
|
|
277
|
-
displayResults(results.items, results.total, 0, options.limit);
|
|
278
|
-
}
|
|
279
|
-
finally {
|
|
280
|
-
db.close();
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
// ---------------------------------------------------------------------------
|
|
284
|
-
// Action impl (matches commander's .action() signature)
|
|
285
|
-
// ---------------------------------------------------------------------------
|
|
286
|
-
async function searchActionImpl(query, opts) {
|
|
287
|
-
try {
|
|
288
|
-
// SMI-5039: lazy probe — only fires on the search command, NOT on
|
|
289
|
-
// --version / --help (those short-circuit at commander level before
|
|
290
|
-
// any .action runs). Honors SKILLSMITH_QUIET=true for scripted use.
|
|
291
|
-
// Probe cannot throw; safe to await unconditionally.
|
|
292
|
-
await probeEmbeddingCapability();
|
|
293
|
-
const interactive = opts['interactive'];
|
|
294
|
-
const dbPath = opts['db'];
|
|
295
|
-
const limit = parseInt(opts['limit'], 10);
|
|
296
|
-
const tier = opts['tier'];
|
|
297
|
-
const category = opts['category'];
|
|
298
|
-
const minScore = opts['min-score'] ? parseInt(opts['min-score'], 10) : undefined;
|
|
299
|
-
// SMI-825: Security filters
|
|
300
|
-
const safeOnly = opts['safe-only'];
|
|
301
|
-
const maxRisk = opts['max-risk'] ? parseInt(opts['max-risk'], 10) : undefined;
|
|
302
|
-
if (interactive) {
|
|
303
|
-
await runInteractiveSearch(dbPath);
|
|
304
|
-
}
|
|
305
|
-
else if (query) {
|
|
306
|
-
// Query provided - run search with optional filters
|
|
307
|
-
const searchOpts = {
|
|
308
|
-
db: dbPath,
|
|
309
|
-
limit,
|
|
310
|
-
};
|
|
311
|
-
if (tier !== undefined) {
|
|
312
|
-
searchOpts.tier = tier;
|
|
313
|
-
}
|
|
314
|
-
if (category !== undefined) {
|
|
315
|
-
searchOpts.category = category;
|
|
316
|
-
}
|
|
317
|
-
if (minScore !== undefined) {
|
|
318
|
-
searchOpts.minScore = minScore;
|
|
319
|
-
}
|
|
320
|
-
// SMI-825: Security filters
|
|
321
|
-
if (safeOnly !== undefined) {
|
|
322
|
-
searchOpts.safeOnly = safeOnly;
|
|
323
|
-
}
|
|
324
|
-
if (maxRisk !== undefined) {
|
|
325
|
-
searchOpts.maxRisk = maxRisk;
|
|
326
|
-
}
|
|
327
|
-
await runSearch(query, searchOpts);
|
|
328
|
-
}
|
|
329
|
-
else if (tier !== undefined ||
|
|
330
|
-
category !== undefined ||
|
|
331
|
-
minScore !== undefined ||
|
|
332
|
-
safeOnly !== undefined ||
|
|
333
|
-
maxRisk !== undefined) {
|
|
334
|
-
// No query but filters provided - run filter-only search
|
|
335
|
-
console.log(chalk.blue('Running filter-only search...'));
|
|
336
|
-
const searchOpts = {
|
|
337
|
-
db: dbPath,
|
|
338
|
-
limit,
|
|
339
|
-
};
|
|
340
|
-
if (tier !== undefined) {
|
|
341
|
-
searchOpts.tier = tier;
|
|
342
|
-
}
|
|
343
|
-
if (category !== undefined) {
|
|
344
|
-
searchOpts.category = category;
|
|
345
|
-
}
|
|
346
|
-
if (minScore !== undefined) {
|
|
347
|
-
searchOpts.minScore = minScore;
|
|
348
|
-
}
|
|
349
|
-
// SMI-825: Security filters
|
|
350
|
-
if (safeOnly !== undefined) {
|
|
351
|
-
searchOpts.safeOnly = safeOnly;
|
|
352
|
-
}
|
|
353
|
-
if (maxRisk !== undefined) {
|
|
354
|
-
searchOpts.maxRisk = maxRisk;
|
|
355
|
-
}
|
|
356
|
-
await runSearch('', searchOpts);
|
|
357
|
-
}
|
|
358
|
-
else {
|
|
359
|
-
// No query and no filters
|
|
360
|
-
console.log(chalk.yellow('Please provide a search query, filters (--tier, --category, --min-score, --safe-only, --max-risk), or use -i for interactive mode'));
|
|
361
|
-
console.log(chalk.dim('Examples:'));
|
|
362
|
-
console.log(chalk.dim(' skillsmith search "authentication"'));
|
|
363
|
-
console.log(chalk.dim(' skillsmith search --tier verified'));
|
|
364
|
-
console.log(chalk.dim(' skillsmith search --category security'));
|
|
365
|
-
console.log(chalk.dim(' skillsmith search --tier community --min-score 70'));
|
|
366
|
-
console.log(chalk.dim(' skillsmith search --safe-only'));
|
|
367
|
-
console.log(chalk.dim(' skillsmith search --max-risk 30'));
|
|
368
|
-
console.log(chalk.dim(' skillsmith search -i'));
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
catch (error) {
|
|
372
|
-
console.error(chalk.red('Search error:'), sanitizeError(error));
|
|
373
|
-
process.exit(1);
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
// ---------------------------------------------------------------------------
|
|
377
|
-
// Telemetry-wrapped export (SMI-5127)
|
|
378
|
-
// ---------------------------------------------------------------------------
|
|
379
|
-
export const searchAction = withTelemetry(searchActionImpl, {
|
|
380
|
-
source: 'cli',
|
|
381
|
-
extractSkillId: () => 'search',
|
|
382
|
-
extractFramework: () => 'cli',
|
|
383
|
-
});
|
|
384
|
-
//# sourceMappingURL=search.action.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search.action.js","sourceRoot":"","sources":["../../../src/commands/search.action.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SMI-744: Interactive Search Mode
|
|
3
|
-
*
|
|
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.
|
|
8
|
-
*/
|
|
9
|
-
import { Command } from 'commander';
|
|
10
|
-
export type { InteractiveSearchState, SearchPhase, SearchCommandOptions } from './search-types.js';
|
|
11
|
-
export { PAGE_SIZE } from './search-types.js';
|
|
12
|
-
export { TRUST_TIER_COLORS, formatSecurityStatus, formatSkillRow, displayResults, displaySkillDetails, getTrustTierColor, } from './search-formatters.js';
|
|
13
|
-
/**
|
|
14
|
-
* Create search command
|
|
15
|
-
*/
|
|
16
|
-
export declare function createSearchCommand(): Command;
|
|
17
|
-
export default createSearchCommand;
|
|
18
|
-
//# sourceMappingURL=search.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,YAAY,EAAE,sBAAsB,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAClG,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,wBAAgB,mBAAmB,IAAI,OAAO,CAyC7C;AAED,eAAe,mBAAmB,CAAA"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { type DatabaseType } from '@skillsmith/core';
|
|
2
|
-
/** Skip the auto-sync if a sync attempt started within this window. */
|
|
3
|
-
export declare const AUTO_SYNC_COOLDOWN_MS: number;
|
|
4
|
-
/**
|
|
5
|
-
* Bootstrap the local registry on a first-time `search` against an empty DB.
|
|
6
|
-
*
|
|
7
|
-
* Bug 3 of SMI-4917: a fresh install (or a login that pre-dates the post-login
|
|
8
|
-
* auto-sync) leaves an empty `skills` table, so the first `search` returns
|
|
9
|
-
* nothing. This helper syncs the registry once, best-effort, when the DB is
|
|
10
|
-
* empty.
|
|
11
|
-
*
|
|
12
|
-
* Bounded (H5) to avoid hammering the registry:
|
|
13
|
-
* - skipped when the DB already has skills,
|
|
14
|
-
* - skipped for anonymous users (no stored token) — they would only hit the
|
|
15
|
-
* trial cap; `search` falls back to whatever is local,
|
|
16
|
-
* - skipped when a sync was attempted within the last 15 minutes (so a string
|
|
17
|
-
* of failed/offline searches does not re-trigger a full sync each time).
|
|
18
|
-
*
|
|
19
|
-
* Never throws: a sync failure downgrades to a warning and `search` proceeds
|
|
20
|
-
* with local results.
|
|
21
|
-
*
|
|
22
|
-
* @param db - An open, schema-initialized CLI database.
|
|
23
|
-
*/
|
|
24
|
-
export declare function autoSyncIfEmpty(db: DatabaseType): Promise<void>;
|
|
25
|
-
/**
|
|
26
|
-
* Whether the local `skills` table has no rows.
|
|
27
|
-
*
|
|
28
|
-
* SMI-4926: a 0-result search against an empty index is meaningfully different
|
|
29
|
-
* from a genuine no-match — the registry has not been synced locally yet.
|
|
30
|
-
* Reuses the same `SkillRepository.count()` that `autoSyncIfEmpty` relies on
|
|
31
|
-
* (no raw SQL).
|
|
32
|
-
*
|
|
33
|
-
* @param db - An open, schema-initialized CLI database.
|
|
34
|
-
*/
|
|
35
|
-
export declare function isLocalIndexEmpty(db: DatabaseType): boolean;
|
|
36
|
-
/**
|
|
37
|
-
* Build a sync-state-aware hint for a 0-result search against an empty index.
|
|
38
|
-
*
|
|
39
|
-
* SMI-4926: `autoSyncIfEmpty` may legitimately skip the sync (anonymous user,
|
|
40
|
-
* or a sync attempted within `AUTO_SYNC_COOLDOWN_MS`), so the hint must not
|
|
41
|
-
* unconditionally claim a sync is running. If the most recent sync attempt
|
|
42
|
-
* started within the cooldown window, the user is told to retry shortly;
|
|
43
|
-
* otherwise they are told to run `skillsmith sync`.
|
|
44
|
-
*
|
|
45
|
-
* Both messages start with a literal `ℹ ` text marker so they remain
|
|
46
|
-
* distinguishable from the yellow no-match message under `NO_COLOR`, and carry
|
|
47
|
-
* leading/trailing newlines to match `displayResults` padding.
|
|
48
|
-
*
|
|
49
|
-
* @param db - An open, schema-initialized CLI database.
|
|
50
|
-
*/
|
|
51
|
-
export declare function formatEmptyIndexHint(db: DatabaseType): string;
|
|
52
|
-
//# sourceMappingURL=search.helpers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search.helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/search.helpers.ts"],"names":[],"mappings":"AASA,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAA;AAGzB,uEAAuE;AACvE,eAAO,MAAM,qBAAqB,QAAc,CAAA;AAEhD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBrE;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAE3D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,YAAY,GAAG,MAAM,CAa7D"}
|
|
@@ -1,95 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SMI-744: Interactive Search Mode
|
|
3
|
-
*
|
|
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.
|
|
8
|
-
*/
|
|
9
|
-
import { Command } from 'commander';
|
|
10
|
-
import { DEFAULT_DB_PATH } from '../config.js';
|
|
11
|
-
import { searchAction } from './search.action.js';
|
|
12
|
-
export { PAGE_SIZE } from './search-types.js';
|
|
13
|
-
export { TRUST_TIER_COLORS, formatSecurityStatus, formatSkillRow, displayResults, displaySkillDetails, getTrustTierColor, } from './search-formatters.js';
|
|
14
|
-
/**
|
|
15
|
-
* Create search command
|
|
16
|
-
*/
|
|
17
|
-
export function createSearchCommand() {
|
|
18
|
-
const cmd = new Command('search')
|
|
19
|
-
.description(`Search for skills
|
|
20
|
-
|
|
21
|
-
Quality Score Formula:
|
|
22
|
-
Quality scores (0-100%) reflect repository health using logarithmic scaling:
|
|
23
|
-
Stars: log₁₀(stars + 1) × 15 (max 50 pts)
|
|
24
|
-
Forks: log₁₀(forks + 1) × 10 (max 25 pts)
|
|
25
|
-
Base: 25 pts (baseline)
|
|
26
|
-
|
|
27
|
-
Example scores:
|
|
28
|
-
~48% - 10 stars, 5 forks
|
|
29
|
-
~68% - 100 stars, 20 forks
|
|
30
|
-
~86% - 500 stars, 100 forks
|
|
31
|
-
100% - 10,000+ stars
|
|
32
|
-
|
|
33
|
-
Verified skills from high-trust authors may have manually assigned scores.`)
|
|
34
|
-
.argument('[query]', 'Search query (optional when using --tier, --category, or --min-score filters)')
|
|
35
|
-
.option('-i, --interactive', 'Launch interactive search mode')
|
|
36
|
-
.option('-d, --db <path>', 'Database file path', DEFAULT_DB_PATH)
|
|
37
|
-
.option('-l, --limit <number>', 'Maximum results to show', '20')
|
|
38
|
-
.option('-t, --tier <tier>', 'Filter by trust tier (verified, curated, community, experimental, unknown, local)')
|
|
39
|
-
.option('-c, --category <category>', 'Filter by category (development, testing, devops, documentation, productivity, security)')
|
|
40
|
-
.option('-s, --min-score <number>', 'Minimum quality score (0-100, see above for formula)')
|
|
41
|
-
// SMI-825: Security filters
|
|
42
|
-
.option('--safe-only', 'Only show skills that passed security scan')
|
|
43
|
-
.option('--max-risk <number>', 'Maximum risk score (0-100, lower is safer)')
|
|
44
|
-
.action(searchAction);
|
|
45
|
-
return cmd;
|
|
46
|
-
}
|
|
47
|
-
export default createSearchCommand;
|
|
48
|
-
//# sourceMappingURL=search.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search.test.d.ts","sourceRoot":"","sources":["../../../src/commands/search.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|