@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,228 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Unit tests for `sklx audit sources` CLI command.
|
|
3
|
-
* @see SMI-5407: Skill Source Provenance Recovery
|
|
4
|
-
*
|
|
5
|
-
* Tests the action layer (`runAuditSources`) with injected mocks so the test
|
|
6
|
-
* suite runs fully offline without a real DB or skills directory.
|
|
7
|
-
*/
|
|
8
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
9
|
-
import * as os from 'node:os';
|
|
10
|
-
import * as path from 'node:path';
|
|
11
|
-
// ============================================================================
|
|
12
|
-
// Module mocks — must be declared before the imports that use them
|
|
13
|
-
// ============================================================================
|
|
14
|
-
const mockOpenCliDatabase = vi.fn();
|
|
15
|
-
vi.mock('../utils/open-database.js', () => ({
|
|
16
|
-
openCliDatabase: (...args) => mockOpenCliDatabase(...args),
|
|
17
|
-
}));
|
|
18
|
-
const mockLoadManifest = vi.fn();
|
|
19
|
-
vi.mock('../utils/manifest.js', () => ({
|
|
20
|
-
loadManifest: () => mockLoadManifest(),
|
|
21
|
-
}));
|
|
22
|
-
const mockRecoverSources = vi.fn();
|
|
23
|
-
const mockBackfillManifest = vi.fn();
|
|
24
|
-
vi.mock('@skillsmith/core', async (importOriginal) => {
|
|
25
|
-
const actual = await importOriginal();
|
|
26
|
-
return {
|
|
27
|
-
...actual,
|
|
28
|
-
// Must be a regular function (not arrow) so `new SourceRecoveryService()` works.
|
|
29
|
-
SourceRecoveryService: function MockSourceRecoveryService() {
|
|
30
|
-
return { recoverSources: (...args) => mockRecoverSources(...args) };
|
|
31
|
-
},
|
|
32
|
-
backfillManifest: (...args) => mockBackfillManifest(...args),
|
|
33
|
-
defaultSkillsRoot: () => path.join(os.homedir(), '.claude', 'skills'),
|
|
34
|
-
};
|
|
35
|
-
});
|
|
36
|
-
// ============================================================================
|
|
37
|
-
// Import after mocks
|
|
38
|
-
// ============================================================================
|
|
39
|
-
import { runAuditSources } from './audit-sources.action.js';
|
|
40
|
-
function makeReport(overrides = {}) {
|
|
41
|
-
return {
|
|
42
|
-
skills: [
|
|
43
|
-
{
|
|
44
|
-
skillName: 'linear',
|
|
45
|
-
installPath: '/home/user/.claude/skills/linear',
|
|
46
|
-
recoveredSource: {
|
|
47
|
-
owner: 'williamsmith',
|
|
48
|
-
repo: 'linear',
|
|
49
|
-
url: 'https://github.com/williamsmith/linear',
|
|
50
|
-
},
|
|
51
|
-
registryId: 'uuid-linear',
|
|
52
|
-
method: 'git-remote',
|
|
53
|
-
confidence: 'exact',
|
|
54
|
-
candidates: [],
|
|
55
|
-
status: 'recovered',
|
|
56
|
-
},
|
|
57
|
-
],
|
|
58
|
-
summary: { total: 1, recovered: 1, already_tracked: 0, unknown: 0, skipped_backup: 0 },
|
|
59
|
-
...overrides,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
function makeDb() {
|
|
63
|
-
return {
|
|
64
|
-
prepare: vi.fn().mockReturnValue({ all: vi.fn().mockReturnValue([]) }),
|
|
65
|
-
close: vi.fn(),
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
function baseOptions(overrides = {}) {
|
|
69
|
-
return {
|
|
70
|
-
skillsRoot: '/tmp/test-skills',
|
|
71
|
-
apply: false,
|
|
72
|
-
yes: false,
|
|
73
|
-
set: undefined,
|
|
74
|
-
minConfidence: 'high',
|
|
75
|
-
json: false,
|
|
76
|
-
embedding: false,
|
|
77
|
-
catalogHint: false,
|
|
78
|
-
writeFrontmatter: false,
|
|
79
|
-
forceWriteFrontmatter: false,
|
|
80
|
-
db: ':memory:',
|
|
81
|
-
...overrides,
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
// ============================================================================
|
|
85
|
-
// Tests
|
|
86
|
-
// ============================================================================
|
|
87
|
-
describe('runAuditSources', () => {
|
|
88
|
-
beforeEach(() => {
|
|
89
|
-
vi.clearAllMocks();
|
|
90
|
-
mockOpenCliDatabase.mockResolvedValue(makeDb());
|
|
91
|
-
mockLoadManifest.mockResolvedValue({ version: '1.0.0', installedSkills: {} });
|
|
92
|
-
mockRecoverSources.mockResolvedValue(makeReport());
|
|
93
|
-
mockBackfillManifest.mockResolvedValue({ planned: [], written: [], skipped: [] });
|
|
94
|
-
});
|
|
95
|
-
afterEach(() => {
|
|
96
|
-
vi.clearAllMocks();
|
|
97
|
-
});
|
|
98
|
-
// --------------------------------------------------------------------------
|
|
99
|
-
// --json shape + exit 0
|
|
100
|
-
// --------------------------------------------------------------------------
|
|
101
|
-
it('--json emits valid JSON with skills and summary', async () => {
|
|
102
|
-
const report = makeReport();
|
|
103
|
-
mockRecoverSources.mockResolvedValue(report);
|
|
104
|
-
const written = [];
|
|
105
|
-
vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
|
|
106
|
-
if (typeof chunk === 'string')
|
|
107
|
-
written.push(chunk);
|
|
108
|
-
return true;
|
|
109
|
-
});
|
|
110
|
-
await runAuditSources(baseOptions({ json: true }));
|
|
111
|
-
const output = written.join('');
|
|
112
|
-
const parsed = JSON.parse(output);
|
|
113
|
-
expect(Array.isArray(parsed.skills)).toBe(true);
|
|
114
|
-
expect(parsed.summary.total).toBe(1);
|
|
115
|
-
});
|
|
116
|
-
// --------------------------------------------------------------------------
|
|
117
|
-
// Dry-run: default run does NOT write the manifest
|
|
118
|
-
// --------------------------------------------------------------------------
|
|
119
|
-
it('dry-run by default: does not call backfillManifest', async () => {
|
|
120
|
-
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
121
|
-
await runAuditSources(baseOptions());
|
|
122
|
-
expect(mockBackfillManifest).not.toHaveBeenCalled();
|
|
123
|
-
logSpy.mockRestore();
|
|
124
|
-
});
|
|
125
|
-
// --------------------------------------------------------------------------
|
|
126
|
-
// already_tracked overlay
|
|
127
|
-
// --------------------------------------------------------------------------
|
|
128
|
-
it('overlays already_tracked when manifest already has a source', async () => {
|
|
129
|
-
mockLoadManifest.mockResolvedValue({
|
|
130
|
-
version: '1.0.0',
|
|
131
|
-
installedSkills: {
|
|
132
|
-
linear: {
|
|
133
|
-
id: 'uuid-linear',
|
|
134
|
-
name: 'linear',
|
|
135
|
-
version: '1.0.0',
|
|
136
|
-
source: 'https://github.com/williamsmith/linear',
|
|
137
|
-
installPath: '/home/user/.claude/skills/linear',
|
|
138
|
-
installedAt: '2024-01-01T00:00:00.000Z',
|
|
139
|
-
lastUpdated: '2024-01-01T00:00:00.000Z',
|
|
140
|
-
},
|
|
141
|
-
},
|
|
142
|
-
});
|
|
143
|
-
const jsonChunks = [];
|
|
144
|
-
vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
|
|
145
|
-
if (typeof chunk === 'string')
|
|
146
|
-
jsonChunks.push(chunk);
|
|
147
|
-
return true;
|
|
148
|
-
});
|
|
149
|
-
await runAuditSources(baseOptions({ json: true }));
|
|
150
|
-
const parsed = JSON.parse(jsonChunks.join(''));
|
|
151
|
-
const alreadyTracked = parsed.skills.find((s) => s.status === 'already_tracked');
|
|
152
|
-
expect(alreadyTracked).toBeDefined();
|
|
153
|
-
expect(parsed.summary.already_tracked).toBe(1);
|
|
154
|
-
});
|
|
155
|
-
// --------------------------------------------------------------------------
|
|
156
|
-
// --apply --yes writes the manifest
|
|
157
|
-
// --------------------------------------------------------------------------
|
|
158
|
-
it('--apply --yes calls backfillManifest with apply: true', async () => {
|
|
159
|
-
mockBackfillManifest.mockResolvedValue({ planned: [], written: ['linear'], skipped: [] });
|
|
160
|
-
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
161
|
-
await runAuditSources(baseOptions({ apply: true, yes: true }));
|
|
162
|
-
expect(mockBackfillManifest).toHaveBeenCalledWith(expect.objectContaining({ summary: expect.any(Object) }), expect.objectContaining({ apply: true }));
|
|
163
|
-
logSpy.mockRestore();
|
|
164
|
-
});
|
|
165
|
-
// --------------------------------------------------------------------------
|
|
166
|
-
// Multi-candidate row appears in JSON output
|
|
167
|
-
// --------------------------------------------------------------------------
|
|
168
|
-
it('--json includes candidates array when ambiguous (multi-match)', async () => {
|
|
169
|
-
const ambiguousReport = makeReport({
|
|
170
|
-
skills: [
|
|
171
|
-
{
|
|
172
|
-
skillName: 'git-helper',
|
|
173
|
-
installPath: '/home/user/.claude/skills/git-helper',
|
|
174
|
-
recoveredSource: null,
|
|
175
|
-
registryId: null,
|
|
176
|
-
method: 'registry-name',
|
|
177
|
-
confidence: 'low',
|
|
178
|
-
candidates: [
|
|
179
|
-
{
|
|
180
|
-
id: 'id-1',
|
|
181
|
-
name: 'git-helper',
|
|
182
|
-
owner: 'alice',
|
|
183
|
-
repo: 'git-helper',
|
|
184
|
-
url: 'https://github.com/alice/git-helper',
|
|
185
|
-
qualityScore: 80,
|
|
186
|
-
},
|
|
187
|
-
{
|
|
188
|
-
id: 'id-2',
|
|
189
|
-
name: 'git-helper',
|
|
190
|
-
owner: 'bob',
|
|
191
|
-
repo: 'git-helper',
|
|
192
|
-
url: 'https://github.com/bob/git-helper',
|
|
193
|
-
qualityScore: 60,
|
|
194
|
-
},
|
|
195
|
-
],
|
|
196
|
-
status: 'unknown',
|
|
197
|
-
},
|
|
198
|
-
],
|
|
199
|
-
summary: { total: 1, recovered: 0, already_tracked: 0, unknown: 1, skipped_backup: 0 },
|
|
200
|
-
});
|
|
201
|
-
mockRecoverSources.mockResolvedValue(ambiguousReport);
|
|
202
|
-
const written = [];
|
|
203
|
-
vi.spyOn(process.stdout, 'write').mockImplementation((chunk) => {
|
|
204
|
-
if (typeof chunk === 'string')
|
|
205
|
-
written.push(chunk);
|
|
206
|
-
return true;
|
|
207
|
-
});
|
|
208
|
-
await runAuditSources(baseOptions({ json: true }));
|
|
209
|
-
const parsed = JSON.parse(written.join(''));
|
|
210
|
-
expect(parsed.skills[0]?.candidates).toHaveLength(2);
|
|
211
|
-
});
|
|
212
|
-
// --------------------------------------------------------------------------
|
|
213
|
-
// --write-frontmatter without --force-write-frontmatter exits non-zero
|
|
214
|
-
// --------------------------------------------------------------------------
|
|
215
|
-
it('--write-frontmatter without --force-write-frontmatter exits with code 1', async () => {
|
|
216
|
-
const exitSpy = vi
|
|
217
|
-
.spyOn(process, 'exit')
|
|
218
|
-
.mockImplementation((_code) => {
|
|
219
|
-
throw new Error('process.exit');
|
|
220
|
-
});
|
|
221
|
-
const errSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
222
|
-
await expect(runAuditSources(baseOptions({ writeFrontmatter: true, forceWriteFrontmatter: false }))).rejects.toThrow('process.exit');
|
|
223
|
-
expect(exitSpy).toHaveBeenCalledWith(1);
|
|
224
|
-
exitSpy.mockRestore();
|
|
225
|
-
errSpy.mockRestore();
|
|
226
|
-
});
|
|
227
|
-
});
|
|
228
|
-
//# sourceMappingURL=audit-sources.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit-sources.test.js","sourceRoot":"","sources":["../../../src/commands/audit-sources.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview skillsmith audit command — CLI security advisory checker
|
|
3
|
-
* @module @skillsmith/cli/commands/audit
|
|
4
|
-
* @see SMI-skill-version-tracking Wave 3 (advisories subcommand)
|
|
5
|
-
* @see SMI-4590 Wave 4 Step 0a — restructured into parent `audit` command
|
|
6
|
-
*
|
|
7
|
-
* Lists active security advisories for installed skills in npm-audit style
|
|
8
|
-
* output. Advisories are published by the Skillsmith team as security
|
|
9
|
-
* issues are identified.
|
|
10
|
-
*
|
|
11
|
-
* Tier gate: Team (via requireTier).
|
|
12
|
-
* Use --fix to attempt `skillsmith update <skill>` for each advisory with a patch.
|
|
13
|
-
*
|
|
14
|
-
* Surface (post-SMI-4590 Step 0a):
|
|
15
|
-
* - `sklx audit advisories <skill-id>` (canonical)
|
|
16
|
-
* - `sklx audit <skill-id>` (deprecation alias — emits warning, forwards to advisories)
|
|
17
|
-
* - `sklx audit collisions` is the namespace-collision audit (SMI-4590 PR 5/6).
|
|
18
|
-
*/
|
|
19
|
-
import { Command } from 'commander';
|
|
20
|
-
export declare const advisoriesAction: (opts: Record<string, string | boolean | undefined>) => Promise<void>;
|
|
21
|
-
export declare function createAuditAdvisoriesSubcommand(): Command;
|
|
22
|
-
/**
|
|
23
|
-
* Deprecation warning for top-level `sklx audit <skill-id>` flat invocation.
|
|
24
|
-
* Removal target: next minor release.
|
|
25
|
-
*
|
|
26
|
-
* @internal exported for tests.
|
|
27
|
-
*/
|
|
28
|
-
export declare const AUDIT_FLAT_DEPRECATION_NOTICE = "[DEPRECATED] sklx audit <skill-id> is deprecated; use 'sklx audit advisories <skill-id>' instead. This alias will be removed in the next minor version.";
|
|
29
|
-
/**
|
|
30
|
-
* Build the parent `audit` command. Subcommands:
|
|
31
|
-
* - `advisories` — security advisory checker (canonical, Team tier).
|
|
32
|
-
* - `<skill-id>` (positional fallback) — deprecation alias forwarding to
|
|
33
|
-
* `advisories`. Emits a stderr warning. Removed in next minor release.
|
|
34
|
-
*
|
|
35
|
-
* `sklx audit collisions` is added by SMI-4590 PR 5/6.
|
|
36
|
-
*/
|
|
37
|
-
export declare function createAuditCommand(): Command;
|
|
38
|
-
export declare const auditAction: (skillId: string | undefined, opts: Record<string, string | boolean | undefined>, command: Command) => Promise<void>;
|
|
39
|
-
export default createAuditCommand;
|
|
40
|
-
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/commands/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAiKnC,eAAO,MAAM,gBAAgB,uEAI3B,CAAA;AAEF,wBAAgB,+BAA+B,IAAI,OAAO,CAMzD;AAED;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,4JACiH,CAAA;AAE3J;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CA0B5C;AA4BD,eAAO,MAAM,WAAW,sHAItB,CAAA;AAEF,eAAe,kBAAkB,CAAA"}
|
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview skillsmith audit command — CLI security advisory checker
|
|
3
|
-
* @module @skillsmith/cli/commands/audit
|
|
4
|
-
* @see SMI-skill-version-tracking Wave 3 (advisories subcommand)
|
|
5
|
-
* @see SMI-4590 Wave 4 Step 0a — restructured into parent `audit` command
|
|
6
|
-
*
|
|
7
|
-
* Lists active security advisories for installed skills in npm-audit style
|
|
8
|
-
* output. Advisories are published by the Skillsmith team as security
|
|
9
|
-
* issues are identified.
|
|
10
|
-
*
|
|
11
|
-
* Tier gate: Team (via requireTier).
|
|
12
|
-
* Use --fix to attempt `skillsmith update <skill>` for each advisory with a patch.
|
|
13
|
-
*
|
|
14
|
-
* Surface (post-SMI-4590 Step 0a):
|
|
15
|
-
* - `sklx audit advisories <skill-id>` (canonical)
|
|
16
|
-
* - `sklx audit <skill-id>` (deprecation alias — emits warning, forwards to advisories)
|
|
17
|
-
* - `sklx audit collisions` is the namespace-collision audit (SMI-4590 PR 5/6).
|
|
18
|
-
*/
|
|
19
|
-
import { Command } from 'commander';
|
|
20
|
-
import chalk from 'chalk';
|
|
21
|
-
import { AdvisoryRepository } from '@skillsmith/core';
|
|
22
|
-
import { withTelemetry } from '@skillsmith/core/telemetry';
|
|
23
|
-
import { openCliDatabase } from '../utils/open-database.js';
|
|
24
|
-
import { DEFAULT_DB_PATH } from '../config.js';
|
|
25
|
-
import { sanitizeError } from '../utils/sanitize.js';
|
|
26
|
-
import { requireTier } from '../utils/require-tier.js';
|
|
27
|
-
import { createAuditCollisionsSubcommand } from './audit-collisions.js';
|
|
28
|
-
import { createAuditSourcesSubcommand } from './audit-sources.js';
|
|
29
|
-
// ============================================================================
|
|
30
|
-
// Severity display helpers
|
|
31
|
-
// ============================================================================
|
|
32
|
-
const SEVERITY_COLORS = {
|
|
33
|
-
critical: chalk.bgRed.white.bold,
|
|
34
|
-
high: chalk.red.bold,
|
|
35
|
-
medium: chalk.yellow.bold,
|
|
36
|
-
low: chalk.cyan,
|
|
37
|
-
};
|
|
38
|
-
const SEVERITY_PREFIXES = {
|
|
39
|
-
critical: '[!]',
|
|
40
|
-
high: '[*]',
|
|
41
|
-
medium: '[+]',
|
|
42
|
-
low: '[-]',
|
|
43
|
-
};
|
|
44
|
-
function colorSeverity(severity) {
|
|
45
|
-
const colorFn = SEVERITY_COLORS[severity] ?? chalk.white;
|
|
46
|
-
const prefix = SEVERITY_PREFIXES[severity] ?? ' ';
|
|
47
|
-
return colorFn(prefix + ' ' + severity.padEnd(8));
|
|
48
|
-
}
|
|
49
|
-
// ============================================================================
|
|
50
|
-
// Output formatting
|
|
51
|
-
// ============================================================================
|
|
52
|
-
/**
|
|
53
|
-
* Print advisories in npm-audit style format
|
|
54
|
-
*/
|
|
55
|
-
function printAdvisories(advisories) {
|
|
56
|
-
for (const adv of advisories) {
|
|
57
|
-
const fixLabel = adv.patchedVersions
|
|
58
|
-
? chalk.green(`Fix: skillsmith update ${adv.skillId}`)
|
|
59
|
-
: chalk.dim('No fix available');
|
|
60
|
-
console.log(`${colorSeverity(adv.severity)} ${chalk.bold(adv.title)}\n` +
|
|
61
|
-
` ${chalk.dim(adv.id)}\n` +
|
|
62
|
-
` ${fixLabel}\n`);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Print severity summary
|
|
67
|
-
*/
|
|
68
|
-
function printSummary(counts) {
|
|
69
|
-
const total = Object.values(counts).reduce((a, b) => a + b, 0);
|
|
70
|
-
console.log(chalk.bold('Summary:'));
|
|
71
|
-
if (counts['critical'])
|
|
72
|
-
console.log(` ${chalk.bgRed.white.bold('[!] critical')} ${counts['critical']}`);
|
|
73
|
-
if (counts['high'])
|
|
74
|
-
console.log(` ${chalk.red.bold('[*] high ')} ${counts['high']}`);
|
|
75
|
-
if (counts['medium'])
|
|
76
|
-
console.log(` ${chalk.yellow.bold('[+] medium ')} ${counts['medium']}`);
|
|
77
|
-
if (counts['low'])
|
|
78
|
-
console.log(` ${chalk.cyan('[-] low ')} ${counts['low']}`);
|
|
79
|
-
console.log(` ${' total '.padEnd(14)} ${total}`);
|
|
80
|
-
}
|
|
81
|
-
async function runAdvisoriesAudit(options) {
|
|
82
|
-
// Team tier required for security advisories
|
|
83
|
-
await requireTier('team');
|
|
84
|
-
const db = await openCliDatabase(options.db);
|
|
85
|
-
try {
|
|
86
|
-
const advisoryRepo = new AdvisoryRepository(db);
|
|
87
|
-
const advisories = advisoryRepo.getActiveAdvisories();
|
|
88
|
-
if (advisories.length === 0) {
|
|
89
|
-
console.log(chalk.dim('\nNo advisories found.'));
|
|
90
|
-
console.log(chalk.dim('No advisories have been published yet. This does not indicate installed\n' +
|
|
91
|
-
'skills have been reviewed. Run `skillsmith sync` to fetch the latest.'));
|
|
92
|
-
console.log();
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
console.log(chalk.bold.blue('\n=== Skill Security Audit ===\n'));
|
|
96
|
-
printAdvisories(advisories);
|
|
97
|
-
// Count by severity
|
|
98
|
-
const counts = {};
|
|
99
|
-
for (const adv of advisories) {
|
|
100
|
-
counts[adv.severity] = (counts[adv.severity] ?? 0) + 1;
|
|
101
|
-
}
|
|
102
|
-
printSummary(counts);
|
|
103
|
-
console.log();
|
|
104
|
-
if (options.fix) {
|
|
105
|
-
const fixable = advisories.filter((a) => a.patchedVersions);
|
|
106
|
-
if (fixable.length === 0) {
|
|
107
|
-
console.log(chalk.yellow('No fixable advisories found.'));
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
console.log(chalk.bold(`\nAttempting to fix ${fixable.length} advisory(s)...\n`));
|
|
111
|
-
const skillsToUpdate = [...new Set(fixable.map((a) => a.skillId))];
|
|
112
|
-
for (const skillId of skillsToUpdate) {
|
|
113
|
-
console.log(chalk.cyan(` Running: skillsmith update ${skillId}`));
|
|
114
|
-
// Wave 2 will implement full update logic; this surfaces the intent clearly
|
|
115
|
-
console.log(chalk.dim(` (update for ${skillId} — requires Wave 2 update implementation)`));
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
finally {
|
|
120
|
-
db.close();
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
// ============================================================================
|
|
124
|
-
// Command factories
|
|
125
|
-
// ============================================================================
|
|
126
|
-
/**
|
|
127
|
-
* Build the `advisories` subcommand. Same body as the pre-SMI-4590 flat
|
|
128
|
-
* `audit` command — only the surface (parent + name) changed.
|
|
129
|
-
*
|
|
130
|
-
* @internal exported for tests; consumers should use {@link createAuditCommand}.
|
|
131
|
-
*/
|
|
132
|
-
// SMI-5128: extracted from inline .action() closure so withTelemetry can wrap
|
|
133
|
-
// it at the export boundary (SMI-5040 coverage gate).
|
|
134
|
-
async function advisoriesActionImpl(opts) {
|
|
135
|
-
try {
|
|
136
|
-
await runAdvisoriesAudit({
|
|
137
|
-
db: opts['db'],
|
|
138
|
-
fix: opts['fix'] ?? false,
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
catch (error) {
|
|
142
|
-
console.error(chalk.red('Error:'), sanitizeError(error));
|
|
143
|
-
process.exit(1);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
export const advisoriesAction = withTelemetry(advisoriesActionImpl, {
|
|
147
|
-
source: 'cli',
|
|
148
|
-
extractSkillId: () => 'advisories',
|
|
149
|
-
extractFramework: () => 'cli',
|
|
150
|
-
});
|
|
151
|
-
export function createAuditAdvisoriesSubcommand() {
|
|
152
|
-
return new Command('advisories')
|
|
153
|
-
.description('Check installed skills for known security advisories (Team tier required)')
|
|
154
|
-
.option('-d, --db <path>', 'Database file path', DEFAULT_DB_PATH)
|
|
155
|
-
.option('--fix', 'Attempt to update skills with available patches')
|
|
156
|
-
.action(advisoriesAction);
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Deprecation warning for top-level `sklx audit <skill-id>` flat invocation.
|
|
160
|
-
* Removal target: next minor release.
|
|
161
|
-
*
|
|
162
|
-
* @internal exported for tests.
|
|
163
|
-
*/
|
|
164
|
-
export const AUDIT_FLAT_DEPRECATION_NOTICE = "[DEPRECATED] sklx audit <skill-id> is deprecated; use 'sklx audit advisories <skill-id>' instead. This alias will be removed in the next minor version.";
|
|
165
|
-
/**
|
|
166
|
-
* Build the parent `audit` command. Subcommands:
|
|
167
|
-
* - `advisories` — security advisory checker (canonical, Team tier).
|
|
168
|
-
* - `<skill-id>` (positional fallback) — deprecation alias forwarding to
|
|
169
|
-
* `advisories`. Emits a stderr warning. Removed in next minor release.
|
|
170
|
-
*
|
|
171
|
-
* `sklx audit collisions` is added by SMI-4590 PR 5/6.
|
|
172
|
-
*/
|
|
173
|
-
export function createAuditCommand() {
|
|
174
|
-
const audit = new Command('audit').description('Audit installed skills (advisories, namespace collisions)');
|
|
175
|
-
audit.addCommand(createAuditAdvisoriesSubcommand());
|
|
176
|
-
// SMI-4590 PR 5/6 — register `collisions` sibling subcommand.
|
|
177
|
-
audit.addCommand(createAuditCollisionsSubcommand());
|
|
178
|
-
// SMI-5407 — register `sources` sibling subcommand.
|
|
179
|
-
audit.addCommand(createAuditSourcesSubcommand());
|
|
180
|
-
// Deprecation alias: `sklx audit <skill-id>` → forward to `advisories`.
|
|
181
|
-
// Implemented as a default-action on the parent: when Commander is invoked
|
|
182
|
-
// with positional args that don't match a registered subcommand, emit the
|
|
183
|
-
// deprecation notice and route to the advisories action.
|
|
184
|
-
//
|
|
185
|
-
// We use `.argument('[skillId]')` + `.action()` to capture the positional
|
|
186
|
-
// fallback. Commander resolves registered subcommands first, so this fires
|
|
187
|
-
// only for unknown subcommand strings (treated as <skill-id>).
|
|
188
|
-
audit
|
|
189
|
-
.argument('[skillId]', 'Legacy positional skill-id (deprecated; use `advisories <skill-id>`)')
|
|
190
|
-
.option('-d, --db <path>', 'Database file path (deprecated alias)', DEFAULT_DB_PATH)
|
|
191
|
-
.option('--fix', 'Attempt to update skills with available patches (deprecated alias)')
|
|
192
|
-
.action(auditAction);
|
|
193
|
-
return audit;
|
|
194
|
-
}
|
|
195
|
-
// SMI-5128: extracted from the parent `audit` inline .action() closure so
|
|
196
|
-
// withTelemetry can wrap it. `command.help()` (commander passes the Command as
|
|
197
|
-
// the final action arg) replaces the closure's `audit.help()`.
|
|
198
|
-
async function auditActionImpl(skillId, opts, command) {
|
|
199
|
-
if (skillId === undefined) {
|
|
200
|
-
// No subcommand and no positional — print parent help.
|
|
201
|
-
command.help();
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
// Emit deprecation warning to stderr; do not pollute stdout.
|
|
205
|
-
console.error(chalk.yellow(AUDIT_FLAT_DEPRECATION_NOTICE));
|
|
206
|
-
try {
|
|
207
|
-
await runAdvisoriesAudit({
|
|
208
|
-
db: opts['db'],
|
|
209
|
-
fix: opts['fix'] ?? false,
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
catch (error) {
|
|
213
|
-
console.error(chalk.red('Error:'), sanitizeError(error));
|
|
214
|
-
process.exit(1);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
export const auditAction = withTelemetry(auditActionImpl, {
|
|
218
|
-
source: 'cli',
|
|
219
|
-
extractSkillId: () => 'audit',
|
|
220
|
-
extractFramework: () => 'cli',
|
|
221
|
-
});
|
|
222
|
-
export default createAuditCommand;
|
|
223
|
-
//# sourceMappingURL=audit.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/commands/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit.test.d.ts","sourceRoot":"","sources":["../../../src/commands/audit.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Unit tests for `skillsmith audit` CLI command
|
|
3
|
-
* @see SMI-skill-version-tracking Wave 3
|
|
4
|
-
*
|
|
5
|
-
* Uses SKILLSMITH_SKIP_LICENSE_CHECK=true to bypass tier gate in tests.
|
|
6
|
-
*/
|
|
7
|
-
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
8
|
-
import { AdvisoryRepository } from '@skillsmith/core';
|
|
9
|
-
import { createTestDatabase, closeDatabase } from '@skillsmith/core/testkit';
|
|
10
|
-
// ============================================================================
|
|
11
|
-
// Helpers
|
|
12
|
-
// ============================================================================
|
|
13
|
-
function makeAdvisory(overrides = {}) {
|
|
14
|
-
return {
|
|
15
|
-
id: 'SSA-2026-001',
|
|
16
|
-
skillId: 'community/commit-helper',
|
|
17
|
-
severity: 'critical',
|
|
18
|
-
title: 'Prompt Injection in commit-helper',
|
|
19
|
-
description: 'A test advisory for CLI tests.',
|
|
20
|
-
publishedAt: '2026-01-15T00:00:00Z',
|
|
21
|
-
...overrides,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
// ============================================================================
|
|
25
|
-
// Tests — isolate the core logic by testing AdvisoryRepository output
|
|
26
|
-
// that the audit command displays, without spawning an actual Commander
|
|
27
|
-
// process (which would require SKILLSMITH_SKIP_LICENSE_CHECK in env).
|
|
28
|
-
// The command action itself is thin formatting logic over the repo.
|
|
29
|
-
// ============================================================================
|
|
30
|
-
describe('audit command — AdvisoryRepository integration', () => {
|
|
31
|
-
let db;
|
|
32
|
-
let repo;
|
|
33
|
-
beforeEach(async () => {
|
|
34
|
-
process.env['SKILLSMITH_SKIP_LICENSE_CHECK'] = 'true';
|
|
35
|
-
db = await createTestDatabase();
|
|
36
|
-
repo = new AdvisoryRepository(db);
|
|
37
|
-
});
|
|
38
|
-
afterEach(() => {
|
|
39
|
-
delete process.env['SKILLSMITH_SKIP_LICENSE_CHECK'];
|
|
40
|
-
closeDatabase(db);
|
|
41
|
-
});
|
|
42
|
-
it('returns empty array when DB has no advisories', () => {
|
|
43
|
-
const advisories = repo.getActiveAdvisories();
|
|
44
|
-
expect(advisories).toHaveLength(0);
|
|
45
|
-
});
|
|
46
|
-
it('returns advisory data for display when advisories exist', () => {
|
|
47
|
-
repo.upsertAdvisory(makeAdvisory({ id: 'SSA-2026-001', severity: 'critical', skillId: 'community/commit-helper' }));
|
|
48
|
-
repo.upsertAdvisory(makeAdvisory({ id: 'SSA-2026-002', severity: 'high', skillId: 'community/jest-helper' }));
|
|
49
|
-
const advisories = repo.getActiveAdvisories();
|
|
50
|
-
expect(advisories).toHaveLength(2);
|
|
51
|
-
const critical = advisories.filter((a) => a.severity === 'critical');
|
|
52
|
-
const high = advisories.filter((a) => a.severity === 'high');
|
|
53
|
-
expect(critical).toHaveLength(1);
|
|
54
|
-
expect(high).toHaveLength(1);
|
|
55
|
-
expect(critical[0].skillId).toBe('community/commit-helper');
|
|
56
|
-
expect(high[0].skillId).toBe('community/jest-helper');
|
|
57
|
-
});
|
|
58
|
-
it('reflects npm audit style data: title and id are present per advisory', () => {
|
|
59
|
-
repo.upsertAdvisory(makeAdvisory({
|
|
60
|
-
id: 'SSA-2026-003',
|
|
61
|
-
title: 'Prompt Injection in commit-helper',
|
|
62
|
-
severity: 'critical',
|
|
63
|
-
}));
|
|
64
|
-
const advisories = repo.getActiveAdvisories();
|
|
65
|
-
expect(advisories[0].title).toBe('Prompt Injection in commit-helper');
|
|
66
|
-
expect(advisories[0].id).toBe('SSA-2026-003');
|
|
67
|
-
});
|
|
68
|
-
it('fixAvailable is determined by presence of patchedVersions', () => {
|
|
69
|
-
repo.upsertAdvisory(makeAdvisory({ id: 'SSA-2026-004', patchedVersions: '[">=2.0.0"]' }));
|
|
70
|
-
repo.upsertAdvisory(makeAdvisory({ id: 'SSA-2026-005', skillId: 'community/other-skill' }));
|
|
71
|
-
const withPatch = repo.getAdvisoriesForSkill('community/commit-helper')[0];
|
|
72
|
-
const withoutPatch = repo.getAdvisoriesForSkill('community/other-skill')[0];
|
|
73
|
-
expect(withPatch.patchedVersions).toBeTruthy();
|
|
74
|
-
expect(withoutPatch.patchedVersions).toBeUndefined();
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
// ============================================================================
|
|
78
|
-
// Tests — requireTier bypass with SKILLSMITH_SKIP_LICENSE_CHECK
|
|
79
|
-
// ============================================================================
|
|
80
|
-
describe('audit command — requireTier bypass', () => {
|
|
81
|
-
it('does not throw when SKILLSMITH_SKIP_LICENSE_CHECK=true', async () => {
|
|
82
|
-
process.env['SKILLSMITH_SKIP_LICENSE_CHECK'] = 'true';
|
|
83
|
-
// requireTier should return without throwing
|
|
84
|
-
const { requireTier } = await import('../utils/require-tier.js');
|
|
85
|
-
await expect(requireTier('team')).resolves.toBeUndefined();
|
|
86
|
-
delete process.env['SKILLSMITH_SKIP_LICENSE_CHECK'];
|
|
87
|
-
});
|
|
88
|
-
it('throws when no license key and tier is required', async () => {
|
|
89
|
-
delete process.env['SKILLSMITH_SKIP_LICENSE_CHECK'];
|
|
90
|
-
delete process.env['SKILLSMITH_LICENSE_KEY'];
|
|
91
|
-
const { requireTier } = await import('../utils/require-tier.js');
|
|
92
|
-
// With no license key, community tier — should reject team requirement
|
|
93
|
-
// getLicenseStatus returns community tier when no key is present
|
|
94
|
-
await expect(requireTier('team')).rejects.toThrow(/team tier/);
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
//# sourceMappingURL=audit.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"audit.test.js","sourceRoot":"","sources":["../../../src/commands/audit.test.ts"],"names":[],"mappings":"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"}
|