@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,226 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview `sklx config` command — get/set Skillsmith configuration values.
|
|
3
|
-
* @module @skillsmith/cli/commands/config
|
|
4
|
-
* @see SMI-4590 Wave 4 PR 5/6 §8 — `audit_mode` CLI plumbing + tier-revalidation
|
|
5
|
-
*
|
|
6
|
-
* v1 surface (intentionally narrow):
|
|
7
|
-
* - `sklx config get audit_mode` → prints the resolved audit-mode for
|
|
8
|
-
* the caller (config-file value when
|
|
9
|
-
* set, else tier default).
|
|
10
|
-
* - `sklx config set audit_mode <value>` → writes `audit_mode` to
|
|
11
|
-
* `~/.skillsmith/config.json`. Atomic
|
|
12
|
-
* write via `<path>.tmp` + rename.
|
|
13
|
-
* Tier-revalidated against
|
|
14
|
-
* `tierAllowsAuditMode` —
|
|
15
|
-
* community/individual cannot select
|
|
16
|
-
* `power_user` or `governance`.
|
|
17
|
-
*
|
|
18
|
-
* Typed error codes (printed to stderr; exit 1):
|
|
19
|
-
* audit.mode.invalid_value — value not in {preventative,power_user,governance,off}
|
|
20
|
-
* audit.mode.tier_ineligible — tier cannot select the requested mode
|
|
21
|
-
*
|
|
22
|
-
* No file write occurs on either error path. Other keys are rejected with a
|
|
23
|
-
* generic "unsupported key" message — the surface intentionally locks down
|
|
24
|
-
* to v1 deliverables; v2 extends with additional keys.
|
|
25
|
-
*/
|
|
26
|
-
import * as crypto from 'node:crypto';
|
|
27
|
-
import * as fs from 'node:fs';
|
|
28
|
-
import { homedir } from 'node:os';
|
|
29
|
-
import { join, dirname } from 'node:path';
|
|
30
|
-
import { Command } from 'commander';
|
|
31
|
-
import chalk from 'chalk';
|
|
32
|
-
import { isAuditMode, resolveAuditMode } from '@skillsmith/core/config/audit-mode';
|
|
33
|
-
import { withTelemetry } from '@skillsmith/core/telemetry';
|
|
34
|
-
import { tierAllowsAuditMode } from '@skillsmith/core/audit';
|
|
35
|
-
import { sanitizeError } from '../utils/sanitize.js';
|
|
36
|
-
import { getLicenseStatus } from '../utils/license.js';
|
|
37
|
-
// ---------------------------------------------------------------------------
|
|
38
|
-
// Constants
|
|
39
|
-
// ---------------------------------------------------------------------------
|
|
40
|
-
const CONFIG_DIR = '.skillsmith';
|
|
41
|
-
const CONFIG_FILE = 'config.json';
|
|
42
|
-
const SUPPORTED_KEYS = ['audit_mode'];
|
|
43
|
-
const VALID_AUDIT_MODES = [
|
|
44
|
-
'preventative',
|
|
45
|
-
'power_user',
|
|
46
|
-
'governance',
|
|
47
|
-
'off',
|
|
48
|
-
];
|
|
49
|
-
// ---------------------------------------------------------------------------
|
|
50
|
-
// Typed error envelope (stderr-only; never logged with secrets)
|
|
51
|
-
// ---------------------------------------------------------------------------
|
|
52
|
-
class ConfigError extends Error {
|
|
53
|
-
code;
|
|
54
|
-
constructor(code, message) {
|
|
55
|
-
super(message);
|
|
56
|
-
this.code = code;
|
|
57
|
-
this.name = 'ConfigError';
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
function isSupportedKey(key) {
|
|
61
|
-
return SUPPORTED_KEYS.includes(key);
|
|
62
|
-
}
|
|
63
|
-
// ---------------------------------------------------------------------------
|
|
64
|
-
// Path helpers
|
|
65
|
-
// ---------------------------------------------------------------------------
|
|
66
|
-
function configPath() {
|
|
67
|
-
// Re-evaluates os.homedir() each call so test harnesses that toggle
|
|
68
|
-
// process.env.HOME observe the updated location (mirrors the
|
|
69
|
-
// `defaultLedgerPath` pattern in namespace-overrides.ts).
|
|
70
|
-
return join(homedir(), CONFIG_DIR, CONFIG_FILE);
|
|
71
|
-
}
|
|
72
|
-
function readConfigFile() {
|
|
73
|
-
const path = configPath();
|
|
74
|
-
if (!fs.existsSync(path))
|
|
75
|
-
return {};
|
|
76
|
-
try {
|
|
77
|
-
const raw = fs.readFileSync(path, 'utf-8');
|
|
78
|
-
const parsed = JSON.parse(raw);
|
|
79
|
-
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
|
|
80
|
-
return {};
|
|
81
|
-
return parsed;
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
// Malformed JSON: degrade to empty rather than fail-loud — the user can
|
|
85
|
-
// still set audit_mode (write will overwrite the malformed file).
|
|
86
|
-
return {};
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Atomic write of the config file: `<path>.<rand>.tmp` + `fs.rename`.
|
|
91
|
-
* Plan §403 explicitly requires atomic writes for `sklx config set` so a
|
|
92
|
-
* crashed process never leaves a half-written config behind.
|
|
93
|
-
*
|
|
94
|
-
* The unique tmp suffix prevents two concurrent writers from clobbering
|
|
95
|
-
* each other's staging file (mirrors the namespace-overrides ledger
|
|
96
|
-
* writer's pattern).
|
|
97
|
-
*/
|
|
98
|
-
function writeConfigFileAtomic(config) {
|
|
99
|
-
const path = configPath();
|
|
100
|
-
const dir = dirname(path);
|
|
101
|
-
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
102
|
-
const tmpSuffix = crypto.randomBytes(6).toString('hex');
|
|
103
|
-
const tmpPath = `${path}.${tmpSuffix}.tmp`;
|
|
104
|
-
const json = JSON.stringify(config, null, 2);
|
|
105
|
-
fs.writeFileSync(tmpPath, json, { encoding: 'utf-8', mode: 0o600 });
|
|
106
|
-
fs.renameSync(tmpPath, path);
|
|
107
|
-
// chmod the final path defensively; ignore errors (Windows / read-only FS).
|
|
108
|
-
try {
|
|
109
|
-
fs.chmodSync(path, 0o600);
|
|
110
|
-
}
|
|
111
|
-
catch {
|
|
112
|
-
// Best-effort.
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
// ---------------------------------------------------------------------------
|
|
116
|
-
// `config get` / `config set` action handlers
|
|
117
|
-
// ---------------------------------------------------------------------------
|
|
118
|
-
async function runConfigGet(key) {
|
|
119
|
-
if (!isSupportedKey(key)) {
|
|
120
|
-
throw new ConfigError('config.unsupported_key', `Unsupported config key: ${key}`);
|
|
121
|
-
}
|
|
122
|
-
if (key === 'audit_mode') {
|
|
123
|
-
const file = readConfigFile();
|
|
124
|
-
const status = await getLicenseStatus();
|
|
125
|
-
const tier = status.tier ?? 'community';
|
|
126
|
-
const fileValue = isAuditMode(file.audit_mode) ? file.audit_mode : null;
|
|
127
|
-
const resolved = resolveAuditMode({ tier, override: fileValue });
|
|
128
|
-
if (fileValue) {
|
|
129
|
-
console.log(`${fileValue}`);
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
console.log(`${resolved} ${chalk.dim('(tier default)')}`);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Validate + write `audit_mode`. Two-stage gate:
|
|
138
|
-
* 1. Value validation: must be in VALID_AUDIT_MODES → else `audit.mode.invalid_value`.
|
|
139
|
-
* 2. Tier revalidation: `tierAllowsAuditMode` → else `audit.mode.tier_ineligible`.
|
|
140
|
-
*
|
|
141
|
-
* Both errors are raised BEFORE any file IO so a rejected write leaves the
|
|
142
|
-
* existing config untouched (load-bearing per plan §810-813 security test).
|
|
143
|
-
*/
|
|
144
|
-
async function runConfigSet(key, value) {
|
|
145
|
-
if (!isSupportedKey(key)) {
|
|
146
|
-
throw new ConfigError('config.unsupported_key', `Unsupported config key: ${key}`);
|
|
147
|
-
}
|
|
148
|
-
if (key === 'audit_mode') {
|
|
149
|
-
if (!isAuditMode(value)) {
|
|
150
|
-
throw new ConfigError('audit.mode.invalid_value', `Invalid audit_mode value: ${value}. Expected one of: ${VALID_AUDIT_MODES.join(', ')}`);
|
|
151
|
-
}
|
|
152
|
-
const status = await getLicenseStatus();
|
|
153
|
-
const tier = status.tier ?? 'community';
|
|
154
|
-
if (!tierAllowsAuditMode(tier, value)) {
|
|
155
|
-
throw new ConfigError('audit.mode.tier_ineligible', `Tier '${tier}' cannot select audit_mode '${value}'. ` +
|
|
156
|
-
`Upgrade required — see https://skillsmith.app/upgrade`);
|
|
157
|
-
}
|
|
158
|
-
const existing = readConfigFile();
|
|
159
|
-
const updated = { ...existing, audit_mode: value };
|
|
160
|
-
writeConfigFileAtomic(updated);
|
|
161
|
-
console.log(`${chalk.green('OK')} audit_mode = ${value}`);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
// ---------------------------------------------------------------------------
|
|
165
|
-
// Command factory
|
|
166
|
-
// ---------------------------------------------------------------------------
|
|
167
|
-
// SMI-5128 batch B: extracted from inline .action() closures so withTelemetry
|
|
168
|
-
// can wrap them at the export boundary (SMI-5018 coverage gate).
|
|
169
|
-
async function configGetActionImpl(key) {
|
|
170
|
-
try {
|
|
171
|
-
await runConfigGet(key);
|
|
172
|
-
}
|
|
173
|
-
catch (error) {
|
|
174
|
-
if (error instanceof ConfigError) {
|
|
175
|
-
console.error(chalk.red(`Error [${error.code}]:`), error.message);
|
|
176
|
-
}
|
|
177
|
-
else {
|
|
178
|
-
console.error(chalk.red('Error:'), sanitizeError(error));
|
|
179
|
-
}
|
|
180
|
-
process.exit(1);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
export const configGetAction = withTelemetry(configGetActionImpl, {
|
|
184
|
-
source: 'cli',
|
|
185
|
-
extractSkillId: () => 'config get',
|
|
186
|
-
extractFramework: () => 'cli',
|
|
187
|
-
});
|
|
188
|
-
async function configSetActionImpl(key, value) {
|
|
189
|
-
try {
|
|
190
|
-
await runConfigSet(key, value);
|
|
191
|
-
}
|
|
192
|
-
catch (error) {
|
|
193
|
-
if (error instanceof ConfigError) {
|
|
194
|
-
console.error(chalk.red(`Error [${error.code}]:`), error.message);
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
console.error(chalk.red('Error:'), sanitizeError(error));
|
|
198
|
-
}
|
|
199
|
-
process.exit(1);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
export const configSetAction = withTelemetry(configSetActionImpl, {
|
|
203
|
-
source: 'cli',
|
|
204
|
-
extractSkillId: () => 'config set',
|
|
205
|
-
extractFramework: () => 'cli',
|
|
206
|
-
});
|
|
207
|
-
/**
|
|
208
|
-
* Build the `config` parent command. v1 supports `get` / `set` subcommands
|
|
209
|
-
* with a single supported key (`audit_mode`). Additional keys land in v2.
|
|
210
|
-
*/
|
|
211
|
-
export function createConfigCommand() {
|
|
212
|
-
const config = new Command('config').description('Get or set Skillsmith configuration values (~/.skillsmith/config.json)');
|
|
213
|
-
config
|
|
214
|
-
.command('get <key>')
|
|
215
|
-
.description('Read a configuration value (e.g. `audit_mode`)')
|
|
216
|
-
.action(configGetAction);
|
|
217
|
-
config
|
|
218
|
-
.command('set <key> <value>')
|
|
219
|
-
.description('Write a configuration value (atomic; tier-revalidated for audit_mode)')
|
|
220
|
-
.action(configSetAction);
|
|
221
|
-
return config;
|
|
222
|
-
}
|
|
223
|
-
// Internal exports for tests. Consumers should use `createConfigCommand`.
|
|
224
|
-
export { runConfigGet, runConfigSet, ConfigError, configPath, readConfigFile };
|
|
225
|
-
export default createConfigCommand;
|
|
226
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SMI-3083: skillsmith create command
|
|
3
|
-
*
|
|
4
|
-
* Scaffolds a new agent skill into ~/.claude/skills/<name>/ with
|
|
5
|
-
* SKILL.md, README.md, CHANGELOG.md, .gitignore, resources/, and an optional
|
|
6
|
-
* scripts/ directory.
|
|
7
|
-
*
|
|
8
|
-
* Relationship with `skillsmith author init`:
|
|
9
|
-
* - `create` → ~/.claude/skills/<name>/ (user-level, publish-oriented,
|
|
10
|
-
* CHANGELOG.md + Behavioral Classification included)
|
|
11
|
-
* - `author init` → current working directory (in-project skill authoring)
|
|
12
|
-
*
|
|
13
|
-
* Long-term, `create` is the preferred command for publishing new skills to the
|
|
14
|
-
* Skillsmith registry. `author init` is retained for in-project authoring workflows.
|
|
15
|
-
*/
|
|
16
|
-
import { Command } from 'commander';
|
|
17
|
-
import { validateSkillName } from '../utils/skill-name.js';
|
|
18
|
-
export { validateSkillName };
|
|
19
|
-
export interface CreateOptions {
|
|
20
|
-
output?: string | undefined;
|
|
21
|
-
type?: string | undefined;
|
|
22
|
-
behavior?: string | undefined;
|
|
23
|
-
description?: string | undefined;
|
|
24
|
-
author?: string | undefined;
|
|
25
|
-
category?: string | undefined;
|
|
26
|
-
scripts?: boolean | undefined;
|
|
27
|
-
yes?: boolean | undefined;
|
|
28
|
-
dryRun?: boolean | undefined;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Scaffold a new agent skill at ~/.claude/skills/<name>/ (or --output).
|
|
32
|
-
*/
|
|
33
|
-
export declare function createSkill(name: string | undefined, options?: CreateOptions): Promise<void>;
|
|
34
|
-
export declare const createAction: (name: string | undefined, opts: Record<string, string | boolean | undefined>) => Promise<void>;
|
|
35
|
-
/**
|
|
36
|
-
* Create the `skillsmith create` command.
|
|
37
|
-
* SMI-3083: Scaffold new agent skills without a separate skill install.
|
|
38
|
-
*
|
|
39
|
-
* See also: `skillsmith author init` — scaffolds into the CWD for in-project
|
|
40
|
-
* skill authoring (no CHANGELOG.md or Behavioral Classification section).
|
|
41
|
-
*/
|
|
42
|
-
export declare function createCreateCommand(): Command;
|
|
43
|
-
//# sourceMappingURL=create.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAUnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG1D,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAqF5B,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACzB,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC7B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAkPf;AA8BD,eAAO,MAAM,YAAY,iGAIvB,CAAA;AAEF;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAsB7C"}
|
|
@@ -1,336 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SMI-3083: skillsmith create command
|
|
3
|
-
*
|
|
4
|
-
* Scaffolds a new agent skill into ~/.claude/skills/<name>/ with
|
|
5
|
-
* SKILL.md, README.md, CHANGELOG.md, .gitignore, resources/, and an optional
|
|
6
|
-
* scripts/ directory.
|
|
7
|
-
*
|
|
8
|
-
* Relationship with `skillsmith author init`:
|
|
9
|
-
* - `create` → ~/.claude/skills/<name>/ (user-level, publish-oriented,
|
|
10
|
-
* CHANGELOG.md + Behavioral Classification included)
|
|
11
|
-
* - `author init` → current working directory (in-project skill authoring)
|
|
12
|
-
*
|
|
13
|
-
* Long-term, `create` is the preferred command for publishing new skills to the
|
|
14
|
-
* Skillsmith registry. `author init` is retained for in-project authoring workflows.
|
|
15
|
-
*/
|
|
16
|
-
import { Command } from 'commander';
|
|
17
|
-
import { input, confirm, select } from '@inquirer/prompts';
|
|
18
|
-
import chalk from 'chalk';
|
|
19
|
-
import ora from 'ora';
|
|
20
|
-
import { mkdir, writeFile, stat } from 'fs/promises';
|
|
21
|
-
import { join } from 'path';
|
|
22
|
-
import { getCanonicalInstallPath } from '@skillsmith/core/install';
|
|
23
|
-
import { withTelemetry } from '@skillsmith/core/telemetry';
|
|
24
|
-
import { sanitizeError } from '../utils/sanitize.js';
|
|
25
|
-
import { validateSkillName } from '../utils/skill-name.js';
|
|
26
|
-
import { SKILL_MD_TEMPLATE, README_MD_TEMPLATE, CHANGELOG_MD_TEMPLATE } from '../templates/index.js';
|
|
27
|
-
export { validateSkillName };
|
|
28
|
-
// ---------------------------------------------------------------------------
|
|
29
|
-
// Constants
|
|
30
|
-
// ---------------------------------------------------------------------------
|
|
31
|
-
const VALID_TYPES = ['basic', 'intermediate', 'advanced'];
|
|
32
|
-
const VALID_BEHAVIORS = ['autonomous', 'guided', 'interactive', 'configurable'];
|
|
33
|
-
const VALID_CATEGORIES = [
|
|
34
|
-
'development',
|
|
35
|
-
'productivity',
|
|
36
|
-
'communication',
|
|
37
|
-
'data',
|
|
38
|
-
'security',
|
|
39
|
-
'other',
|
|
40
|
-
];
|
|
41
|
-
/** GitHub username format: alphanumeric and hyphens, must start with alphanumeric. */
|
|
42
|
-
const GITHUB_USERNAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9-]*$/;
|
|
43
|
-
// ---------------------------------------------------------------------------
|
|
44
|
-
// Helpers
|
|
45
|
-
// ---------------------------------------------------------------------------
|
|
46
|
-
/**
|
|
47
|
-
* Sanitize a user-supplied string for safe insertion into a YAML scalar value.
|
|
48
|
-
* Strips newlines/carriage returns and double-quotes values containing YAML
|
|
49
|
-
* special characters to prevent frontmatter corruption.
|
|
50
|
-
*/
|
|
51
|
-
function sanitizeYamlScalar(value) {
|
|
52
|
-
const safe = value.replace(/[\r\n]/g, ' ').trim();
|
|
53
|
-
// Wrap in double quotes when value contains YAML-special characters
|
|
54
|
-
if (/[:#[\]{}&|>'"*?!%@`]/.test(safe) || safe.startsWith(' ') || safe.endsWith(' ')) {
|
|
55
|
-
return `"${safe.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
|
|
56
|
-
}
|
|
57
|
-
return safe;
|
|
58
|
-
}
|
|
59
|
-
function capitalize(s) {
|
|
60
|
-
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
61
|
-
}
|
|
62
|
-
function behaviorDescription(behavior) {
|
|
63
|
-
switch (behavior) {
|
|
64
|
-
case 'autonomous':
|
|
65
|
-
return 'This skill operates autonomously — it executes its full workflow without requiring user input at each step.';
|
|
66
|
-
case 'guided':
|
|
67
|
-
return 'This skill is guided — it asks for your input on key decisions, then executes based on your choices.';
|
|
68
|
-
case 'interactive':
|
|
69
|
-
return 'This skill is interactive — it maintains a back-and-forth dialogue throughout execution.';
|
|
70
|
-
case 'configurable':
|
|
71
|
-
return 'This skill is configurable — behavior is controlled by settings you provide upfront.';
|
|
72
|
-
default:
|
|
73
|
-
return '';
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
/** Build the SKILL.md content, sanitizing YAML frontmatter values. */
|
|
77
|
-
function buildSkillMd(opts) {
|
|
78
|
-
const behavioralClassification = `\n## Behavioral Classification\n\n**Type**: ${capitalize(opts.type)}\n**Behavior**: ${capitalize(opts.behavior)}\n\n${behaviorDescription(opts.behavior)}\n`;
|
|
79
|
-
return SKILL_MD_TEMPLATE.replace(/\{\{name\}\}/g, opts.name)
|
|
80
|
-
.replace(/\{\{description\}\}/g, sanitizeYamlScalar(opts.description))
|
|
81
|
-
.replace(/\{\{author\}\}/g, sanitizeYamlScalar(opts.author))
|
|
82
|
-
.replace(/\{\{category\}\}/g, opts.category)
|
|
83
|
-
.replace(/\{\{date\}\}/g, opts.date)
|
|
84
|
-
.replace(/\{\{behavioralClassification\}\}/g, behavioralClassification);
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Scaffold a new agent skill at ~/.claude/skills/<name>/ (or --output).
|
|
88
|
-
*/
|
|
89
|
-
export async function createSkill(name, options = {}) {
|
|
90
|
-
// 1. Skill name
|
|
91
|
-
const skillName = name ??
|
|
92
|
-
(await input({
|
|
93
|
-
message: 'Skill name (lowercase, hyphens only):',
|
|
94
|
-
validate: validateSkillName,
|
|
95
|
-
}));
|
|
96
|
-
const nameValidation = validateSkillName(skillName);
|
|
97
|
-
if (nameValidation !== true) {
|
|
98
|
-
console.error(chalk.red(`Invalid skill name: ${nameValidation}`));
|
|
99
|
-
process.exit(1);
|
|
100
|
-
}
|
|
101
|
-
// 2. Description (identity fields first, so user understands context before technical choices)
|
|
102
|
-
const description = options.description ??
|
|
103
|
-
(await input({
|
|
104
|
-
message: 'Description:',
|
|
105
|
-
default: `An agent skill for ${skillName}`,
|
|
106
|
-
validate: (v) => (v.trim() ? true : 'Description is required'),
|
|
107
|
-
}));
|
|
108
|
-
if (!description.trim()) {
|
|
109
|
-
console.error(chalk.red('Description is required'));
|
|
110
|
-
process.exit(1);
|
|
111
|
-
}
|
|
112
|
-
// 3. Author (GitHub username) — validated for URL safety
|
|
113
|
-
const rawAuthor = options.author ??
|
|
114
|
-
(await input({
|
|
115
|
-
message: 'Author (GitHub username):',
|
|
116
|
-
default: process.env['USER'] ?? process.env['USERNAME'] ?? 'author',
|
|
117
|
-
validate: (v) => {
|
|
118
|
-
if (!v.trim())
|
|
119
|
-
return 'Author is required';
|
|
120
|
-
if (!GITHUB_USERNAME_RE.test(v.trim()))
|
|
121
|
-
return 'Must be a valid GitHub username (alphanumeric and hyphens only)';
|
|
122
|
-
return true;
|
|
123
|
-
},
|
|
124
|
-
}));
|
|
125
|
-
if (!rawAuthor.trim() || !GITHUB_USERNAME_RE.test(rawAuthor.trim())) {
|
|
126
|
-
console.error(chalk.red('Invalid author: must be a valid GitHub username (alphanumeric and hyphens only)'));
|
|
127
|
-
process.exit(1);
|
|
128
|
-
}
|
|
129
|
-
const author = rawAuthor.trim();
|
|
130
|
-
// 4. Category — validate CLI flag; select prompt constrains to valid values
|
|
131
|
-
if (options.category && !VALID_CATEGORIES.includes(options.category)) {
|
|
132
|
-
console.error(chalk.red(`Invalid category: ${options.category}. Valid: ${VALID_CATEGORIES.join(', ')}`));
|
|
133
|
-
process.exit(1);
|
|
134
|
-
}
|
|
135
|
-
const category = options.category ??
|
|
136
|
-
(await select({
|
|
137
|
-
message: 'Category:',
|
|
138
|
-
choices: [
|
|
139
|
-
{ name: 'Development', value: 'development' },
|
|
140
|
-
{ name: 'Productivity', value: 'productivity' },
|
|
141
|
-
{ name: 'Communication', value: 'communication' },
|
|
142
|
-
{ name: 'Data', value: 'data' },
|
|
143
|
-
{ name: 'Security', value: 'security' },
|
|
144
|
-
{ name: 'Other', value: 'other' },
|
|
145
|
-
],
|
|
146
|
-
}));
|
|
147
|
-
// 5. Skill type — validate CLI flag
|
|
148
|
-
if (options.type && !VALID_TYPES.includes(options.type)) {
|
|
149
|
-
console.error(chalk.red(`Invalid type: ${options.type}. Valid: ${VALID_TYPES.join(', ')}`));
|
|
150
|
-
process.exit(1);
|
|
151
|
-
}
|
|
152
|
-
const skillType = options.type ??
|
|
153
|
-
(await select({
|
|
154
|
-
message: 'Skill type:',
|
|
155
|
-
choices: [
|
|
156
|
-
{ name: 'Basic — simple, single-purpose skill', value: 'basic' },
|
|
157
|
-
{ name: 'Intermediate — multi-step with some decisions', value: 'intermediate' },
|
|
158
|
-
{ name: 'Advanced — complex orchestration or agent delegation', value: 'advanced' },
|
|
159
|
-
],
|
|
160
|
-
}));
|
|
161
|
-
// 6. Behavioral classification — validate CLI flag
|
|
162
|
-
if (options.behavior && !VALID_BEHAVIORS.includes(options.behavior)) {
|
|
163
|
-
console.error(chalk.red(`Invalid behavior: ${options.behavior}. Valid: ${VALID_BEHAVIORS.join(', ')}`));
|
|
164
|
-
process.exit(1);
|
|
165
|
-
}
|
|
166
|
-
const behavior = options.behavior ??
|
|
167
|
-
(await select({
|
|
168
|
-
message: 'Behavioral classification:',
|
|
169
|
-
choices: [
|
|
170
|
-
{ name: 'Autonomous — runs without user input', value: 'autonomous' },
|
|
171
|
-
{ name: 'Guided — asks key questions then executes', value: 'guided' },
|
|
172
|
-
{
|
|
173
|
-
name: 'Interactive — back-and-forth dialogue throughout execution',
|
|
174
|
-
value: 'interactive',
|
|
175
|
-
},
|
|
176
|
-
{ name: 'Configurable — settings-driven, provided upfront', value: 'configurable' },
|
|
177
|
-
],
|
|
178
|
-
}));
|
|
179
|
-
// 7. Scripts directory
|
|
180
|
-
const includeScripts = options.scripts ??
|
|
181
|
-
(await confirm({
|
|
182
|
-
message: 'Include a scripts/ directory?',
|
|
183
|
-
default: false,
|
|
184
|
-
}));
|
|
185
|
-
// 8. Resolve output directory — lazy (never baked in at module load time).
|
|
186
|
-
// SMI-4578: routes through canonical install path so default-client
|
|
187
|
-
// directory is defined in exactly one place.
|
|
188
|
-
const outputDir = options.output ?? getCanonicalInstallPath();
|
|
189
|
-
const skillDir = join(outputDir, skillName);
|
|
190
|
-
// 9. Overwrite check — after all prompts so user knows what they committed to
|
|
191
|
-
let exists = false;
|
|
192
|
-
try {
|
|
193
|
-
await stat(skillDir);
|
|
194
|
-
exists = true;
|
|
195
|
-
}
|
|
196
|
-
catch {
|
|
197
|
-
// Directory does not exist — proceed
|
|
198
|
-
}
|
|
199
|
-
if (exists && !options.yes) {
|
|
200
|
-
// --yes semantics: always overwrite without prompt
|
|
201
|
-
const overwrite = await confirm({
|
|
202
|
-
message: `${skillDir} already exists. Overwrite?`,
|
|
203
|
-
default: false,
|
|
204
|
-
});
|
|
205
|
-
if (!overwrite) {
|
|
206
|
-
console.log(chalk.yellow('Cancelled.'));
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
const date = new Date().toISOString().split('T')[0] ?? new Date().toISOString().slice(0, 10);
|
|
211
|
-
// Build file contents
|
|
212
|
-
const skillMdContent = buildSkillMd({
|
|
213
|
-
name: skillName,
|
|
214
|
-
description,
|
|
215
|
-
author,
|
|
216
|
-
category,
|
|
217
|
-
type: skillType,
|
|
218
|
-
behavior,
|
|
219
|
-
date,
|
|
220
|
-
});
|
|
221
|
-
const readmeContent = README_MD_TEMPLATE.replace(/\{\{author\}\}/g, sanitizeYamlScalar(author))
|
|
222
|
-
.replace(/\{\{name\}\}/g, skillName)
|
|
223
|
-
.replace(/\{\{description\}\}/g, description);
|
|
224
|
-
const changelogContent = CHANGELOG_MD_TEMPLATE.replace(/\{\{name\}\}/g, skillName).replace(/\{\{date\}\}/g, date);
|
|
225
|
-
// JSON.stringify prevents skill names containing single-quotes from breaking generated JS
|
|
226
|
-
const scriptContent = `#!/usr/bin/env node\n/**\n * ${skillName} - Example Script\n */\nconsole.log(${JSON.stringify(`${skillName} script executed`)})\n`;
|
|
227
|
-
const gitignoreContent = `# Dependencies\nnode_modules/\n\n# Build output\ndist/\n\n# Environment\n.env\n.env.local\n\n# OS files\n.DS_Store\nThumbs.db\n`;
|
|
228
|
-
// 10. Dry run — preview scaffold output without writing any files
|
|
229
|
-
if (options.dryRun) {
|
|
230
|
-
console.log();
|
|
231
|
-
console.log(chalk.bold(`Dry run — would scaffold: ${skillDir}/`));
|
|
232
|
-
console.log(chalk.dim(' SKILL.md'));
|
|
233
|
-
console.log(chalk.dim(' README.md'));
|
|
234
|
-
console.log(chalk.dim(' CHANGELOG.md'));
|
|
235
|
-
console.log(chalk.dim(' .gitignore'));
|
|
236
|
-
console.log(chalk.dim(' resources/'));
|
|
237
|
-
if (includeScripts) {
|
|
238
|
-
console.log(chalk.dim(' scripts/'));
|
|
239
|
-
console.log(chalk.dim(' scripts/example.js'));
|
|
240
|
-
}
|
|
241
|
-
console.log();
|
|
242
|
-
console.log(chalk.bold('SKILL.md preview:'));
|
|
243
|
-
const preview = skillMdContent.length > 500 ? skillMdContent.slice(0, 500) + '\n…' : skillMdContent;
|
|
244
|
-
console.log(chalk.dim(preview));
|
|
245
|
-
console.log();
|
|
246
|
-
return;
|
|
247
|
-
}
|
|
248
|
-
const spinner = ora('Scaffolding skill...').start();
|
|
249
|
-
try {
|
|
250
|
-
await mkdir(skillDir, { recursive: true });
|
|
251
|
-
await mkdir(join(skillDir, 'resources'), { recursive: true });
|
|
252
|
-
if (includeScripts) {
|
|
253
|
-
await mkdir(join(skillDir, 'scripts'), { recursive: true });
|
|
254
|
-
}
|
|
255
|
-
await writeFile(join(skillDir, 'SKILL.md'), skillMdContent, 'utf-8');
|
|
256
|
-
await writeFile(join(skillDir, 'README.md'), readmeContent, 'utf-8');
|
|
257
|
-
await writeFile(join(skillDir, 'CHANGELOG.md'), changelogContent, 'utf-8');
|
|
258
|
-
await writeFile(join(skillDir, '.gitignore'), gitignoreContent, 'utf-8');
|
|
259
|
-
if (includeScripts) {
|
|
260
|
-
await writeFile(join(skillDir, 'scripts', 'example.js'), scriptContent, 'utf-8');
|
|
261
|
-
}
|
|
262
|
-
spinner.succeed(`Skill scaffolded at ${skillDir}`);
|
|
263
|
-
}
|
|
264
|
-
catch (error) {
|
|
265
|
-
spinner.fail(`Failed to scaffold skill: ${sanitizeError(error)}`);
|
|
266
|
-
throw error;
|
|
267
|
-
}
|
|
268
|
-
// Publishing checklist — aligned with v1.1.0 publish gate requirements
|
|
269
|
-
// (README filled, CHANGELOG filled, release tag, registry submit)
|
|
270
|
-
console.log();
|
|
271
|
-
console.log(chalk.bold('Publishing checklist:'));
|
|
272
|
-
console.log(chalk.dim(` 1. Edit SKILL.md — write your skill's instructions and trigger phrases`));
|
|
273
|
-
console.log(chalk.dim(` 2. Complete README.md — problem statement, usage examples, requirements`));
|
|
274
|
-
console.log(chalk.dim(` 3. Update CHANGELOG.md — confirm the [1.0.0] entry is accurate`));
|
|
275
|
-
console.log(chalk.dim(' 4. Test your skill locally with your MCP-compatible agent'));
|
|
276
|
-
console.log(chalk.dim(' 5. Publish to GitHub:'));
|
|
277
|
-
console.log(chalk.cyan(` gh repo create ${skillName} --public`));
|
|
278
|
-
console.log(chalk.cyan(` cd ${skillDir} && git init && git add . && git commit -m "feat: initial skill"`));
|
|
279
|
-
console.log(chalk.cyan(` git remote add origin https://github.com/${author}/${skillName}`));
|
|
280
|
-
console.log(chalk.cyan(' git push -u origin main'));
|
|
281
|
-
console.log(chalk.cyan(' gh release create v1.0.0 --title "v1.0.0" --notes "Initial release"'));
|
|
282
|
-
console.log(chalk.dim(' 6. Submit to Skillsmith registry: skillsmith publish'));
|
|
283
|
-
console.log();
|
|
284
|
-
}
|
|
285
|
-
// ---------------------------------------------------------------------------
|
|
286
|
-
// Command factory
|
|
287
|
-
// ---------------------------------------------------------------------------
|
|
288
|
-
// SMI-5128: extracted from inline .action() closure to a named function so
|
|
289
|
-
// withTelemetry can wrap it at the export boundary (SMI-5040 coverage gate).
|
|
290
|
-
async function createActionImpl(name, opts) {
|
|
291
|
-
try {
|
|
292
|
-
await createSkill(name, {
|
|
293
|
-
output: opts['output'],
|
|
294
|
-
type: opts['type'],
|
|
295
|
-
behavior: opts['behavior'],
|
|
296
|
-
description: opts['description'],
|
|
297
|
-
author: opts['author'],
|
|
298
|
-
category: opts['category'],
|
|
299
|
-
scripts: opts['scripts'],
|
|
300
|
-
yes: opts['yes'],
|
|
301
|
-
dryRun: opts['dryRun'],
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
catch (error) {
|
|
305
|
-
console.error(chalk.red('Error creating skill:'), sanitizeError(error));
|
|
306
|
-
process.exit(1);
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
export const createAction = withTelemetry(createActionImpl, {
|
|
310
|
-
source: 'cli',
|
|
311
|
-
extractSkillId: () => 'create',
|
|
312
|
-
extractFramework: () => 'cli',
|
|
313
|
-
});
|
|
314
|
-
/**
|
|
315
|
-
* Create the `skillsmith create` command.
|
|
316
|
-
* SMI-3083: Scaffold new agent skills without a separate skill install.
|
|
317
|
-
*
|
|
318
|
-
* See also: `skillsmith author init` — scaffolds into the CWD for in-project
|
|
319
|
-
* skill authoring (no CHANGELOG.md or Behavioral Classification section).
|
|
320
|
-
*/
|
|
321
|
-
export function createCreateCommand() {
|
|
322
|
-
return new Command('create')
|
|
323
|
-
.description('Scaffold a new agent skill at ~/.claude/skills/<name>/ (see also: skillsmith author init)')
|
|
324
|
-
.argument('[name]', 'Skill name (lowercase, hyphens only)')
|
|
325
|
-
.option('-o, --output <dir>', 'Output directory (default: ~/.claude/skills)')
|
|
326
|
-
.option('--type <type>', 'Skill type: basic|intermediate|advanced')
|
|
327
|
-
.option('--behavior <behavior>', 'Behavioral classification: autonomous|guided|interactive|configurable')
|
|
328
|
-
.option('-d, --description <description>', 'Skill description (skips prompt)')
|
|
329
|
-
.option('-a, --author <author>', 'Author GitHub username (skips prompt)')
|
|
330
|
-
.option('-c, --category <category>', 'Category: development|productivity|communication|data|security|other (skips prompt)')
|
|
331
|
-
.option('--scripts', 'Include a scripts/ directory')
|
|
332
|
-
.option('-y, --yes', 'Auto-confirm overwrite — always overwrites if skill directory exists')
|
|
333
|
-
.option('--dry-run', 'Preview scaffold output without writing files')
|
|
334
|
-
.action(createAction);
|
|
335
|
-
}
|
|
336
|
-
//# sourceMappingURL=create.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAEpG,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAE5B,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,CAAU,CAAA;AAClE,MAAM,eAAe,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,CAAU,CAAA;AACxF,MAAM,gBAAgB,GAAG;IACvB,aAAa;IACb,cAAc;IACd,eAAe;IACf,MAAM;IACN,UAAU;IACV,OAAO;CACC,CAAA;AAMV,sFAAsF;AACtF,MAAM,kBAAkB,GAAG,4BAA4B,CAAA;AAEvD,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IACjD,oEAAoE;IACpE,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACpF,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAA;IAChE,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,YAAY;YACf,OAAO,6GAA6G,CAAA;QACtH,KAAK,QAAQ;YACX,OAAO,sGAAsG,CAAA;QAC/G,KAAK,aAAa;YAChB,OAAO,0FAA0F,CAAA;QACnG,KAAK,cAAc;YACjB,OAAO,sFAAsF,CAAA;QAC/F;YACE,OAAO,EAAE,CAAA;IACb,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,SAAS,YAAY,CAAC,IAQrB;IACC,MAAM,wBAAwB,GAAG,+CAA+C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA;IAE9L,OAAO,iBAAiB,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC;SACzD,OAAO,CAAC,sBAAsB,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACrE,OAAO,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC3D,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC;SAC3C,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC;SACnC,OAAO,CAAC,mCAAmC,EAAE,wBAAwB,CAAC,CAAA;AAC3E,CAAC;AAkBD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAwB,EACxB,UAAyB,EAAE;IAE3B,gBAAgB;IAChB,MAAM,SAAS,GACb,IAAI;QACJ,CAAC,MAAM,KAAK,CAAC;YACX,OAAO,EAAE,uCAAuC;YAChD,QAAQ,EAAE,iBAAiB;SAC5B,CAAC,CAAC,CAAA;IAEL,MAAM,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAA;IACnD,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,cAAc,EAAE,CAAC,CAAC,CAAA;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,+FAA+F;IAC/F,MAAM,WAAW,GACf,OAAO,CAAC,WAAW;QACnB,CAAC,MAAM,KAAK,CAAC;YACX,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,sBAAsB,SAAS,EAAE;YAC1C,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC;SACvE,CAAC,CAAC,CAAA;IAEL,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAA;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,yDAAyD;IACzD,MAAM,SAAS,GACb,OAAO,CAAC,MAAM;QACd,CAAC,MAAM,KAAK,CAAC;YACX,OAAO,EAAE,2BAA2B;YACpC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,QAAQ;YACnE,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE;gBACtB,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;oBAAE,OAAO,oBAAoB,CAAA;gBAC1C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACpC,OAAO,iEAAiE,CAAA;gBAC1E,OAAO,IAAI,CAAA;YACb,CAAC;SACF,CAAC,CAAC,CAAA;IAEL,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACpE,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAC7F,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,CAAA;IAE/B,4EAA4E;IAC5E,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAyB,CAAC,EAAE,CAAC;QACtF,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,QAAQ,YAAY,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAC1F,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ;QAChB,CAAC,MAAM,MAAM,CAAC;YACZ,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;gBAC7C,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;gBAC/C,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE;gBACjD,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;gBAC/B,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;gBACvC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;aAClC;SACF,CAAC,CAAC,CAAA;IAEL,oCAAoC;IACpC,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAiB,CAAC,EAAE,CAAC;QACrE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,IAAI,YAAY,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,MAAM,SAAS,GACb,OAAO,CAAC,IAAI;QACZ,CAAC,MAAM,MAAM,CAAC;YACZ,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,sCAAsC,EAAE,KAAK,EAAE,OAAO,EAAE;gBAChE,EAAE,IAAI,EAAE,+CAA+C,EAAE,KAAK,EAAE,cAAc,EAAE;gBAChF,EAAE,IAAI,EAAE,sDAAsD,EAAE,KAAK,EAAE,UAAU,EAAE;aACpF;SACF,CAAC,CAAC,CAAA;IAEL,mDAAmD;IACnD,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAyB,CAAC,EAAE,CAAC;QACrF,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,QAAQ,YAAY,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CACzF,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ;QAChB,CAAC,MAAM,MAAM,CAAC;YACZ,OAAO,EAAE,4BAA4B;YACrC,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,sCAAsC,EAAE,KAAK,EAAE,YAAY,EAAE;gBACrE,EAAE,IAAI,EAAE,2CAA2C,EAAE,KAAK,EAAE,QAAQ,EAAE;gBACtE;oBACE,IAAI,EAAE,4DAA4D;oBAClE,KAAK,EAAE,aAAa;iBACrB;gBACD,EAAE,IAAI,EAAE,kDAAkD,EAAE,KAAK,EAAE,cAAc,EAAE;aACpF;SACF,CAAC,CAAC,CAAA;IAEL,uBAAuB;IACvB,MAAM,cAAc,GAClB,OAAO,CAAC,OAAO;QACf,CAAC,MAAM,OAAO,CAAC;YACb,OAAO,EAAE,+BAA+B;YACxC,OAAO,EAAE,KAAK;SACf,CAAC,CAAC,CAAA;IAEL,2EAA2E;IAC3E,uEAAuE;IACvE,gDAAgD;IAChD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,IAAI,uBAAuB,EAAE,CAAA;IAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IAE3C,8EAA8E;IAC9E,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAA;QACpB,MAAM,GAAG,IAAI,CAAA;IACf,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;IAED,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAC3B,mDAAmD;QACnD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;YAC9B,OAAO,EAAE,GAAG,QAAQ,6BAA6B;YACjD,OAAO,EAAE,KAAK;SACf,CAAC,CAAA;QACF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;YACvC,OAAM;QACR,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAE5F,sBAAsB;IACtB,MAAM,cAAc,GAAG,YAAY,CAAC;QAClC,IAAI,EAAE,SAAS;QACf,WAAW;QACX,MAAM;QACN,QAAQ;QACR,IAAI,EAAE,SAAS;QACf,QAAQ;QACR,IAAI;KACL,CAAC,CAAA;IAEF,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;SAC5F,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC;SACnC,OAAO,CAAC,sBAAsB,EAAE,WAAW,CAAC,CAAA;IAE/C,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,OAAO,CACxF,eAAe,EACf,IAAI,CACL,CAAA;IAED,0FAA0F;IAC1F,MAAM,aAAa,GAAG,gCAAgC,SAAS,uCAAuC,IAAI,CAAC,SAAS,CAAC,GAAG,SAAS,kBAAkB,CAAC,KAAK,CAAA;IAEzJ,MAAM,gBAAgB,GAAG,iIAAiI,CAAA;IAE1J,kEAAkE;IAClE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,QAAQ,GAAG,CAAC,CAAC,CAAA;QACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAA;QACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAA;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAA;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAA;QACtC,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;YACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAA;QAChD,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAA;QAC5C,MAAM,OAAO,GACX,cAAc,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,cAAc,CAAA;QACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;QAC/B,OAAO,CAAC,GAAG,EAAE,CAAA;QACb,OAAM;IACR,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAA;IAEnD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1C,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC7D,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;QACpE,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,CAAA;QACpE,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAA;QAC1E,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAA;QAExE,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,CAAA;QAClF,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAA;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,6BAA6B,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACjE,MAAM,KAAK,CAAA;IACb,CAAC;IAED,uEAAuE;IACvE,kEAAkE;IAClE,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAA;IAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC,CAAA;IAClG,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,2EAA2E,CAAC,CACvF,CAAA;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC,CAAA;IAC1F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC,CAAA;IACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAA;IACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,SAAS,WAAW,CAAC,CAAC,CAAA;IACtE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,aAAa,QAAQ,kEAAkE,CACxF,CACF,CAAA;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mDAAmD,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC,CAAA;IACjG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAA;IACzD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,4EAA4E,CAAC,CACzF,CAAA;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAA;IAChF,OAAO,CAAC,GAAG,EAAE,CAAA;AACf,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,2EAA2E;AAC3E,6EAA6E;AAC7E,KAAK,UAAU,gBAAgB,CAC7B,IAAwB,EACxB,IAAkD;IAElD,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,IAAI,EAAE;YACtB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAuB;YAC5C,IAAI,EAAE,IAAI,CAAC,MAAM,CAAuB;YACxC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAuB;YAChD,WAAW,EAAE,IAAI,CAAC,aAAa,CAAuB;YACtD,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAuB;YAC5C,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAuB;YAChD,OAAO,EAAE,IAAI,CAAC,SAAS,CAAwB;YAC/C,GAAG,EAAE,IAAI,CAAC,KAAK,CAAwB;YACvC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAwB;SAC9C,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC,gBAAgB,EAAE;IAC1D,MAAM,EAAE,KAAK;IACb,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ;IAC9B,gBAAgB,EAAE,GAAG,EAAE,CAAC,KAAK;CAC9B,CAAC,CAAA;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CACV,2FAA2F,CAC5F;SACA,QAAQ,CAAC,QAAQ,EAAE,sCAAsC,CAAC;SAC1D,MAAM,CAAC,oBAAoB,EAAE,8CAA8C,CAAC;SAC5E,MAAM,CAAC,eAAe,EAAE,yCAAyC,CAAC;SAClE,MAAM,CACL,uBAAuB,EACvB,uEAAuE,CACxE;SACA,MAAM,CAAC,iCAAiC,EAAE,kCAAkC,CAAC;SAC7E,MAAM,CAAC,uBAAuB,EAAE,uCAAuC,CAAC;SACxE,MAAM,CACL,2BAA2B,EAC3B,qFAAqF,CACtF;SACA,MAAM,CAAC,WAAW,EAAE,8BAA8B,CAAC;SACnD,MAAM,CAAC,WAAW,EAAE,sEAAsE,CAAC;SAC3F,MAAM,CAAC,WAAW,EAAE,+CAA+C,CAAC;SACpE,MAAM,CAAC,YAAY,CAAC,CAAA;AACzB,CAAC"}
|