@skillsmith/mcp-server 0.4.13 → 0.5.0
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 +32 -4
- package/README.md +89 -13
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/__tests__/compare.test.js +5 -5
- package/dist/src/__tests__/compare.test.js.map +1 -1
- package/dist/src/__tests__/context-listeners.test.d.ts +12 -0
- package/dist/src/__tests__/context-listeners.test.d.ts.map +1 -0
- package/dist/src/__tests__/context-listeners.test.js +87 -0
- package/dist/src/__tests__/context-listeners.test.js.map +1 -0
- package/dist/src/__tests__/context.test.js +84 -82
- package/dist/src/__tests__/context.test.js.map +1 -1
- package/dist/src/__tests__/get-skill.api-path.test.js +21 -14
- package/dist/src/__tests__/get-skill.api-path.test.js.map +1 -1
- package/dist/src/__tests__/get-skill.test.js +5 -5
- package/dist/src/__tests__/get-skill.test.js.map +1 -1
- package/dist/src/__tests__/index-local.test.js +5 -5
- package/dist/src/__tests__/index-local.test.js.map +1 -1
- package/dist/src/__tests__/recommend-online-path.test.js +5 -5
- package/dist/src/__tests__/recommend-online-path.test.js.map +1 -1
- package/dist/src/__tests__/recommend.test.js +9 -9
- package/dist/src/__tests__/recommend.test.js.map +1 -1
- package/dist/src/__tests__/search-compatible-with.test.d.ts +10 -0
- package/dist/src/__tests__/search-compatible-with.test.d.ts.map +1 -0
- package/dist/src/__tests__/search-compatible-with.test.js +96 -0
- package/dist/src/__tests__/search-compatible-with.test.js.map +1 -0
- package/dist/src/__tests__/search-online-path.test.js +5 -5
- package/dist/src/__tests__/search-online-path.test.js.map +1 -1
- package/dist/src/__tests__/search.test.js +16 -101
- package/dist/src/__tests__/search.test.js.map +1 -1
- package/dist/src/__tests__/test-utils.d.ts +18 -3
- package/dist/src/__tests__/test-utils.d.ts.map +1 -1
- package/dist/src/__tests__/test-utils.js +24 -7
- package/dist/src/__tests__/test-utils.js.map +1 -1
- package/dist/src/audit/audit-history.d.ts +77 -0
- package/dist/src/audit/audit-history.d.ts.map +1 -0
- package/dist/src/audit/audit-history.js +98 -0
- package/dist/src/audit/audit-history.js.map +1 -0
- package/dist/src/audit/audit-report-writer.d.ts +82 -0
- package/dist/src/audit/audit-report-writer.d.ts.map +1 -0
- package/dist/src/audit/audit-report-writer.js +241 -0
- package/dist/src/audit/audit-report-writer.js.map +1 -0
- package/dist/src/audit/audit-suggestions.d.ts +52 -0
- package/dist/src/audit/audit-suggestions.d.ts.map +1 -0
- package/dist/src/audit/audit-suggestions.js +90 -0
- package/dist/src/audit/audit-suggestions.js.map +1 -0
- package/dist/src/audit/bootstrap-unmanaged.d.ts +66 -0
- package/dist/src/audit/bootstrap-unmanaged.d.ts.map +1 -0
- package/dist/src/audit/bootstrap-unmanaged.js +91 -0
- package/dist/src/audit/bootstrap-unmanaged.js.map +1 -0
- package/dist/src/audit/collision-detector.d.ts +72 -0
- package/dist/src/audit/collision-detector.d.ts.map +1 -0
- package/dist/src/audit/collision-detector.helpers.d.ts +63 -0
- package/dist/src/audit/collision-detector.helpers.d.ts.map +1 -0
- package/dist/src/audit/collision-detector.helpers.js +141 -0
- package/dist/src/audit/collision-detector.helpers.js.map +1 -0
- package/dist/src/audit/collision-detector.js +172 -0
- package/dist/src/audit/collision-detector.js.map +1 -0
- package/dist/src/audit/collision-detector.semantic.helpers.d.ts +49 -0
- package/dist/src/audit/collision-detector.semantic.helpers.d.ts.map +1 -0
- package/dist/src/audit/collision-detector.semantic.helpers.js +121 -0
- package/dist/src/audit/collision-detector.semantic.helpers.js.map +1 -0
- package/dist/src/audit/collision-detector.types.d.ts +70 -0
- package/dist/src/audit/collision-detector.types.d.ts.map +1 -0
- package/dist/src/audit/collision-detector.types.js +9 -0
- package/dist/src/audit/collision-detector.types.js.map +1 -0
- package/dist/src/audit/edit-applier.d.ts +64 -0
- package/dist/src/audit/edit-applier.d.ts.map +1 -0
- package/dist/src/audit/edit-applier.js +233 -0
- package/dist/src/audit/edit-applier.js.map +1 -0
- package/dist/src/audit/edit-applier.types.d.ts +72 -0
- package/dist/src/audit/edit-applier.types.d.ts.map +1 -0
- package/dist/src/audit/edit-applier.types.js +13 -0
- package/dist/src/audit/edit-applier.types.js.map +1 -0
- package/dist/src/audit/edit-suggester.d.ts +63 -0
- package/dist/src/audit/edit-suggester.d.ts.map +1 -0
- package/dist/src/audit/edit-suggester.js +326 -0
- package/dist/src/audit/edit-suggester.js.map +1 -0
- package/dist/src/audit/edit-suggester.types.d.ts +148 -0
- package/dist/src/audit/edit-suggester.types.d.ts.map +1 -0
- package/dist/src/audit/edit-suggester.types.js +17 -0
- package/dist/src/audit/edit-suggester.types.js.map +1 -0
- package/dist/src/audit/framework-adapter.d.ts +54 -0
- package/dist/src/audit/framework-adapter.d.ts.map +1 -0
- package/dist/src/audit/framework-adapter.js +251 -0
- package/dist/src/audit/framework-adapter.js.map +1 -0
- package/dist/src/audit/framework-adapter.types.d.ts +162 -0
- package/dist/src/audit/framework-adapter.types.d.ts.map +1 -0
- package/dist/src/audit/framework-adapter.types.js +31 -0
- package/dist/src/audit/framework-adapter.types.js.map +1 -0
- package/dist/src/audit/index.d.ts +46 -0
- package/dist/src/audit/index.d.ts.map +1 -0
- package/dist/src/audit/index.js +44 -0
- package/dist/src/audit/index.js.map +1 -0
- package/dist/src/audit/install-preflight.d.ts +99 -0
- package/dist/src/audit/install-preflight.d.ts.map +1 -0
- package/dist/src/audit/install-preflight.js +320 -0
- package/dist/src/audit/install-preflight.js.map +1 -0
- package/dist/src/audit/namespace-audit.types.d.ts +100 -0
- package/dist/src/audit/namespace-audit.types.d.ts.map +1 -0
- package/dist/src/audit/namespace-audit.types.js +20 -0
- package/dist/src/audit/namespace-audit.types.js.map +1 -0
- package/dist/src/audit/namespace-overrides.d.ts +79 -0
- package/dist/src/audit/namespace-overrides.d.ts.map +1 -0
- package/dist/src/audit/namespace-overrides.js +228 -0
- package/dist/src/audit/namespace-overrides.js.map +1 -0
- package/dist/src/audit/namespace-overrides.types.d.ts +115 -0
- package/dist/src/audit/namespace-overrides.types.d.ts.map +1 -0
- package/dist/src/audit/namespace-overrides.types.js +26 -0
- package/dist/src/audit/namespace-overrides.types.js.map +1 -0
- package/dist/src/audit/rename-engine.apply-paths.d.ts +54 -0
- package/dist/src/audit/rename-engine.apply-paths.d.ts.map +1 -0
- package/dist/src/audit/rename-engine.apply-paths.js +126 -0
- package/dist/src/audit/rename-engine.apply-paths.js.map +1 -0
- package/dist/src/audit/rename-engine.d.ts +59 -0
- package/dist/src/audit/rename-engine.d.ts.map +1 -0
- package/dist/src/audit/rename-engine.helpers.d.ts +63 -0
- package/dist/src/audit/rename-engine.helpers.d.ts.map +1 -0
- package/dist/src/audit/rename-engine.helpers.js +224 -0
- package/dist/src/audit/rename-engine.helpers.js.map +1 -0
- package/dist/src/audit/rename-engine.js +393 -0
- package/dist/src/audit/rename-engine.js.map +1 -0
- package/dist/src/audit/rename-engine.types.d.ts +157 -0
- package/dist/src/audit/rename-engine.types.d.ts.map +1 -0
- package/dist/src/audit/rename-engine.types.js +15 -0
- package/dist/src/audit/rename-engine.types.js.map +1 -0
- package/dist/src/audit/run-inventory-audit.d.ts +95 -0
- package/dist/src/audit/run-inventory-audit.d.ts.map +1 -0
- package/dist/src/audit/run-inventory-audit.js +245 -0
- package/dist/src/audit/run-inventory-audit.js.map +1 -0
- package/dist/src/audit/suggestion-chain.d.ts +89 -0
- package/dist/src/audit/suggestion-chain.d.ts.map +1 -0
- package/dist/src/audit/suggestion-chain.js +121 -0
- package/dist/src/audit/suggestion-chain.js.map +1 -0
- package/dist/src/audit-tool-dispatch.d.ts +61 -0
- package/dist/src/audit-tool-dispatch.d.ts.map +1 -0
- package/dist/src/audit-tool-dispatch.js +114 -0
- package/dist/src/audit-tool-dispatch.js.map +1 -0
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/indexer/LocalIndexer.d.ts +8 -1
- package/dist/src/indexer/LocalIndexer.d.ts.map +1 -1
- package/dist/src/indexer/LocalIndexer.js +42 -38
- package/dist/src/indexer/LocalIndexer.js.map +1 -1
- package/dist/src/middleware/__tests__/license.gate.test.js +21 -2
- package/dist/src/middleware/__tests__/license.gate.test.js.map +1 -1
- package/dist/src/middleware/license.gate.d.ts +14 -0
- package/dist/src/middleware/license.gate.d.ts.map +1 -1
- package/dist/src/middleware/license.gate.js +52 -1
- package/dist/src/middleware/license.gate.js.map +1 -1
- package/dist/src/onboarding/install-assets.d.ts.map +1 -1
- package/dist/src/onboarding/install-assets.js +11 -5
- package/dist/src/onboarding/install-assets.js.map +1 -1
- package/dist/src/tool-dispatch.d.ts.map +1 -1
- package/dist/src/tool-dispatch.js +6 -4
- package/dist/src/tool-dispatch.js.map +1 -1
- package/dist/src/tools/analytics.service.test.js +6 -4
- package/dist/src/tools/analytics.service.test.js.map +1 -1
- package/dist/src/tools/apply-namespace-rename.d.ts +71 -0
- package/dist/src/tools/apply-namespace-rename.d.ts.map +1 -0
- package/dist/src/tools/apply-namespace-rename.js +137 -0
- package/dist/src/tools/apply-namespace-rename.js.map +1 -0
- package/dist/src/tools/apply-namespace-rename.types.d.ts +46 -0
- package/dist/src/tools/apply-namespace-rename.types.d.ts.map +1 -0
- package/dist/src/tools/apply-namespace-rename.types.js +9 -0
- package/dist/src/tools/apply-namespace-rename.types.js.map +1 -0
- package/dist/src/tools/apply-recommended-edit.d.ts +50 -0
- package/dist/src/tools/apply-recommended-edit.d.ts.map +1 -0
- package/dist/src/tools/apply-recommended-edit.js +112 -0
- package/dist/src/tools/apply-recommended-edit.js.map +1 -0
- package/dist/src/tools/apply-recommended-edit.types.d.ts +49 -0
- package/dist/src/tools/apply-recommended-edit.types.d.ts.map +1 -0
- package/dist/src/tools/apply-recommended-edit.types.js +14 -0
- package/dist/src/tools/apply-recommended-edit.types.js.map +1 -0
- package/dist/src/tools/audit-tools.d.ts +4 -4
- package/dist/src/tools/compliance-tools.service.test.js +6 -4
- package/dist/src/tools/compliance-tools.service.test.js.map +1 -1
- package/dist/src/tools/install.backup-gc.d.ts +61 -0
- package/dist/src/tools/install.backup-gc.d.ts.map +1 -0
- package/dist/src/tools/install.backup-gc.js +166 -0
- package/dist/src/tools/install.backup-gc.js.map +1 -0
- package/dist/src/tools/install.conflict-helpers.d.ts +29 -2
- package/dist/src/tools/install.conflict-helpers.d.ts.map +1 -1
- package/dist/src/tools/install.conflict-helpers.js +37 -4
- package/dist/src/tools/install.conflict-helpers.js.map +1 -1
- package/dist/src/tools/install.d.ts +15 -1
- package/dist/src/tools/install.d.ts.map +1 -1
- package/dist/src/tools/install.js +162 -7
- package/dist/src/tools/install.js.map +1 -1
- package/dist/src/tools/install.ledger-replay.d.ts +52 -0
- package/dist/src/tools/install.ledger-replay.d.ts.map +1 -0
- package/dist/src/tools/install.ledger-replay.js +88 -0
- package/dist/src/tools/install.ledger-replay.js.map +1 -0
- package/dist/src/tools/install.namespace-gate.d.ts +68 -0
- package/dist/src/tools/install.namespace-gate.d.ts.map +1 -0
- package/dist/src/tools/install.namespace-gate.js +129 -0
- package/dist/src/tools/install.namespace-gate.js.map +1 -0
- package/dist/src/tools/install.test.js +71 -1
- package/dist/src/tools/install.test.js.map +1 -1
- package/dist/src/tools/install.tool.d.ts +17 -0
- package/dist/src/tools/install.tool.d.ts.map +1 -1
- package/dist/src/tools/install.tool.js +19 -1
- package/dist/src/tools/install.tool.js.map +1 -1
- package/dist/src/tools/install.types.d.ts +35 -1
- package/dist/src/tools/install.types.d.ts.map +1 -1
- package/dist/src/tools/install.types.js +24 -2
- package/dist/src/tools/install.types.js.map +1 -1
- package/dist/src/tools/namespace-audit/telemetry.d.ts +80 -0
- package/dist/src/tools/namespace-audit/telemetry.d.ts.map +1 -0
- package/dist/src/tools/namespace-audit/telemetry.js +129 -0
- package/dist/src/tools/namespace-audit/telemetry.js.map +1 -0
- package/dist/src/tools/outdated.test.js +2 -2
- package/dist/src/tools/outdated.test.js.map +1 -1
- package/dist/src/tools/publish-private.test.js +2 -2
- package/dist/src/tools/publish-private.test.js.map +1 -1
- package/dist/src/tools/recommend.types.d.ts +2 -2
- package/dist/src/tools/search.d.ts +2 -2
- package/dist/src/tools/search.js +3 -3
- package/dist/src/tools/search.js.map +1 -1
- package/dist/src/tools/skill-audit.test.js +2 -2
- package/dist/src/tools/skill-audit.test.js.map +1 -1
- package/dist/src/tools/skill-diff.d.ts +1 -1
- package/dist/src/tools/skill-inventory-audit.d.ts +67 -0
- package/dist/src/tools/skill-inventory-audit.d.ts.map +1 -0
- package/dist/src/tools/skill-inventory-audit.js +112 -0
- package/dist/src/tools/skill-inventory-audit.js.map +1 -0
- package/dist/src/tools/skill-inventory-audit.types.d.ts +67 -0
- package/dist/src/tools/skill-inventory-audit.types.d.ts.map +1 -0
- package/dist/src/tools/skill-inventory-audit.types.js +14 -0
- package/dist/src/tools/skill-inventory-audit.types.js.map +1 -0
- package/dist/src/tools/skill-pack-audit.d.ts.map +1 -1
- package/dist/src/tools/skill-pack-audit.helpers.d.ts.map +1 -1
- package/dist/src/tools/skill-pack-audit.helpers.js +15 -2
- package/dist/src/tools/skill-pack-audit.helpers.js.map +1 -1
- package/dist/src/tools/skill-pack-audit.js +15 -1
- package/dist/src/tools/skill-pack-audit.js.map +1 -1
- package/dist/src/tools/skill-rescan.d.ts.map +1 -1
- package/dist/src/tools/skill-rescan.js +4 -2
- package/dist/src/tools/skill-rescan.js.map +1 -1
- package/dist/src/tools/suggest.d.ts +2 -2
- package/dist/src/tools/uninstall.d.ts +1 -1
- package/dist/src/tools/uninstall.d.ts.map +1 -1
- package/dist/src/tools/uninstall.js +17 -3
- package/dist/src/tools/uninstall.js.map +1 -1
- package/dist/src/tools/validate.types.d.ts +10 -1
- package/dist/src/tools/validate.types.d.ts.map +1 -1
- package/dist/src/tools/validate.types.js +10 -1
- package/dist/src/tools/validate.types.js.map +1 -1
- package/dist/src/utils/installed-skills.d.ts.map +1 -1
- package/dist/src/utils/installed-skills.js +8 -6
- package/dist/src/utils/installed-skills.js.map +1 -1
- package/dist/src/utils/local-inventory.d.ts +29 -0
- package/dist/src/utils/local-inventory.d.ts.map +1 -0
- package/dist/src/utils/local-inventory.helpers.d.ts +96 -0
- package/dist/src/utils/local-inventory.helpers.d.ts.map +1 -0
- package/dist/src/utils/local-inventory.helpers.js +279 -0
- package/dist/src/utils/local-inventory.helpers.js.map +1 -0
- package/dist/src/utils/local-inventory.js +202 -0
- package/dist/src/utils/local-inventory.js.map +1 -0
- package/dist/src/utils/local-inventory.types.d.ts +100 -0
- package/dist/src/utils/local-inventory.types.d.ts.map +1 -0
- package/dist/src/utils/local-inventory.types.js +9 -0
- package/dist/src/utils/local-inventory.types.js.map +1 -0
- package/dist/src/webhooks/stripe-webhook-endpoint.d.ts +12 -0
- package/dist/src/webhooks/stripe-webhook-endpoint.d.ts.map +1 -1
- package/dist/src/webhooks/stripe-webhook-endpoint.js +30 -9
- package/dist/src/webhooks/stripe-webhook-endpoint.js.map +1 -1
- package/dist/src/webhooks/webhook-endpoint.d.ts +13 -0
- package/dist/src/webhooks/webhook-endpoint.d.ts.map +1 -1
- package/dist/src/webhooks/webhook-endpoint.js +31 -9
- package/dist/src/webhooks/webhook-endpoint.js.map +1 -1
- package/dist/tests/compare.test.js +5 -5
- package/dist/tests/compare.test.js.map +1 -1
- package/dist/tests/context-async-listeners.test.d.ts +12 -0
- package/dist/tests/context-async-listeners.test.d.ts.map +1 -0
- package/dist/tests/context-async-listeners.test.js +62 -0
- package/dist/tests/context-async-listeners.test.js.map +1 -0
- package/dist/tests/e2e/compare.e2e.test.js +9 -3
- package/dist/tests/e2e/compare.e2e.test.js.map +1 -1
- package/dist/tests/e2e/install-flow.e2e.test.js +9 -3
- package/dist/tests/e2e/install-flow.e2e.test.js.map +1 -1
- package/dist/tests/e2e/recommend.e2e.test.js +9 -3
- package/dist/tests/e2e/recommend.e2e.test.js.map +1 -1
- package/dist/tests/e2e/skill-flow.e2e.test.js +17 -5
- package/dist/tests/e2e/skill-flow.e2e.test.js.map +1 -1
- package/dist/tests/e2e/suggest.e2e.test.js +11 -3
- package/dist/tests/e2e/suggest.e2e.test.js.map +1 -1
- package/dist/tests/integration/audit-roundtrip.test.d.ts +29 -0
- package/dist/tests/integration/audit-roundtrip.test.d.ts.map +1 -0
- package/dist/tests/integration/audit-roundtrip.test.js +214 -0
- package/dist/tests/integration/audit-roundtrip.test.js.map +1 -0
- package/dist/tests/integration/install-namespace.integration.test.d.ts +14 -0
- package/dist/tests/integration/install-namespace.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/install-namespace.integration.test.js +414 -0
- package/dist/tests/integration/install-namespace.integration.test.js.map +1 -0
- package/dist/tests/performance/search-performance.test.js +9 -3
- package/dist/tests/performance/search-performance.test.js.map +1 -1
- package/dist/tests/tools.test.js +5 -5
- package/dist/tests/tools.test.js.map +1 -1
- package/dist/tests/unit/apply-namespace-rename.test.d.ts +24 -0
- package/dist/tests/unit/apply-namespace-rename.test.d.ts.map +1 -0
- package/dist/tests/unit/apply-namespace-rename.test.js +205 -0
- package/dist/tests/unit/apply-namespace-rename.test.js.map +1 -0
- package/dist/tests/unit/apply-recommended-edit.test.d.ts +28 -0
- package/dist/tests/unit/apply-recommended-edit.test.d.ts.map +1 -0
- package/dist/tests/unit/apply-recommended-edit.test.js +229 -0
- package/dist/tests/unit/apply-recommended-edit.test.js.map +1 -0
- package/dist/tests/unit/audit-history.test.d.ts +11 -0
- package/dist/tests/unit/audit-history.test.d.ts.map +1 -0
- package/dist/tests/unit/audit-history.test.js +183 -0
- package/dist/tests/unit/audit-history.test.js.map +1 -0
- package/dist/tests/unit/audit-report-writer.test.d.ts +7 -0
- package/dist/tests/unit/audit-report-writer.test.d.ts.map +1 -0
- package/dist/tests/unit/audit-report-writer.test.js +249 -0
- package/dist/tests/unit/audit-report-writer.test.js.map +1 -0
- package/dist/tests/unit/audit-tool-dispatch.test.d.ts +17 -0
- package/dist/tests/unit/audit-tool-dispatch.test.d.ts.map +1 -0
- package/dist/tests/unit/audit-tool-dispatch.test.js +133 -0
- package/dist/tests/unit/audit-tool-dispatch.test.js.map +1 -0
- package/dist/tests/unit/collision-detector.semantic.test.d.ts +12 -0
- package/dist/tests/unit/collision-detector.semantic.test.d.ts.map +1 -0
- package/dist/tests/unit/collision-detector.semantic.test.js +281 -0
- package/dist/tests/unit/collision-detector.semantic.test.js.map +1 -0
- package/dist/tests/unit/collision-detector.test.d.ts +8 -0
- package/dist/tests/unit/collision-detector.test.d.ts.map +1 -0
- package/dist/tests/unit/collision-detector.test.js +266 -0
- package/dist/tests/unit/collision-detector.test.js.map +1 -0
- package/dist/tests/unit/edit-applier.test.d.ts +17 -0
- package/dist/tests/unit/edit-applier.test.d.ts.map +1 -0
- package/dist/tests/unit/edit-applier.test.js +165 -0
- package/dist/tests/unit/edit-applier.test.js.map +1 -0
- package/dist/tests/unit/edit-suggester.fixtures.d.ts +38 -0
- package/dist/tests/unit/edit-suggester.fixtures.d.ts.map +1 -0
- package/dist/tests/unit/edit-suggester.fixtures.js +84 -0
- package/dist/tests/unit/edit-suggester.fixtures.js.map +1 -0
- package/dist/tests/unit/edit-suggester.test.d.ts +17 -0
- package/dist/tests/unit/edit-suggester.test.d.ts.map +1 -0
- package/dist/tests/unit/edit-suggester.test.js +356 -0
- package/dist/tests/unit/edit-suggester.test.js.map +1 -0
- package/dist/tests/unit/framework-adapter.test.d.ts +30 -0
- package/dist/tests/unit/framework-adapter.test.d.ts.map +1 -0
- package/dist/tests/unit/framework-adapter.test.js +221 -0
- package/dist/tests/unit/framework-adapter.test.js.map +1 -0
- package/dist/tests/unit/install-preflight.test.d.ts +17 -0
- package/dist/tests/unit/install-preflight.test.d.ts.map +1 -0
- package/dist/tests/unit/install-preflight.test.js +270 -0
- package/dist/tests/unit/install-preflight.test.js.map +1 -0
- package/dist/tests/unit/install.backup-gc.test.d.ts +18 -0
- package/dist/tests/unit/install.backup-gc.test.d.ts.map +1 -0
- package/dist/tests/unit/install.backup-gc.test.js +177 -0
- package/dist/tests/unit/install.backup-gc.test.js.map +1 -0
- package/dist/tests/unit/install.ledger-replay.test.d.ts +12 -0
- package/dist/tests/unit/install.ledger-replay.test.d.ts.map +1 -0
- package/dist/tests/unit/install.ledger-replay.test.js +98 -0
- package/dist/tests/unit/install.ledger-replay.test.js.map +1 -0
- package/dist/tests/unit/local-inventory.test.d.ts +8 -0
- package/dist/tests/unit/local-inventory.test.d.ts.map +1 -0
- package/dist/tests/unit/local-inventory.test.js +165 -0
- package/dist/tests/unit/local-inventory.test.js.map +1 -0
- package/dist/tests/unit/namespace-audit-telemetry.test.d.ts +10 -0
- package/dist/tests/unit/namespace-audit-telemetry.test.d.ts.map +1 -0
- package/dist/tests/unit/namespace-audit-telemetry.test.js +215 -0
- package/dist/tests/unit/namespace-audit-telemetry.test.js.map +1 -0
- package/dist/tests/unit/namespace-overrides.test.d.ts +18 -0
- package/dist/tests/unit/namespace-overrides.test.d.ts.map +1 -0
- package/dist/tests/unit/namespace-overrides.test.js +210 -0
- package/dist/tests/unit/namespace-overrides.test.js.map +1 -0
- package/dist/tests/unit/rename-engine.test.d.ts +26 -0
- package/dist/tests/unit/rename-engine.test.d.ts.map +1 -0
- package/dist/tests/unit/rename-engine.test.js +367 -0
- package/dist/tests/unit/rename-engine.test.js.map +1 -0
- package/dist/tests/unit/skill-inventory-audit.test.d.ts +20 -0
- package/dist/tests/unit/skill-inventory-audit.test.d.ts.map +1 -0
- package/dist/tests/unit/skill-inventory-audit.test.js +299 -0
- package/dist/tests/unit/skill-inventory-audit.test.js.map +1 -0
- package/dist/tests/unit/skill-pack-audit.helpers.test.d.ts +11 -0
- package/dist/tests/unit/skill-pack-audit.helpers.test.d.ts.map +1 -0
- package/dist/tests/unit/skill-pack-audit.helpers.test.js +61 -0
- package/dist/tests/unit/skill-pack-audit.helpers.test.js.map +1 -0
- package/dist/tests/unit/skill-pack-audit.test.js +1 -1
- package/dist/tests/unit/skill-pack-audit.test.js.map +1 -1
- package/dist/tests/unit/suggestion-chain.test.d.ts +17 -0
- package/dist/tests/unit/suggestion-chain.test.d.ts.map +1 -0
- package/dist/tests/unit/suggestion-chain.test.js +191 -0
- package/dist/tests/unit/suggestion-chain.test.js.map +1 -0
- package/dist/tests/webhooks/standalone-shutdown.test.d.ts +12 -0
- package/dist/tests/webhooks/standalone-shutdown.test.d.ts.map +1 -0
- package/dist/tests/webhooks/standalone-shutdown.test.js +91 -0
- package/dist/tests/webhooks/standalone-shutdown.test.js.map +1 -0
- package/package.json +17 -4
- package/server.json +3 -3
- package/src/assets/skills/skillsmith/SKILL.md +2 -2
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Rename engine — applies confirmed namespace renames
|
|
3
|
+
* (SMI-4588 Wave 2 Step 4, PR #2).
|
|
4
|
+
* @module @skillsmith/mcp-server/audit/rename-engine
|
|
5
|
+
*
|
|
6
|
+
* Three apply paths, gated on `RenameAction`:
|
|
7
|
+
*
|
|
8
|
+
* - `rename_command_file` — `~/.claude/commands/foo.md` → `<author>-foo.md`
|
|
9
|
+
* - `rename_agent_file` — `~/.claude/agents/foo.md` → `<author>-foo.md`
|
|
10
|
+
* - `rename_skill_dir_and_frontmatter` — rename the directory AND rewrite
|
|
11
|
+
* the SKILL.md `name:` frontmatter field.
|
|
12
|
+
*
|
|
13
|
+
* Plus `action: 'revert'` semantics: looks up the ledger entry by
|
|
14
|
+
* `auditId`, performs the inverse rename (back to `originalIdentifier`),
|
|
15
|
+
* removes the ledger entry, and restores the SKILL.md frontmatter.
|
|
16
|
+
*
|
|
17
|
+
* Backups are owned by the canonical `createSkillBackup` helper at
|
|
18
|
+
* `tools/install.conflict-helpers.ts:87` (plan §1 Edit 4). Single-file
|
|
19
|
+
* renames stage the file under a tmp directory so the helper (which
|
|
20
|
+
* expects a source dir) backs up only the relevant file. Backups land in
|
|
21
|
+
* `~/.claude/skills/.backups/<name>/<timestamp>_namespace-rename/`.
|
|
22
|
+
*
|
|
23
|
+
* Idempotency: before mutating, the engine consults the namespace-overrides
|
|
24
|
+
* ledger. When the same `(skillId, originalIdentifier)` pair is already
|
|
25
|
+
* in the ledger AND the on-disk filename matches the recorded
|
|
26
|
+
* `renamedTo`, the call is a no-op (returns success with
|
|
27
|
+
* `fromPath === toPath` and `backupPath === ''`).
|
|
28
|
+
*
|
|
29
|
+
* Disk-vs-ledger divergence: when the ledger has an entry but the on-disk
|
|
30
|
+
* filename does NOT match `renamedTo`, the engine returns
|
|
31
|
+
* `namespace.ledger.disk_divergence` rather than silently re-applying.
|
|
32
|
+
*
|
|
33
|
+
* Plan: docs/internal/implementation/smi-4588-rename-engine-ledger-install.md §1.
|
|
34
|
+
*/
|
|
35
|
+
import * as fs from 'node:fs/promises';
|
|
36
|
+
import * as path from 'node:path';
|
|
37
|
+
import { getBackupsDir } from '../tools/install.conflict-helpers.js';
|
|
38
|
+
import { appendOverride, findOverride, readLedger, writeLedger } from './namespace-overrides.js';
|
|
39
|
+
import { actionToKind, buildSummary, computeDestPath, deriveSkillId, fsErr, pathExists, runBackup, } from './rename-engine.apply-paths.js';
|
|
40
|
+
import { rewriteFrontmatterName } from './rename-engine.helpers.js';
|
|
41
|
+
export { generateSuggestionChain } from './suggestion-chain.js';
|
|
42
|
+
/**
|
|
43
|
+
* Public summary prefix used by the agent / CLI to detect inline revert
|
|
44
|
+
* messages. Matches plan §1 decision #10 verbatim.
|
|
45
|
+
*/
|
|
46
|
+
export const REVERT_SUMMARY_PREFIX = 'Renamed';
|
|
47
|
+
/**
|
|
48
|
+
* Apply (or revert) a rename. Single entrypoint for Wave 4's MCP tool.
|
|
49
|
+
* Each apply path runs: idempotency check → backup → mutate → ledger
|
|
50
|
+
* append → result. Revert: ledger lookup → inverse rename → ledger
|
|
51
|
+
* remove → result.
|
|
52
|
+
*
|
|
53
|
+
* Idempotency contract: re-applying the same suggestion when the ledger
|
|
54
|
+
* already records it AND on-disk state matches → returns success with
|
|
55
|
+
* `fromPath === toPath` and `backupPath === ''` (no second backup).
|
|
56
|
+
*
|
|
57
|
+
* Disk-vs-ledger divergence: ledger entry exists but on-disk path does
|
|
58
|
+
* NOT match `renamedTo` → `namespace.ledger.disk_divergence` error;
|
|
59
|
+
* caller decides whether to `customName` over the divergence.
|
|
60
|
+
*/
|
|
61
|
+
export async function applyRename(input) {
|
|
62
|
+
const { suggestion, request } = input;
|
|
63
|
+
const auditId = request.auditId;
|
|
64
|
+
if (request.action === 'revert') {
|
|
65
|
+
return revertRename(suggestion, auditId);
|
|
66
|
+
}
|
|
67
|
+
const newName = request.customName ?? suggestion.suggested;
|
|
68
|
+
const skillId = deriveSkillId(suggestion);
|
|
69
|
+
const action = suggestion.applyAction;
|
|
70
|
+
const kind = actionToKind(action);
|
|
71
|
+
const ledger = await readLedger();
|
|
72
|
+
// Idempotency / divergence check: do we already have a ledger entry for
|
|
73
|
+
// this `(skillId, kind, originalIdentifier)`?
|
|
74
|
+
const existing = findOverride(ledger, {
|
|
75
|
+
skillId,
|
|
76
|
+
kind,
|
|
77
|
+
originalIdentifier: suggestion.currentName,
|
|
78
|
+
});
|
|
79
|
+
if (existing) {
|
|
80
|
+
const onDiskMatches = await pathExists(existing.renamedPath);
|
|
81
|
+
if (onDiskMatches) {
|
|
82
|
+
// Idempotent no-op. Return success without touching disk or ledger.
|
|
83
|
+
return {
|
|
84
|
+
success: true,
|
|
85
|
+
collisionId: suggestion.collisionId,
|
|
86
|
+
appliedAction: action,
|
|
87
|
+
appliedRequest: 'apply',
|
|
88
|
+
fromPath: existing.renamedPath,
|
|
89
|
+
toPath: existing.renamedPath,
|
|
90
|
+
backupPath: '',
|
|
91
|
+
ledgerEntryId: existing.id,
|
|
92
|
+
summary: buildSummary(suggestion.currentName, existing.renamedTo, auditId, 'apply'),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
// Divergence — ledger says renamedTo, but it's not on disk. Refuse.
|
|
96
|
+
return {
|
|
97
|
+
success: false,
|
|
98
|
+
collisionId: suggestion.collisionId,
|
|
99
|
+
appliedAction: action,
|
|
100
|
+
appliedRequest: 'apply',
|
|
101
|
+
fromPath: suggestion.entry.source_path,
|
|
102
|
+
toPath: '',
|
|
103
|
+
backupPath: '',
|
|
104
|
+
ledgerEntryId: '',
|
|
105
|
+
summary: '',
|
|
106
|
+
error: {
|
|
107
|
+
kind: 'namespace.ledger.disk_divergence',
|
|
108
|
+
ledgerRenamedTo: existing.renamedTo,
|
|
109
|
+
onDisk: suggestion.entry.source_path,
|
|
110
|
+
message: `ledger records rename to ${existing.renamedTo} but no file at ${existing.renamedPath}`,
|
|
111
|
+
remediationHint: 're-run skill_inventory_audit and reapply, or call apply_namespace_rename with customName to overwrite the ledger entry',
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// Compute destination + verify it doesn't already exist (other than as
|
|
116
|
+
// the source for an idempotent no-op handled above).
|
|
117
|
+
const destPath = computeDestPath(suggestion, newName);
|
|
118
|
+
if (destPath !== suggestion.entry.source_path && (await pathExists(destPath))) {
|
|
119
|
+
return {
|
|
120
|
+
success: false,
|
|
121
|
+
collisionId: suggestion.collisionId,
|
|
122
|
+
appliedAction: action,
|
|
123
|
+
appliedRequest: 'apply',
|
|
124
|
+
fromPath: suggestion.entry.source_path,
|
|
125
|
+
toPath: destPath,
|
|
126
|
+
backupPath: '',
|
|
127
|
+
ledgerEntryId: '',
|
|
128
|
+
summary: '',
|
|
129
|
+
error: {
|
|
130
|
+
kind: 'namespace.rename.target_exists',
|
|
131
|
+
target: destPath,
|
|
132
|
+
message: `rename target already exists: ${destPath}`,
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
// Backup before any mutation.
|
|
137
|
+
let backupPath;
|
|
138
|
+
try {
|
|
139
|
+
backupPath = await runBackup(suggestion);
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
return {
|
|
143
|
+
success: false,
|
|
144
|
+
collisionId: suggestion.collisionId,
|
|
145
|
+
appliedAction: action,
|
|
146
|
+
appliedRequest: 'apply',
|
|
147
|
+
fromPath: suggestion.entry.source_path,
|
|
148
|
+
toPath: destPath,
|
|
149
|
+
backupPath: '',
|
|
150
|
+
ledgerEntryId: '',
|
|
151
|
+
summary: '',
|
|
152
|
+
error: {
|
|
153
|
+
kind: 'namespace.rename.backup_failed',
|
|
154
|
+
reason: err.message,
|
|
155
|
+
message: `backup failed: ${err.message}`,
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
// Mutate. For skill dirs: rewrite SKILL.md frontmatter, then rename the
|
|
160
|
+
// directory. For command/agent: just rename.
|
|
161
|
+
try {
|
|
162
|
+
if (action === 'rename_skill_dir_and_frontmatter') {
|
|
163
|
+
const skillMdPath = path.join(suggestion.entry.source_path, 'SKILL.md');
|
|
164
|
+
let original;
|
|
165
|
+
try {
|
|
166
|
+
original = await fs.readFile(skillMdPath, 'utf-8');
|
|
167
|
+
}
|
|
168
|
+
catch (err) {
|
|
169
|
+
return {
|
|
170
|
+
success: false,
|
|
171
|
+
collisionId: suggestion.collisionId,
|
|
172
|
+
appliedAction: action,
|
|
173
|
+
appliedRequest: 'apply',
|
|
174
|
+
fromPath: suggestion.entry.source_path,
|
|
175
|
+
toPath: destPath,
|
|
176
|
+
backupPath,
|
|
177
|
+
ledgerEntryId: '',
|
|
178
|
+
summary: '',
|
|
179
|
+
error: fsErr(`reading SKILL.md: ${err.message}`),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
const rewriteResult = rewriteFrontmatterName(original, newName);
|
|
183
|
+
if (!rewriteResult.ok) {
|
|
184
|
+
return {
|
|
185
|
+
success: false,
|
|
186
|
+
collisionId: suggestion.collisionId,
|
|
187
|
+
appliedAction: action,
|
|
188
|
+
appliedRequest: 'apply',
|
|
189
|
+
fromPath: suggestion.entry.source_path,
|
|
190
|
+
toPath: destPath,
|
|
191
|
+
backupPath,
|
|
192
|
+
ledgerEntryId: '',
|
|
193
|
+
summary: '',
|
|
194
|
+
error: {
|
|
195
|
+
kind: 'namespace.rename.frontmatter_rewrite_failed',
|
|
196
|
+
reason: rewriteResult.error.message,
|
|
197
|
+
message: `frontmatter rewrite failed: ${rewriteResult.error.message}`,
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
await fs.writeFile(skillMdPath, rewriteResult.content, 'utf-8');
|
|
202
|
+
await fs.rename(suggestion.entry.source_path, destPath);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
await fs.rename(suggestion.entry.source_path, destPath);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
return {
|
|
210
|
+
success: false,
|
|
211
|
+
collisionId: suggestion.collisionId,
|
|
212
|
+
appliedAction: action,
|
|
213
|
+
appliedRequest: 'apply',
|
|
214
|
+
fromPath: suggestion.entry.source_path,
|
|
215
|
+
toPath: destPath,
|
|
216
|
+
backupPath,
|
|
217
|
+
ledgerEntryId: '',
|
|
218
|
+
summary: '',
|
|
219
|
+
error: fsErr(err.message),
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
// Append ledger entry + persist.
|
|
223
|
+
const updated = appendOverride(ledger, {
|
|
224
|
+
skillId,
|
|
225
|
+
kind,
|
|
226
|
+
originalIdentifier: suggestion.currentName,
|
|
227
|
+
renamedTo: newName,
|
|
228
|
+
originalPath: suggestion.entry.source_path,
|
|
229
|
+
renamedPath: destPath,
|
|
230
|
+
auditId,
|
|
231
|
+
reason: suggestion.reason,
|
|
232
|
+
});
|
|
233
|
+
// `appendOverride` returns reference-equal ledger when a duplicate
|
|
234
|
+
// exists. Fresh appends produce a non-equal copy. Either way, persist
|
|
235
|
+
// the updated state.
|
|
236
|
+
if (updated !== ledger) {
|
|
237
|
+
await writeLedger(updated);
|
|
238
|
+
}
|
|
239
|
+
const newEntry = updated === ledger
|
|
240
|
+
? findOverride(updated, {
|
|
241
|
+
skillId,
|
|
242
|
+
kind,
|
|
243
|
+
originalIdentifier: suggestion.currentName,
|
|
244
|
+
})
|
|
245
|
+
: updated.overrides[updated.overrides.length - 1];
|
|
246
|
+
return {
|
|
247
|
+
success: true,
|
|
248
|
+
collisionId: suggestion.collisionId,
|
|
249
|
+
appliedAction: action,
|
|
250
|
+
appliedRequest: 'apply',
|
|
251
|
+
fromPath: suggestion.entry.source_path,
|
|
252
|
+
toPath: destPath,
|
|
253
|
+
backupPath,
|
|
254
|
+
ledgerEntryId: newEntry?.id ?? '',
|
|
255
|
+
summary: buildSummary(suggestion.currentName, newName, auditId, 'apply'),
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Inverse of `applyRename`. Looks up the ledger entry by `auditId`,
|
|
260
|
+
* renames the file back to `originalIdentifier`, and removes the ledger
|
|
261
|
+
* entry. Backup is kept for forensics until the 30-day GC sweep.
|
|
262
|
+
*
|
|
263
|
+
* Idempotency: calling revert twice on the same `auditId` returns success
|
|
264
|
+
* with `fromPath === toPath` on the second call (the entry is gone, so
|
|
265
|
+
* we treat it as a no-op success).
|
|
266
|
+
*/
|
|
267
|
+
async function revertRename(suggestion, auditId) {
|
|
268
|
+
const ledger = await readLedger();
|
|
269
|
+
const entry = ledger.overrides.find((o) => o.auditId === auditId);
|
|
270
|
+
if (!entry) {
|
|
271
|
+
// Idempotent no-op — already reverted.
|
|
272
|
+
return {
|
|
273
|
+
success: true,
|
|
274
|
+
collisionId: suggestion.collisionId,
|
|
275
|
+
appliedAction: suggestion.applyAction,
|
|
276
|
+
appliedRequest: 'revert',
|
|
277
|
+
fromPath: suggestion.entry.source_path,
|
|
278
|
+
toPath: suggestion.entry.source_path,
|
|
279
|
+
backupPath: '',
|
|
280
|
+
ledgerEntryId: '',
|
|
281
|
+
summary: buildSummary(suggestion.currentName, suggestion.currentName, auditId, 'revert'),
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
const action = suggestion.applyAction;
|
|
285
|
+
const onDisk = entry.renamedPath;
|
|
286
|
+
const target = entry.originalPath;
|
|
287
|
+
if (!(await pathExists(onDisk))) {
|
|
288
|
+
return {
|
|
289
|
+
success: false,
|
|
290
|
+
collisionId: suggestion.collisionId,
|
|
291
|
+
appliedAction: action,
|
|
292
|
+
appliedRequest: 'revert',
|
|
293
|
+
fromPath: onDisk,
|
|
294
|
+
toPath: target,
|
|
295
|
+
backupPath: '',
|
|
296
|
+
ledgerEntryId: entry.id,
|
|
297
|
+
summary: '',
|
|
298
|
+
error: {
|
|
299
|
+
kind: 'namespace.ledger.disk_divergence',
|
|
300
|
+
ledgerRenamedTo: entry.renamedTo,
|
|
301
|
+
onDisk,
|
|
302
|
+
message: `revert source missing on disk: ${onDisk}`,
|
|
303
|
+
remediationHint: 'restore from ~/.claude/skills/.backups or remove the ledger entry manually',
|
|
304
|
+
},
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
if (target !== onDisk && (await pathExists(target))) {
|
|
308
|
+
return {
|
|
309
|
+
success: false,
|
|
310
|
+
collisionId: suggestion.collisionId,
|
|
311
|
+
appliedAction: action,
|
|
312
|
+
appliedRequest: 'revert',
|
|
313
|
+
fromPath: onDisk,
|
|
314
|
+
toPath: target,
|
|
315
|
+
backupPath: '',
|
|
316
|
+
ledgerEntryId: entry.id,
|
|
317
|
+
summary: '',
|
|
318
|
+
error: {
|
|
319
|
+
kind: 'namespace.rename.target_exists',
|
|
320
|
+
target,
|
|
321
|
+
message: `revert target already exists: ${target}`,
|
|
322
|
+
},
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
// Inverse rename. For skills, also restore the SKILL.md frontmatter
|
|
326
|
+
// `name:` field to the original identifier. Backup is kept (forensics);
|
|
327
|
+
// no fresh backup is taken on revert — the apply backup covers this case.
|
|
328
|
+
try {
|
|
329
|
+
if (action === 'rename_skill_dir_and_frontmatter') {
|
|
330
|
+
const skillMdPath = path.join(onDisk, 'SKILL.md');
|
|
331
|
+
const current = await fs.readFile(skillMdPath, 'utf-8');
|
|
332
|
+
const restored = rewriteFrontmatterName(current, entry.originalIdentifier);
|
|
333
|
+
if (!restored.ok) {
|
|
334
|
+
return {
|
|
335
|
+
success: false,
|
|
336
|
+
collisionId: suggestion.collisionId,
|
|
337
|
+
appliedAction: action,
|
|
338
|
+
appliedRequest: 'revert',
|
|
339
|
+
fromPath: onDisk,
|
|
340
|
+
toPath: target,
|
|
341
|
+
backupPath: '',
|
|
342
|
+
ledgerEntryId: entry.id,
|
|
343
|
+
summary: '',
|
|
344
|
+
error: {
|
|
345
|
+
kind: 'namespace.rename.frontmatter_rewrite_failed',
|
|
346
|
+
reason: restored.error.message,
|
|
347
|
+
message: `revert frontmatter rewrite failed: ${restored.error.message}`,
|
|
348
|
+
},
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
await fs.writeFile(skillMdPath, restored.content, 'utf-8');
|
|
352
|
+
await fs.rename(onDisk, target);
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
await fs.rename(onDisk, target);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
catch (err) {
|
|
359
|
+
return {
|
|
360
|
+
success: false,
|
|
361
|
+
collisionId: suggestion.collisionId,
|
|
362
|
+
appliedAction: action,
|
|
363
|
+
appliedRequest: 'revert',
|
|
364
|
+
fromPath: onDisk,
|
|
365
|
+
toPath: target,
|
|
366
|
+
backupPath: '',
|
|
367
|
+
ledgerEntryId: entry.id,
|
|
368
|
+
summary: '',
|
|
369
|
+
error: fsErr(err.message),
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
// Remove the ledger entry.
|
|
373
|
+
const filtered = {
|
|
374
|
+
version: ledger.version,
|
|
375
|
+
overrides: ledger.overrides.filter((o) => o.id !== entry.id),
|
|
376
|
+
};
|
|
377
|
+
await writeLedger(filtered);
|
|
378
|
+
return {
|
|
379
|
+
success: true,
|
|
380
|
+
collisionId: suggestion.collisionId,
|
|
381
|
+
appliedAction: action,
|
|
382
|
+
appliedRequest: 'revert',
|
|
383
|
+
fromPath: onDisk,
|
|
384
|
+
toPath: target,
|
|
385
|
+
backupPath: '',
|
|
386
|
+
ledgerEntryId: entry.id,
|
|
387
|
+
summary: buildSummary(entry.renamedTo, entry.originalIdentifier, auditId, 'revert'),
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
// Re-export `getBackupsDir` so downstream tooling (Wave 4) can resolve the
|
|
391
|
+
// backup directory without reaching into `tools/install.conflict-helpers.js`.
|
|
392
|
+
export { getBackupsDir };
|
|
393
|
+
//# sourceMappingURL=rename-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rename-engine.js","sourceRoot":"","sources":["../../../src/audit/rename-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Type vocabulary for the rename engine
|
|
3
|
+
* (SMI-4588 Wave 2 Steps 2-4, PR #2).
|
|
4
|
+
* @module @skillsmith/mcp-server/audit/rename-engine.types
|
|
5
|
+
*
|
|
6
|
+
* Defines the public surface for `generateSuggestionChain`, `applyRename`,
|
|
7
|
+
* and the `apply | revert` action discriminator. The shapes here are the
|
|
8
|
+
* canonical replacement for `RenameSuggestionRef` shipped in
|
|
9
|
+
* `namespace-audit.types.ts` PR #1 — the structural shape is preserved so
|
|
10
|
+
* the swap-in is a drop-in replacement.
|
|
11
|
+
*
|
|
12
|
+
* Plan: docs/internal/implementation/smi-4588-rename-engine-ledger-install.md §1.
|
|
13
|
+
*/
|
|
14
|
+
import type { CollisionId, InventoryEntry } from './collision-detector.types.js';
|
|
15
|
+
/**
|
|
16
|
+
* Three on-disk apply paths. Each maps to a distinct mutation strategy:
|
|
17
|
+
*
|
|
18
|
+
* - `rename_command_file` — `~/.claude/commands/foo.md` → `~/.claude/commands/<author>-foo.md`
|
|
19
|
+
* - `rename_agent_file` — `~/.claude/agents/foo.md` → `~/.claude/agents/<author>-foo.md`
|
|
20
|
+
* - `rename_skill_dir_and_frontmatter` — rename the directory AND rewrite the
|
|
21
|
+
* `name:` field inside SKILL.md frontmatter.
|
|
22
|
+
*/
|
|
23
|
+
export type RenameAction = 'rename_command_file' | 'rename_agent_file' | 'rename_skill_dir_and_frontmatter';
|
|
24
|
+
/**
|
|
25
|
+
* One concrete rename suggestion attached to a detected collision. PR #1's
|
|
26
|
+
* `RenameSuggestionRef` shim in `namespace-audit.types.ts` is structurally
|
|
27
|
+
* compatible with this shape; PR #2 replaces the shim with this canonical
|
|
28
|
+
* type.
|
|
29
|
+
*
|
|
30
|
+
* Wave 4's `apply_namespace_rename` MCP tool accepts a `RenameSuggestion`
|
|
31
|
+
* (or a `customName` override) plus an action discriminator and dispatches
|
|
32
|
+
* to `applyRename`.
|
|
33
|
+
*/
|
|
34
|
+
export interface RenameSuggestion {
|
|
35
|
+
/** Stable across audit runs — derived via `deriveCollisionId`. */
|
|
36
|
+
collisionId: CollisionId;
|
|
37
|
+
/** The inventory entry whose identifier collides. */
|
|
38
|
+
entry: InventoryEntry;
|
|
39
|
+
/** Current on-disk identifier (filename without `.md`, or skill name). */
|
|
40
|
+
currentName: string;
|
|
41
|
+
/**
|
|
42
|
+
* First non-colliding candidate from `generateSuggestionChain`. Walking
|
|
43
|
+
* the chain (and selecting alternatives on collision) is the agent's job;
|
|
44
|
+
* `suggested` is the chain's first viable rename.
|
|
45
|
+
*/
|
|
46
|
+
suggested: string;
|
|
47
|
+
/** Which on-disk mutation strategy applies. */
|
|
48
|
+
applyAction: RenameAction;
|
|
49
|
+
/** Human-readable, e.g. `"collision with skillsmith/release-tools /ship"`. */
|
|
50
|
+
reason: string;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Action discriminator for `applyRename`. PR #2 ships `apply` + `revert`;
|
|
54
|
+
* `customName` (caller supplies override) lands in PR #3 alongside the
|
|
55
|
+
* install-integration plumbing.
|
|
56
|
+
*/
|
|
57
|
+
export type RenameActionRequest = {
|
|
58
|
+
action: 'apply';
|
|
59
|
+
auditId: string;
|
|
60
|
+
customName?: string;
|
|
61
|
+
} | {
|
|
62
|
+
action: 'revert';
|
|
63
|
+
auditId: string;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Top-level apply request. `auditId` is the FK into the audit-history
|
|
67
|
+
* `~/.skillsmith/audits/<auditId>/result.json` so forensic lookups can
|
|
68
|
+
* re-derive the original collision context.
|
|
69
|
+
*/
|
|
70
|
+
export interface ApplyRenameRequest {
|
|
71
|
+
/** Suggestion produced by `generateRenameSuggestions` / chain walk. */
|
|
72
|
+
suggestion: RenameSuggestion;
|
|
73
|
+
/** `apply` (forward rename) or `revert` (inverse, by ledger lookup). */
|
|
74
|
+
request: RenameActionRequest;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Result of a rename apply (or revert). `success === false` populates
|
|
78
|
+
* `error` with a typed discriminator; `success === true` populates the
|
|
79
|
+
* ledger linkage + on-disk paths + the inline revert summary.
|
|
80
|
+
*
|
|
81
|
+
* Idempotent re-apply on the same `(skillId, originalIdentifier)` pair is
|
|
82
|
+
* indicated by `fromPath === toPath` and `backupPath === ''` — callers may
|
|
83
|
+
* detect a no-op without re-reading the ledger.
|
|
84
|
+
*/
|
|
85
|
+
export interface ApplyRenameResult {
|
|
86
|
+
success: boolean;
|
|
87
|
+
collisionId: CollisionId;
|
|
88
|
+
appliedAction: RenameAction;
|
|
89
|
+
/** Action that ran — useful when `request.action === 'revert'`. */
|
|
90
|
+
appliedRequest: RenameActionRequest['action'];
|
|
91
|
+
/** Pre-mutation absolute path. */
|
|
92
|
+
fromPath: string;
|
|
93
|
+
/** Post-mutation absolute path. Equal to `fromPath` for idempotent no-ops. */
|
|
94
|
+
toPath: string;
|
|
95
|
+
/**
|
|
96
|
+
* Backup directory created by `createSkillBackup`. Empty string when the
|
|
97
|
+
* call was a no-op (idempotent re-apply) — no backup is created in that
|
|
98
|
+
* case because the on-disk state already matches the ledger.
|
|
99
|
+
*/
|
|
100
|
+
backupPath: string;
|
|
101
|
+
/** ULID of the appended ledger entry — `''` for revert (ledger entry removed). */
|
|
102
|
+
ledgerEntryId: string;
|
|
103
|
+
/**
|
|
104
|
+
* Inline revert summary (decision #10). Populated on success; empty
|
|
105
|
+
* string on failure. Literal text:
|
|
106
|
+
*
|
|
107
|
+
* `"Renamed /<OLD> → /<NEW>. To undo: sklx audit revert <auditId>"`
|
|
108
|
+
*
|
|
109
|
+
* The agent surfaces this directly to the user in tool-response output.
|
|
110
|
+
*/
|
|
111
|
+
summary: string;
|
|
112
|
+
/** Discriminated error on failure; `undefined` on success. */
|
|
113
|
+
error?: RenameError;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Typed errors surfaced by `applyRename`. Discriminated by `kind` so
|
|
117
|
+
* callers `switch` rather than parsing strings. Plan §1.
|
|
118
|
+
*/
|
|
119
|
+
export type RenameError = {
|
|
120
|
+
kind: 'namespace.rename.target_exists';
|
|
121
|
+
target: string;
|
|
122
|
+
message: string;
|
|
123
|
+
} | {
|
|
124
|
+
kind: 'namespace.rename.backup_failed';
|
|
125
|
+
reason: string;
|
|
126
|
+
message: string;
|
|
127
|
+
} | {
|
|
128
|
+
kind: 'namespace.rename.frontmatter_rewrite_failed';
|
|
129
|
+
reason: string;
|
|
130
|
+
message: string;
|
|
131
|
+
} | {
|
|
132
|
+
kind: 'namespace.rename.fs_error';
|
|
133
|
+
reason: string;
|
|
134
|
+
message: string;
|
|
135
|
+
} | {
|
|
136
|
+
kind: 'namespace.ledger.disk_divergence';
|
|
137
|
+
ledgerRenamedTo: string;
|
|
138
|
+
onDisk: string;
|
|
139
|
+
message: string;
|
|
140
|
+
remediationHint: string;
|
|
141
|
+
} | {
|
|
142
|
+
kind: 'namespace.rename.revert_not_found';
|
|
143
|
+
auditId: string;
|
|
144
|
+
message: string;
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Output of `generateSuggestionChain`. Up to 3 ordered candidates; if all
|
|
148
|
+
* three collide, `exhausted: true` and the agent must escalate to the
|
|
149
|
+
* human via `customName`.
|
|
150
|
+
*/
|
|
151
|
+
export interface SuggestionChain {
|
|
152
|
+
/** Up to 3 ordered candidates per decision #11. */
|
|
153
|
+
candidates: string[];
|
|
154
|
+
/** `true` when all 3 candidates collide. */
|
|
155
|
+
exhausted: boolean;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=rename-engine.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rename-engine.types.d.ts","sourceRoot":"","sources":["../../../src/audit/rename-engine.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAEhF;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GACpB,qBAAqB,GACrB,mBAAmB,GACnB,kCAAkC,CAAA;AAEtC;;;;;;;;;GASG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,WAAW,EAAE,WAAW,CAAA;IACxB,qDAAqD;IACrD,KAAK,EAAE,cAAc,CAAA;IACrB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB,+CAA+C;IAC/C,WAAW,EAAE,YAAY,CAAA;IACzB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAEzC;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,uEAAuE;IACvE,UAAU,EAAE,gBAAgB,CAAA;IAC5B,wEAAwE;IACxE,OAAO,EAAE,mBAAmB,CAAA;CAC7B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,WAAW,CAAA;IACxB,aAAa,EAAE,YAAY,CAAA;IAC3B,mEAAmE;IACnE,cAAc,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAC7C,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB,kFAAkF;IAClF,aAAa,EAAE,MAAM,CAAA;IACrB;;;;;;;OAOG;IACH,OAAO,EAAE,MAAM,CAAA;IACf,8DAA8D;IAC9D,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GACnB;IACE,IAAI,EAAE,gCAAgC,CAAA;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,GACD;IACE,IAAI,EAAE,gCAAgC,CAAA;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,GACD;IACE,IAAI,EAAE,6CAA6C,CAAA;IACnD,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,GACD;IACE,IAAI,EAAE,2BAA2B,CAAA;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,GACD;IACE,IAAI,EAAE,kCAAkC,CAAA;IACxC,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;CACxB,GACD;IACE,IAAI,EAAE,mCAAmC,CAAA;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAEL;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,4CAA4C;IAC5C,SAAS,EAAE,OAAO,CAAA;CACnB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Type vocabulary for the rename engine
|
|
3
|
+
* (SMI-4588 Wave 2 Steps 2-4, PR #2).
|
|
4
|
+
* @module @skillsmith/mcp-server/audit/rename-engine.types
|
|
5
|
+
*
|
|
6
|
+
* Defines the public surface for `generateSuggestionChain`, `applyRename`,
|
|
7
|
+
* and the `apply | revert` action discriminator. The shapes here are the
|
|
8
|
+
* canonical replacement for `RenameSuggestionRef` shipped in
|
|
9
|
+
* `namespace-audit.types.ts` PR #1 — the structural shape is preserved so
|
|
10
|
+
* the swap-in is a drop-in replacement.
|
|
11
|
+
*
|
|
12
|
+
* Plan: docs/internal/implementation/smi-4588-rename-engine-ledger-install.md §1.
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=rename-engine.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rename-engine.types.js","sourceRoot":"","sources":["../../../src/audit/rename-engine.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|