@skillsmith/cli 0.7.1 → 0.7.3
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 +44039 -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 -283
- 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 -97
- 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,133 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Thin manifest reader for the Skillsmith CLI
|
|
3
|
-
* @module @skillsmith/cli/utils/manifest
|
|
4
|
-
* @see SMI-skill-version-tracking Wave 2
|
|
5
|
-
* @see SMI-5012 Wave 3: telemetry block + annual anonymous_id rotation
|
|
6
|
-
*
|
|
7
|
-
* Reads (and optionally writes) the ~/.skillsmith/manifest.json file.
|
|
8
|
-
* This mirrors the SkillManifest types defined in
|
|
9
|
-
* @skillsmith/mcp-server/tools/install.types without creating a cross-package
|
|
10
|
-
* dependency on mcp-server.
|
|
11
|
-
*
|
|
12
|
-
* The CLI owns its own read path; write operations (pin/unpin) use
|
|
13
|
-
* updateManifestEntry below which does an atomic temp-file rename.
|
|
14
|
-
*
|
|
15
|
-
* Concurrency note (v1): the atomic temp-file rename guarantees readers never
|
|
16
|
-
* see partial writes (POSIX rename(2) is atomic). A full file-lock (proper-lockfile)
|
|
17
|
-
* is NOT used here because proper-lockfile is not in the CLI's dependencies.
|
|
18
|
-
* v1 assumes single-writer-per-process; concurrent writers from the same machine
|
|
19
|
-
* (e.g., two concurrent `skillsmith telemetry` calls) may last-write-wins.
|
|
20
|
-
* This matches the shared-state matrix entry (plan line 715) which notes the
|
|
21
|
-
* proper-lockfile pattern but is aspirational for v2.
|
|
22
|
-
*/
|
|
23
|
-
import { createHash, randomUUID } from 'crypto';
|
|
24
|
-
import { readFile, writeFile, mkdir, rename } from 'fs/promises';
|
|
25
|
-
import { join, dirname } from 'path';
|
|
26
|
-
import { homedir } from 'os';
|
|
27
|
-
// ============================================================================
|
|
28
|
-
// Paths
|
|
29
|
-
// ============================================================================
|
|
30
|
-
const SKILLSMITH_DIR = join(homedir(), '.skillsmith');
|
|
31
|
-
export const MANIFEST_PATH = join(SKILLSMITH_DIR, 'manifest.json');
|
|
32
|
-
// ============================================================================
|
|
33
|
-
// Read / Write
|
|
34
|
-
// ============================================================================
|
|
35
|
-
/**
|
|
36
|
-
* Load the manifest from disk.
|
|
37
|
-
* Returns an empty manifest if the file does not exist.
|
|
38
|
-
*/
|
|
39
|
-
export async function loadManifest() {
|
|
40
|
-
try {
|
|
41
|
-
const content = await readFile(MANIFEST_PATH, 'utf-8');
|
|
42
|
-
return JSON.parse(content);
|
|
43
|
-
}
|
|
44
|
-
catch {
|
|
45
|
-
return { version: '1.0.0', installedSkills: {} };
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Save the manifest atomically (temp file → rename).
|
|
50
|
-
*/
|
|
51
|
-
export async function saveManifest(manifest) {
|
|
52
|
-
await mkdir(dirname(MANIFEST_PATH), { recursive: true });
|
|
53
|
-
const tmpPath = `${MANIFEST_PATH}.tmp.${process.pid}`;
|
|
54
|
-
await writeFile(tmpPath, JSON.stringify(manifest, null, 2));
|
|
55
|
-
await rename(tmpPath, MANIFEST_PATH);
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Load the manifest, apply an update function, and save atomically.
|
|
59
|
-
*/
|
|
60
|
-
export async function updateManifestEntry(updateFn) {
|
|
61
|
-
const manifest = await loadManifest();
|
|
62
|
-
const updated = updateFn(manifest);
|
|
63
|
-
await saveManifest(updated);
|
|
64
|
-
}
|
|
65
|
-
// ============================================================================
|
|
66
|
-
// Telemetry helpers (SMI-5012 Wave 3)
|
|
67
|
-
// ============================================================================
|
|
68
|
-
const ROTATION_DAYS = 365;
|
|
69
|
-
const OVERLAP_DAYS = 7;
|
|
70
|
-
const MS_PER_DAY = 86_400_000;
|
|
71
|
-
/**
|
|
72
|
-
* Generate a new anonymous telemetry id.
|
|
73
|
-
*
|
|
74
|
-
* Returns SHA-256(crypto.randomUUID()) as a 64-character lowercase hex string.
|
|
75
|
-
* The UUID is not stored; only the hash reaches the wire (plan line 719).
|
|
76
|
-
*/
|
|
77
|
-
export function generateAnonymousId() {
|
|
78
|
-
return createHash('sha256').update(randomUUID()).digest('hex');
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Returns true if the manifest's anonymousId should be rotated.
|
|
82
|
-
*
|
|
83
|
-
* Rotation is triggered when anonymousIdCreatedAt is older than 365 days.
|
|
84
|
-
* Returns false if the field is absent (id was never generated).
|
|
85
|
-
*/
|
|
86
|
-
export function shouldRotateAnonymousId(manifest) {
|
|
87
|
-
const createdAt = manifest.telemetry?.anonymousIdCreatedAt;
|
|
88
|
-
if (!createdAt)
|
|
89
|
-
return false;
|
|
90
|
-
const ageMs = Date.now() - new Date(createdAt).getTime();
|
|
91
|
-
return ageMs > ROTATION_DAYS * MS_PER_DAY;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Rotate the anonymous id.
|
|
95
|
-
*
|
|
96
|
-
* Moves the current id to previousAnonymousId with a 7-day retirement window,
|
|
97
|
-
* generates a fresh id, and updates anonymousIdCreatedAt to now.
|
|
98
|
-
* Returns a new TelemetryManifest — does NOT write to disk.
|
|
99
|
-
* Callers must persist via saveManifest / updateManifestEntry.
|
|
100
|
-
*/
|
|
101
|
-
export function rotateAnonymousId(manifest) {
|
|
102
|
-
const current = manifest.telemetry ?? { enabled: false };
|
|
103
|
-
const now = new Date();
|
|
104
|
-
const retiredAt = new Date(now.getTime() + OVERLAP_DAYS * MS_PER_DAY);
|
|
105
|
-
const next = {
|
|
106
|
-
...current,
|
|
107
|
-
anonymousId: generateAnonymousId(),
|
|
108
|
-
anonymousIdCreatedAt: now.toISOString(),
|
|
109
|
-
previousAnonymousIdRetiredAt: retiredAt.toISOString(),
|
|
110
|
-
};
|
|
111
|
-
if (current.anonymousId !== undefined) {
|
|
112
|
-
next.previousAnonymousId = current.anonymousId;
|
|
113
|
-
}
|
|
114
|
-
return next;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Remove previousAnonymousId once its retirement window has passed.
|
|
118
|
-
*
|
|
119
|
-
* Should be called on every `skillsmith telemetry status` run and before
|
|
120
|
-
* each hook-script read. No-op if the window has not yet elapsed or if
|
|
121
|
-
* there is no previous id. Returns a new TelemetryManifest.
|
|
122
|
-
*/
|
|
123
|
-
export function sweepExpiredPreviousId(manifest) {
|
|
124
|
-
const t = manifest.telemetry ?? { enabled: false };
|
|
125
|
-
if (!t.previousAnonymousIdRetiredAt)
|
|
126
|
-
return t;
|
|
127
|
-
const retiredAt = new Date(t.previousAnonymousIdRetiredAt).getTime();
|
|
128
|
-
if (Date.now() < retiredAt)
|
|
129
|
-
return t;
|
|
130
|
-
const { previousAnonymousId: _a, previousAnonymousIdRetiredAt: _b, ...rest } = t;
|
|
131
|
-
return rest;
|
|
132
|
-
}
|
|
133
|
-
//# sourceMappingURL=manifest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/utils/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Tests for manifest utilities — telemetry block (SMI-5012 W3)
|
|
3
|
-
* @module @skillsmith/cli/utils/manifest.test
|
|
4
|
-
*
|
|
5
|
-
* Tests the TelemetryManifest schema additions and the four helper functions:
|
|
6
|
-
* generateAnonymousId, shouldRotateAnonymousId, rotateAnonymousId,
|
|
7
|
-
* sweepExpiredPreviousId
|
|
8
|
-
*
|
|
9
|
-
* Also covers manifest roundtrip (save → load preserves telemetry block) and
|
|
10
|
-
* the atomic temp-file-rename code path for the sequential-correctness
|
|
11
|
-
* concurrent-writer test.
|
|
12
|
-
*
|
|
13
|
-
* Concurrency note: vitest does not support true OS-level concurrency in a
|
|
14
|
-
* single process. The "concurrent writer" test exercises the temp-file rename
|
|
15
|
-
* code path sequentially — two writes to the same file where the second must
|
|
16
|
-
* fully overwrite the first without leaving partial state. True lock contention
|
|
17
|
-
* is a v2 concern tracked in the shared-state matrix (plan line 715).
|
|
18
|
-
*/
|
|
19
|
-
export {};
|
|
20
|
-
//# sourceMappingURL=manifest.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.test.d.ts","sourceRoot":"","sources":["../../../src/utils/manifest.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
|
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Tests for manifest utilities — telemetry block (SMI-5012 W3)
|
|
3
|
-
* @module @skillsmith/cli/utils/manifest.test
|
|
4
|
-
*
|
|
5
|
-
* Tests the TelemetryManifest schema additions and the four helper functions:
|
|
6
|
-
* generateAnonymousId, shouldRotateAnonymousId, rotateAnonymousId,
|
|
7
|
-
* sweepExpiredPreviousId
|
|
8
|
-
*
|
|
9
|
-
* Also covers manifest roundtrip (save → load preserves telemetry block) and
|
|
10
|
-
* the atomic temp-file-rename code path for the sequential-correctness
|
|
11
|
-
* concurrent-writer test.
|
|
12
|
-
*
|
|
13
|
-
* Concurrency note: vitest does not support true OS-level concurrency in a
|
|
14
|
-
* single process. The "concurrent writer" test exercises the temp-file rename
|
|
15
|
-
* code path sequentially — two writes to the same file where the second must
|
|
16
|
-
* fully overwrite the first without leaving partial state. True lock contention
|
|
17
|
-
* is a v2 concern tracked in the shared-state matrix (plan line 715).
|
|
18
|
-
*/
|
|
19
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
20
|
-
import { mkdir, writeFile, rename } from 'fs/promises';
|
|
21
|
-
// ============================================================================
|
|
22
|
-
// In-memory fs mock for isolation — covers save/load roundtrip tests
|
|
23
|
-
// ============================================================================
|
|
24
|
-
// We mock 'fs/promises' so tests never touch ~/.skillsmith on the developer's machine.
|
|
25
|
-
// The mock implements the subset used by manifest.ts: mkdir, writeFile, rename, readFile.
|
|
26
|
-
//
|
|
27
|
-
// memfs is declared as a module-scope object (not Map) so the vi.mock factory
|
|
28
|
-
// closure can reference it even after vi.mock hoisting reorders the declaration.
|
|
29
|
-
// Tests clear memfs keys in beforeEach/afterEach for isolation.
|
|
30
|
-
const memfs = {};
|
|
31
|
-
vi.mock('fs/promises', () => ({
|
|
32
|
-
mkdir: vi.fn(async () => undefined),
|
|
33
|
-
writeFile: vi.fn(async (path, content) => {
|
|
34
|
-
memfs[path] = content;
|
|
35
|
-
}),
|
|
36
|
-
rename: vi.fn(async (src, dst) => {
|
|
37
|
-
const content = memfs[src];
|
|
38
|
-
if (content === undefined)
|
|
39
|
-
throw new Error(`ENOENT: ${src}`);
|
|
40
|
-
memfs[dst] = content;
|
|
41
|
-
delete memfs[src];
|
|
42
|
-
}),
|
|
43
|
-
readFile: vi.fn(async (path) => {
|
|
44
|
-
const content = memfs[path];
|
|
45
|
-
if (content === undefined)
|
|
46
|
-
throw Object.assign(new Error(`ENOENT: ${path}`), { code: 'ENOENT' });
|
|
47
|
-
return content;
|
|
48
|
-
}),
|
|
49
|
-
}));
|
|
50
|
-
// Import AFTER mocks are registered
|
|
51
|
-
import { loadManifest, saveManifest, generateAnonymousId, shouldRotateAnonymousId, rotateAnonymousId, sweepExpiredPreviousId, } from './manifest.js';
|
|
52
|
-
// ============================================================================
|
|
53
|
-
// Helpers
|
|
54
|
-
// ============================================================================
|
|
55
|
-
function makeManifest(telemetry) {
|
|
56
|
-
return {
|
|
57
|
-
version: '1.0.0',
|
|
58
|
-
installedSkills: {},
|
|
59
|
-
...(telemetry !== undefined ? { telemetry } : {}),
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
/** Build an ISO string N days in the past */
|
|
63
|
-
function daysAgo(n) {
|
|
64
|
-
return new Date(Date.now() - n * 86_400_000).toISOString();
|
|
65
|
-
}
|
|
66
|
-
/** Build an ISO string N days in the future */
|
|
67
|
-
function daysFromNow(n) {
|
|
68
|
-
return new Date(Date.now() + n * 86_400_000).toISOString();
|
|
69
|
-
}
|
|
70
|
-
// ============================================================================
|
|
71
|
-
// Tests
|
|
72
|
-
// ============================================================================
|
|
73
|
-
describe('telemetry block', () => {
|
|
74
|
-
beforeEach(() => {
|
|
75
|
-
for (const k of Object.keys(memfs))
|
|
76
|
-
delete memfs[k];
|
|
77
|
-
vi.clearAllMocks();
|
|
78
|
-
});
|
|
79
|
-
afterEach(() => {
|
|
80
|
-
for (const k of Object.keys(memfs))
|
|
81
|
-
delete memfs[k];
|
|
82
|
-
});
|
|
83
|
-
// --------------------------------------------------------------------------
|
|
84
|
-
// Default: fresh config has no telemetry block
|
|
85
|
-
// --------------------------------------------------------------------------
|
|
86
|
-
describe('default — fresh config', () => {
|
|
87
|
-
it('loadManifest returns a manifest with no telemetry key when file is absent', async () => {
|
|
88
|
-
// memfs is empty → readFile throws ENOENT → loadManifest returns default
|
|
89
|
-
const m = await loadManifest();
|
|
90
|
-
expect(m.telemetry).toBeUndefined();
|
|
91
|
-
});
|
|
92
|
-
it('a manifest without telemetry block is treated as enabled: false by helpers', () => {
|
|
93
|
-
const m = makeManifest();
|
|
94
|
-
expect(shouldRotateAnonymousId(m)).toBe(false);
|
|
95
|
-
const swept = sweepExpiredPreviousId(m);
|
|
96
|
-
expect(swept.enabled).toBe(false);
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
// --------------------------------------------------------------------------
|
|
100
|
-
// Roundtrip: write then read preserves telemetry block
|
|
101
|
-
// --------------------------------------------------------------------------
|
|
102
|
-
describe('roundtrip', () => {
|
|
103
|
-
it('saves and reloads a full telemetry block with deep equality', async () => {
|
|
104
|
-
const telemetry = {
|
|
105
|
-
enabled: true,
|
|
106
|
-
anonymousId: 'a'.repeat(64),
|
|
107
|
-
anonymousIdCreatedAt: '2026-01-01T00:00:00.000Z',
|
|
108
|
-
scope: 'personal',
|
|
109
|
-
};
|
|
110
|
-
const m = makeManifest(telemetry);
|
|
111
|
-
await saveManifest(m);
|
|
112
|
-
const loaded = await loadManifest();
|
|
113
|
-
expect(loaded.telemetry).toEqual(telemetry);
|
|
114
|
-
});
|
|
115
|
-
it('older configs without a telemetry key continue to load without error', async () => {
|
|
116
|
-
// Write a manifest that has no telemetry key (legacy shape)
|
|
117
|
-
const legacy = { version: '1.0.0', installedSkills: {} };
|
|
118
|
-
const { MANIFEST_PATH } = await import('./manifest.js');
|
|
119
|
-
memfs[MANIFEST_PATH] = JSON.stringify(legacy, null, 2);
|
|
120
|
-
const m = await loadManifest();
|
|
121
|
-
expect(m.telemetry).toBeUndefined();
|
|
122
|
-
expect(m.version).toBe('1.0.0');
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
// --------------------------------------------------------------------------
|
|
126
|
-
// generateAnonymousId
|
|
127
|
-
// --------------------------------------------------------------------------
|
|
128
|
-
describe('generateAnonymousId', () => {
|
|
129
|
-
it('returns a 64-character lowercase hex string (SHA-256 length)', () => {
|
|
130
|
-
const id = generateAnonymousId();
|
|
131
|
-
expect(id).toMatch(/^[0-9a-f]{64}$/);
|
|
132
|
-
});
|
|
133
|
-
it('returns distinct values on successive calls', () => {
|
|
134
|
-
const ids = new Set(Array.from({ length: 5 }, () => generateAnonymousId()));
|
|
135
|
-
expect(ids.size).toBe(5);
|
|
136
|
-
});
|
|
137
|
-
it('never returns the raw UUID (only the hash is exposed)', () => {
|
|
138
|
-
// A UUID has 36 chars including hyphens; our output must be 64 hex chars
|
|
139
|
-
const id = generateAnonymousId();
|
|
140
|
-
expect(id).not.toContain('-');
|
|
141
|
-
expect(id.length).toBe(64);
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
// --------------------------------------------------------------------------
|
|
145
|
-
// shouldRotateAnonymousId
|
|
146
|
-
// --------------------------------------------------------------------------
|
|
147
|
-
describe('shouldRotateAnonymousId', () => {
|
|
148
|
-
it('returns true when anonymousIdCreatedAt is 366 days ago', () => {
|
|
149
|
-
const m = makeManifest({ enabled: true, anonymousIdCreatedAt: daysAgo(366) });
|
|
150
|
-
expect(shouldRotateAnonymousId(m)).toBe(true);
|
|
151
|
-
});
|
|
152
|
-
it('returns false when anonymousIdCreatedAt is 364 days ago', () => {
|
|
153
|
-
const m = makeManifest({ enabled: true, anonymousIdCreatedAt: daysAgo(364) });
|
|
154
|
-
expect(shouldRotateAnonymousId(m)).toBe(false);
|
|
155
|
-
});
|
|
156
|
-
it('returns false when anonymousIdCreatedAt is exactly today', () => {
|
|
157
|
-
const m = makeManifest({ enabled: true, anonymousIdCreatedAt: new Date().toISOString() });
|
|
158
|
-
expect(shouldRotateAnonymousId(m)).toBe(false);
|
|
159
|
-
});
|
|
160
|
-
it('returns false when anonymousIdCreatedAt is undefined (id never generated)', () => {
|
|
161
|
-
const m = makeManifest({ enabled: false });
|
|
162
|
-
expect(shouldRotateAnonymousId(m)).toBe(false);
|
|
163
|
-
});
|
|
164
|
-
it('returns false when telemetry block is absent', () => {
|
|
165
|
-
const m = makeManifest();
|
|
166
|
-
expect(shouldRotateAnonymousId(m)).toBe(false);
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
// --------------------------------------------------------------------------
|
|
170
|
-
// rotateAnonymousId
|
|
171
|
-
// --------------------------------------------------------------------------
|
|
172
|
-
describe('rotateAnonymousId', () => {
|
|
173
|
-
it('generates a new id distinct from the previous one', () => {
|
|
174
|
-
const oldId = generateAnonymousId();
|
|
175
|
-
const m = makeManifest({
|
|
176
|
-
enabled: true,
|
|
177
|
-
anonymousId: oldId,
|
|
178
|
-
anonymousIdCreatedAt: daysAgo(400),
|
|
179
|
-
});
|
|
180
|
-
const rotated = rotateAnonymousId(m);
|
|
181
|
-
expect(rotated.anonymousId).toBeDefined();
|
|
182
|
-
expect(rotated.anonymousId).not.toBe(oldId);
|
|
183
|
-
expect(rotated.anonymousId).toMatch(/^[0-9a-f]{64}$/);
|
|
184
|
-
});
|
|
185
|
-
it('moves current id to previousAnonymousId', () => {
|
|
186
|
-
const oldId = generateAnonymousId();
|
|
187
|
-
const m = makeManifest({
|
|
188
|
-
enabled: true,
|
|
189
|
-
anonymousId: oldId,
|
|
190
|
-
anonymousIdCreatedAt: daysAgo(400),
|
|
191
|
-
});
|
|
192
|
-
const rotated = rotateAnonymousId(m);
|
|
193
|
-
expect(rotated.previousAnonymousId).toBe(oldId);
|
|
194
|
-
});
|
|
195
|
-
it('sets anonymousIdCreatedAt to approximately now', () => {
|
|
196
|
-
const before = Date.now();
|
|
197
|
-
const m = makeManifest({
|
|
198
|
-
enabled: true,
|
|
199
|
-
anonymousId: 'a'.repeat(64),
|
|
200
|
-
anonymousIdCreatedAt: daysAgo(400),
|
|
201
|
-
});
|
|
202
|
-
const rotated = rotateAnonymousId(m);
|
|
203
|
-
const createdMs = new Date(rotated.anonymousIdCreatedAt).getTime();
|
|
204
|
-
expect(createdMs).toBeGreaterThanOrEqual(before);
|
|
205
|
-
expect(createdMs).toBeLessThanOrEqual(Date.now());
|
|
206
|
-
});
|
|
207
|
-
it('sets previousAnonymousIdRetiredAt to approximately 7 days from now', () => {
|
|
208
|
-
const before = Date.now();
|
|
209
|
-
const m = makeManifest({
|
|
210
|
-
enabled: true,
|
|
211
|
-
anonymousId: 'a'.repeat(64),
|
|
212
|
-
anonymousIdCreatedAt: daysAgo(400),
|
|
213
|
-
});
|
|
214
|
-
const rotated = rotateAnonymousId(m);
|
|
215
|
-
const retiredMs = new Date(rotated.previousAnonymousIdRetiredAt).getTime();
|
|
216
|
-
const sevenDaysMs = 7 * 86_400_000;
|
|
217
|
-
// Allow 1-second tolerance for test execution time
|
|
218
|
-
expect(retiredMs).toBeGreaterThanOrEqual(before + sevenDaysMs - 1000);
|
|
219
|
-
expect(retiredMs).toBeLessThanOrEqual(Date.now() + sevenDaysMs + 1000);
|
|
220
|
-
});
|
|
221
|
-
it('preserves existing telemetry fields (enabled, scope) across rotation', () => {
|
|
222
|
-
const m = makeManifest({
|
|
223
|
-
enabled: true,
|
|
224
|
-
anonymousId: 'b'.repeat(64),
|
|
225
|
-
anonymousIdCreatedAt: daysAgo(400),
|
|
226
|
-
scope: 'team',
|
|
227
|
-
teamId: 'team-123',
|
|
228
|
-
});
|
|
229
|
-
const rotated = rotateAnonymousId(m);
|
|
230
|
-
expect(rotated.enabled).toBe(true);
|
|
231
|
-
expect(rotated.scope).toBe('team');
|
|
232
|
-
expect(rotated.teamId).toBe('team-123');
|
|
233
|
-
});
|
|
234
|
-
it('handles telemetry block being absent (acts like enabled: false with no prior id)', () => {
|
|
235
|
-
const m = makeManifest(); // no telemetry block
|
|
236
|
-
const rotated = rotateAnonymousId(m);
|
|
237
|
-
expect(rotated.anonymousId).toMatch(/^[0-9a-f]{64}$/);
|
|
238
|
-
// previousAnonymousId should be undefined since there was no prior id
|
|
239
|
-
expect(rotated.previousAnonymousId).toBeUndefined();
|
|
240
|
-
});
|
|
241
|
-
});
|
|
242
|
-
// --------------------------------------------------------------------------
|
|
243
|
-
// sweepExpiredPreviousId
|
|
244
|
-
// --------------------------------------------------------------------------
|
|
245
|
-
describe('sweepExpiredPreviousId', () => {
|
|
246
|
-
it('clears previousAnonymousId and previousAnonymousIdRetiredAt when retiredAt is past', () => {
|
|
247
|
-
const m = makeManifest({
|
|
248
|
-
enabled: true,
|
|
249
|
-
anonymousId: 'a'.repeat(64),
|
|
250
|
-
anonymousIdCreatedAt: daysAgo(10),
|
|
251
|
-
previousAnonymousId: 'b'.repeat(64),
|
|
252
|
-
previousAnonymousIdRetiredAt: daysAgo(1), // already past
|
|
253
|
-
});
|
|
254
|
-
const swept = sweepExpiredPreviousId(m);
|
|
255
|
-
expect(swept.previousAnonymousId).toBeUndefined();
|
|
256
|
-
expect(swept.previousAnonymousIdRetiredAt).toBeUndefined();
|
|
257
|
-
});
|
|
258
|
-
it('preserves previousAnonymousId when the overlap window has not elapsed', () => {
|
|
259
|
-
const prevId = 'c'.repeat(64);
|
|
260
|
-
const m = makeManifest({
|
|
261
|
-
enabled: true,
|
|
262
|
-
anonymousId: 'a'.repeat(64),
|
|
263
|
-
anonymousIdCreatedAt: daysAgo(2),
|
|
264
|
-
previousAnonymousId: prevId,
|
|
265
|
-
previousAnonymousIdRetiredAt: daysFromNow(5), // still in window
|
|
266
|
-
});
|
|
267
|
-
const swept = sweepExpiredPreviousId(m);
|
|
268
|
-
expect(swept.previousAnonymousId).toBe(prevId);
|
|
269
|
-
expect(swept.previousAnonymousIdRetiredAt).toBeDefined();
|
|
270
|
-
});
|
|
271
|
-
it('is a no-op when there is no previousAnonymousId', () => {
|
|
272
|
-
const m = makeManifest({ enabled: true, anonymousId: 'a'.repeat(64) });
|
|
273
|
-
const swept = sweepExpiredPreviousId(m);
|
|
274
|
-
expect(swept).toEqual({ enabled: true, anonymousId: 'a'.repeat(64) });
|
|
275
|
-
});
|
|
276
|
-
it('is a no-op when the telemetry block is absent', () => {
|
|
277
|
-
const m = makeManifest();
|
|
278
|
-
const swept = sweepExpiredPreviousId(m);
|
|
279
|
-
expect(swept.enabled).toBe(false);
|
|
280
|
-
expect(swept.previousAnonymousId).toBeUndefined();
|
|
281
|
-
});
|
|
282
|
-
it('preserves all other telemetry fields when sweeping', () => {
|
|
283
|
-
const m = makeManifest({
|
|
284
|
-
enabled: true,
|
|
285
|
-
anonymousId: 'a'.repeat(64),
|
|
286
|
-
anonymousIdCreatedAt: daysAgo(10),
|
|
287
|
-
scope: 'personal',
|
|
288
|
-
endpoint: 'https://staging.example.com',
|
|
289
|
-
previousAnonymousId: 'b'.repeat(64),
|
|
290
|
-
previousAnonymousIdRetiredAt: daysAgo(1),
|
|
291
|
-
});
|
|
292
|
-
const swept = sweepExpiredPreviousId(m);
|
|
293
|
-
expect(swept.scope).toBe('personal');
|
|
294
|
-
expect(swept.endpoint).toBe('https://staging.example.com');
|
|
295
|
-
expect(swept.anonymousId).toBe('a'.repeat(64));
|
|
296
|
-
});
|
|
297
|
-
});
|
|
298
|
-
// --------------------------------------------------------------------------
|
|
299
|
-
// Concurrent-writer (sequential atomic correctness)
|
|
300
|
-
//
|
|
301
|
-
// Exercises the temp-file-rename code path: two sequential saves to the
|
|
302
|
-
// same MANIFEST_PATH must result in the second write fully replacing the
|
|
303
|
-
// first without partial state visible to readers.
|
|
304
|
-
//
|
|
305
|
-
// True OS-level concurrent write contention is a v2 concern (plan line 715).
|
|
306
|
-
// --------------------------------------------------------------------------
|
|
307
|
-
describe('atomic write — sequential correctness', () => {
|
|
308
|
-
it('second save fully replaces first; reader never sees partial state', async () => {
|
|
309
|
-
const first = makeManifest({ enabled: false });
|
|
310
|
-
const second = makeManifest({
|
|
311
|
-
enabled: true,
|
|
312
|
-
anonymousId: 'd'.repeat(64),
|
|
313
|
-
anonymousIdCreatedAt: new Date().toISOString(),
|
|
314
|
-
scope: 'personal',
|
|
315
|
-
});
|
|
316
|
-
await saveManifest(first);
|
|
317
|
-
await saveManifest(second);
|
|
318
|
-
const loaded = await loadManifest();
|
|
319
|
-
// Reader must see the second write in its entirety
|
|
320
|
-
expect(loaded.telemetry?.enabled).toBe(true);
|
|
321
|
-
expect(loaded.telemetry?.anonymousId).toBe('d'.repeat(64));
|
|
322
|
-
expect(loaded.telemetry?.scope).toBe('personal');
|
|
323
|
-
});
|
|
324
|
-
it('temp file is removed after rename (no stale .tmp artifacts)', async () => {
|
|
325
|
-
const { MANIFEST_PATH } = await import('./manifest.js');
|
|
326
|
-
const tmpPath = `${MANIFEST_PATH}.tmp.${process.pid}`;
|
|
327
|
-
await saveManifest(makeManifest({ enabled: false }));
|
|
328
|
-
// The tmp file should have been renamed away — not present in memfs
|
|
329
|
-
expect(memfs[tmpPath]).toBeUndefined();
|
|
330
|
-
// The final path should be present
|
|
331
|
-
expect(memfs[MANIFEST_PATH]).toBeDefined();
|
|
332
|
-
});
|
|
333
|
-
it('the write path exercises mkdir → writeFile(tmp) → rename(tmp → final)', async () => {
|
|
334
|
-
const { MANIFEST_PATH } = await import('./manifest.js');
|
|
335
|
-
await saveManifest(makeManifest({ enabled: false }));
|
|
336
|
-
// Verify the mock call sequence: mkdir was called, then writeFile with tmp path,
|
|
337
|
-
// then rename from tmp to final
|
|
338
|
-
expect(mkdir).toHaveBeenCalled();
|
|
339
|
-
expect(writeFile).toHaveBeenCalledWith(expect.stringContaining('.tmp.'), expect.any(String));
|
|
340
|
-
expect(rename).toHaveBeenCalledWith(expect.stringContaining('.tmp.'), MANIFEST_PATH);
|
|
341
|
-
});
|
|
342
|
-
});
|
|
343
|
-
});
|
|
344
|
-
//# sourceMappingURL=manifest.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.test.js","sourceRoot":"","sources":["../../../src/utils/manifest.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SMI-1629: Node version detection with helpful errors
|
|
3
|
-
*
|
|
4
|
-
* Validates the runtime Node.js version against the minimum required
|
|
5
|
-
* version specified in package.json engines field.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Returns the minimum required Node.js version.
|
|
9
|
-
*
|
|
10
|
-
* @returns The minimum version string (e.g., "22.0.0")
|
|
11
|
-
*/
|
|
12
|
-
export declare function getMinNodeVersion(): string;
|
|
13
|
-
/**
|
|
14
|
-
* Returns the current Node.js version without the "v" prefix.
|
|
15
|
-
*
|
|
16
|
-
* @returns The current version string (e.g., "22.5.0")
|
|
17
|
-
*/
|
|
18
|
-
export declare function getCurrentNodeVersion(): string;
|
|
19
|
-
/**
|
|
20
|
-
* Compares two semantic version strings.
|
|
21
|
-
*
|
|
22
|
-
* @param a - First version string (e.g., "22.5.0")
|
|
23
|
-
* @param b - Second version string (e.g., "22.0.0")
|
|
24
|
-
* @returns Positive if a > b, negative if a < b, 0 if equal
|
|
25
|
-
*/
|
|
26
|
-
export declare function compareVersions(a: string, b: string): number;
|
|
27
|
-
/**
|
|
28
|
-
* Formats a helpful error message when the Node.js version is incompatible.
|
|
29
|
-
*
|
|
30
|
-
* @param currentVersion - The current Node.js version
|
|
31
|
-
* @param requiredVersion - The minimum required version
|
|
32
|
-
* @returns A formatted error message with upgrade instructions
|
|
33
|
-
*/
|
|
34
|
-
export declare function formatVersionError(currentVersion: string, requiredVersion: string): string;
|
|
35
|
-
/**
|
|
36
|
-
* Checks if the current Node.js version meets the minimum requirement.
|
|
37
|
-
*
|
|
38
|
-
* @returns null if the version is acceptable, or an error message string if not
|
|
39
|
-
*/
|
|
40
|
-
export declare function checkNodeVersion(): string | null;
|
|
41
|
-
//# sourceMappingURL=node-version.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"node-version.d.ts","sourceRoot":"","sources":["../../../src/utils/node-version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2BH;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAwB5D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CA2B1F;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAShD"}
|