@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 @@
|
|
|
1
|
+
{"version":3,"file":"apply-recommended-edit.types.d.ts","sourceRoot":"","sources":["../../../src/tools/apply-recommended-edit.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAA;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAErE;;;;;;;GAOG;AACH,MAAM,WAAW,yBAAyB;IACxC,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,OAAO,CAAA;IAChB,2EAA2E;IAC3E,WAAW,EAAE,WAAW,GAAG,EAAE,CAAA;IAC7B,qDAAqD;IACrD,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,kDAAkD;IAClD,SAAS,CAAC,EACN,+BAA+B,GAC/B,mCAAmC,GACnC,qCAAqC,GACrC,qCAAqC,GACrC,qBAAqB,CAAA;IACzB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Type vocabulary for the `apply_recommended_edit` MCP tool
|
|
3
|
+
* (SMI-4590 Wave 4 PR 4).
|
|
4
|
+
* @module @skillsmith/mcp-server/tools/apply-recommended-edit.types
|
|
5
|
+
*
|
|
6
|
+
* Plan: docs/internal/implementation/smi-4590-cli-mcp-framework-adapter.md §3.
|
|
7
|
+
*
|
|
8
|
+
* Tool registration is gated on `APPLY_TEMPLATE_REGISTRY.size > 0`
|
|
9
|
+
* (Wave 3 `edit-applier.ts`). When the registry is empty, the tool is
|
|
10
|
+
* NOT exposed in the dispatcher's `AUDIT_TOOL_NAMES` set — defense-in-
|
|
11
|
+
* depth against a rollback that empties the registry.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=apply-recommended-edit.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-recommended-edit.types.js","sourceRoot":"","sources":["../../../src/tools/apply-recommended-edit.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
|
@@ -37,21 +37,21 @@ export declare const auditQueryInputSchema: z.ZodObject<{
|
|
|
37
37
|
endDate: z.ZodOptional<z.ZodString>;
|
|
38
38
|
limit: z.ZodOptional<z.ZodNumber>;
|
|
39
39
|
}, "strip", z.ZodTypeAny, {
|
|
40
|
+
result?: "warning" | "success" | "failure" | undefined;
|
|
41
|
+
resource?: string | undefined;
|
|
40
42
|
limit?: number | undefined;
|
|
41
43
|
startDate?: string | undefined;
|
|
42
44
|
endDate?: string | undefined;
|
|
43
45
|
eventType?: string | undefined;
|
|
44
46
|
actor?: string | undefined;
|
|
45
|
-
resource?: string | undefined;
|
|
46
|
-
result?: "warning" | "success" | "failure" | undefined;
|
|
47
47
|
}, {
|
|
48
|
+
result?: "warning" | "success" | "failure" | undefined;
|
|
49
|
+
resource?: string | undefined;
|
|
48
50
|
limit?: number | undefined;
|
|
49
51
|
startDate?: string | undefined;
|
|
50
52
|
endDate?: string | undefined;
|
|
51
53
|
eventType?: string | undefined;
|
|
52
54
|
actor?: string | undefined;
|
|
53
|
-
resource?: string | undefined;
|
|
54
|
-
result?: "warning" | "success" | "failure" | undefined;
|
|
55
55
|
}>;
|
|
56
56
|
export type AuditQueryInput = z.infer<typeof auditQueryInputSchema>;
|
|
57
57
|
export declare const siemExportInputSchema: z.ZodObject<{
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @see SMI-3916: Wave 2 — Compliance real queries
|
|
4
4
|
*/
|
|
5
5
|
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
6
|
-
import {
|
|
6
|
+
import { createDatabaseAsync, initializeSchema } from '@skillsmith/core';
|
|
7
7
|
import { createRealComplianceService } from './compliance-tools.service.js';
|
|
8
8
|
// ============================================================================
|
|
9
9
|
// Test helpers
|
|
@@ -30,12 +30,14 @@ function daysAgo(n) {
|
|
|
30
30
|
describe('createRealComplianceService', () => {
|
|
31
31
|
let db;
|
|
32
32
|
let svc;
|
|
33
|
-
beforeEach(() => {
|
|
34
|
-
db =
|
|
33
|
+
beforeEach(async () => {
|
|
34
|
+
db = await createDatabaseAsync(':memory:');
|
|
35
|
+
initializeSchema(db);
|
|
35
36
|
svc = createRealComplianceService(db);
|
|
36
37
|
});
|
|
37
38
|
afterEach(() => {
|
|
38
|
-
db
|
|
39
|
+
if (db)
|
|
40
|
+
db.close();
|
|
39
41
|
});
|
|
40
42
|
describe('gatherData', () => {
|
|
41
43
|
it('returns empty data for an empty database', async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compliance-tools.service.test.js","sourceRoot":"","sources":["../../../src/tools/compliance-tools.service.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"compliance-tools.service.test.js","sourceRoot":"","sources":["../../../src/tools/compliance-tools.service.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Backup garbage-collector for the namespace-rename workflow
|
|
3
|
+
* (SMI-4588 Wave 2 Step 9, PR #4).
|
|
4
|
+
* @module @skillsmith/mcp-server/tools/install.backup-gc
|
|
5
|
+
*
|
|
6
|
+
* Sweeps `~/.claude/skills/.backups/<skillName>/<timestamp>_<reason>/`
|
|
7
|
+
* directories whose timestamp prefix is older than `retentionDays`
|
|
8
|
+
* (default 14, configurable via `SKILLSMITH_BACKUP_RETENTION_DAYS`,
|
|
9
|
+
* clamped to [1, 365]).
|
|
10
|
+
*
|
|
11
|
+
* Lives in `mcp-server` (not `core`) because `getBackupsDir()` is
|
|
12
|
+
* canonical in `mcp-server/tools/install.conflict-helpers.ts`. An upward
|
|
13
|
+
* dependency from `core` would either violate the package boundary or
|
|
14
|
+
* duplicate the path constant and drift (plan §1 Edit 4).
|
|
15
|
+
*
|
|
16
|
+
* Failure model:
|
|
17
|
+
*
|
|
18
|
+
* - Missing backup root → `removed: 0, kept: 0` (nothing to do).
|
|
19
|
+
* - Malformed timestamp directory (manual user dir, non-ISO prefix) →
|
|
20
|
+
* skipped with `console.warn`; the sweep never aborts mid-walk.
|
|
21
|
+
* - `fs.rm` failure on a single entry → logged with `console.warn`;
|
|
22
|
+
* remaining entries continue to be evaluated. Idempotent: a partial
|
|
23
|
+
* failure on one run is recoverable on the next.
|
|
24
|
+
*
|
|
25
|
+
* Trigger points (Wave 4 wires these — Wave 2 ships only the helper):
|
|
26
|
+
*
|
|
27
|
+
* - Free / Individual / Team: invoked at session-start by Wave 4's
|
|
28
|
+
* `session-start-audit.ts` hook.
|
|
29
|
+
* - Enterprise: invoked by Wave 4's `scheduled-audit/runner.ts` cron.
|
|
30
|
+
*/
|
|
31
|
+
export interface RunBackupGCOptions {
|
|
32
|
+
/** Override the backups directory (defaults to `getBackupsDir()`). */
|
|
33
|
+
backupsDir?: string;
|
|
34
|
+
/**
|
|
35
|
+
* Retention threshold in days. Clamped to `[1, 365]`. Defaults to the
|
|
36
|
+
* `SKILLSMITH_BACKUP_RETENTION_DAYS` env var (also clamped) and falls
|
|
37
|
+
* back to 14.
|
|
38
|
+
*/
|
|
39
|
+
retentionDays?: number;
|
|
40
|
+
/** Override "now" for tests. Defaults to `Date.now()`. */
|
|
41
|
+
now?: Date;
|
|
42
|
+
}
|
|
43
|
+
export interface RunBackupGCResult {
|
|
44
|
+
/** Number of timestamped backup directories removed by this sweep. */
|
|
45
|
+
removed: number;
|
|
46
|
+
/** Number of timestamped backup directories retained (still within window). */
|
|
47
|
+
kept: number;
|
|
48
|
+
/** Number of leaf entries skipped (malformed timestamp, non-directory). */
|
|
49
|
+
skipped: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Sweep stale backup directories under `<backupsDir>/<skillName>/`. Idempotent:
|
|
53
|
+
* safe to invoke concurrently (uses `fs.rm` with `force: true` and treats
|
|
54
|
+
* already-removed dirs as success).
|
|
55
|
+
*
|
|
56
|
+
* Walk: two levels deep. Level 1 = skill-name directories; level 2 =
|
|
57
|
+
* timestamp-prefixed leaf directories. Files at any level are ignored;
|
|
58
|
+
* malformed timestamp leaves are skipped (with `console.warn`).
|
|
59
|
+
*/
|
|
60
|
+
export declare function runBackupGC(opts?: RunBackupGCOptions): Promise<RunBackupGCResult>;
|
|
61
|
+
//# sourceMappingURL=install.backup-gc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.backup-gc.d.ts","sourceRoot":"","sources":["../../../src/tools/install.backup-gc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAYH,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,IAAI,CAAA;CACX;AAED,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAA;IACf,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAA;IACZ,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAA;CAChB;AAuDD;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,IAAI,GAAE,kBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAyE3F"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Backup garbage-collector for the namespace-rename workflow
|
|
3
|
+
* (SMI-4588 Wave 2 Step 9, PR #4).
|
|
4
|
+
* @module @skillsmith/mcp-server/tools/install.backup-gc
|
|
5
|
+
*
|
|
6
|
+
* Sweeps `~/.claude/skills/.backups/<skillName>/<timestamp>_<reason>/`
|
|
7
|
+
* directories whose timestamp prefix is older than `retentionDays`
|
|
8
|
+
* (default 14, configurable via `SKILLSMITH_BACKUP_RETENTION_DAYS`,
|
|
9
|
+
* clamped to [1, 365]).
|
|
10
|
+
*
|
|
11
|
+
* Lives in `mcp-server` (not `core`) because `getBackupsDir()` is
|
|
12
|
+
* canonical in `mcp-server/tools/install.conflict-helpers.ts`. An upward
|
|
13
|
+
* dependency from `core` would either violate the package boundary or
|
|
14
|
+
* duplicate the path constant and drift (plan §1 Edit 4).
|
|
15
|
+
*
|
|
16
|
+
* Failure model:
|
|
17
|
+
*
|
|
18
|
+
* - Missing backup root → `removed: 0, kept: 0` (nothing to do).
|
|
19
|
+
* - Malformed timestamp directory (manual user dir, non-ISO prefix) →
|
|
20
|
+
* skipped with `console.warn`; the sweep never aborts mid-walk.
|
|
21
|
+
* - `fs.rm` failure on a single entry → logged with `console.warn`;
|
|
22
|
+
* remaining entries continue to be evaluated. Idempotent: a partial
|
|
23
|
+
* failure on one run is recoverable on the next.
|
|
24
|
+
*
|
|
25
|
+
* Trigger points (Wave 4 wires these — Wave 2 ships only the helper):
|
|
26
|
+
*
|
|
27
|
+
* - Free / Individual / Team: invoked at session-start by Wave 4's
|
|
28
|
+
* `session-start-audit.ts` hook.
|
|
29
|
+
* - Enterprise: invoked by Wave 4's `scheduled-audit/runner.ts` cron.
|
|
30
|
+
*/
|
|
31
|
+
import * as fs from 'node:fs/promises';
|
|
32
|
+
import * as path from 'node:path';
|
|
33
|
+
import { getBackupsDir } from './install.conflict-helpers.js';
|
|
34
|
+
const DEFAULT_RETENTION_DAYS = 14;
|
|
35
|
+
const MIN_RETENTION_DAYS = 1;
|
|
36
|
+
const MAX_RETENTION_DAYS = 365;
|
|
37
|
+
const MS_PER_DAY = 24 * 60 * 60 * 1000;
|
|
38
|
+
/**
|
|
39
|
+
* Resolve the retention window in days. Caller-provided value wins; falls
|
|
40
|
+
* back to `SKILLSMITH_BACKUP_RETENTION_DAYS` env var; finally
|
|
41
|
+
* `DEFAULT_RETENTION_DAYS`. Always clamped to `[1, 365]`.
|
|
42
|
+
*/
|
|
43
|
+
function resolveRetentionDays(override) {
|
|
44
|
+
const candidate = override !== undefined
|
|
45
|
+
? override
|
|
46
|
+
: (() => {
|
|
47
|
+
const raw = process.env['SKILLSMITH_BACKUP_RETENTION_DAYS'];
|
|
48
|
+
if (raw === undefined || raw === '')
|
|
49
|
+
return DEFAULT_RETENTION_DAYS;
|
|
50
|
+
const parsed = Number(raw);
|
|
51
|
+
if (!Number.isFinite(parsed))
|
|
52
|
+
return DEFAULT_RETENTION_DAYS;
|
|
53
|
+
return parsed;
|
|
54
|
+
})();
|
|
55
|
+
if (!Number.isFinite(candidate))
|
|
56
|
+
return DEFAULT_RETENTION_DAYS;
|
|
57
|
+
if (candidate < MIN_RETENTION_DAYS)
|
|
58
|
+
return MIN_RETENTION_DAYS;
|
|
59
|
+
if (candidate > MAX_RETENTION_DAYS)
|
|
60
|
+
return MAX_RETENTION_DAYS;
|
|
61
|
+
return Math.floor(candidate);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Parse the ISO-like timestamp prefix produced by `createSkillBackup`.
|
|
65
|
+
* The writer formats `new Date().toISOString().replace(/[:.]/g, '-')` and
|
|
66
|
+
* appends `_<reason>` — e.g. `2026-04-30T15-42-18-331Z_namespace-rename`.
|
|
67
|
+
*
|
|
68
|
+
* Returns the parsed `Date` on success, `null` on any of:
|
|
69
|
+
*
|
|
70
|
+
* - No `_` separator (no `<reason>` suffix at all).
|
|
71
|
+
* - Empty timestamp prefix (`_reason` only).
|
|
72
|
+
* - Timestamp portion that does not round-trip through `Date.parse`.
|
|
73
|
+
*
|
|
74
|
+
* The reason suffix may itself contain hyphens; we split on the FIRST `_`
|
|
75
|
+
* only.
|
|
76
|
+
*/
|
|
77
|
+
function parseBackupTimestamp(name) {
|
|
78
|
+
const sepIdx = name.indexOf('_');
|
|
79
|
+
if (sepIdx <= 0)
|
|
80
|
+
return null;
|
|
81
|
+
const tsPortion = name.slice(0, sepIdx);
|
|
82
|
+
// Reverse the writer's `[:.] → '-'` substitution to recover an ISO string.
|
|
83
|
+
// The pattern is `YYYY-MM-DDTHH-mm-ss-SSSZ` → `YYYY-MM-DDTHH:mm:ss.SSSZ`.
|
|
84
|
+
// Match the trailing `Z` + 3-digit ms + 2-digit s + 2-digit m + 2-digit h
|
|
85
|
+
// boundary so we only touch the time portion (the date uses `-` legitimately).
|
|
86
|
+
const isoMatch = /^(\d{4}-\d{2}-\d{2})T(\d{2})-(\d{2})-(\d{2})-(\d{3})Z$/.exec(tsPortion);
|
|
87
|
+
if (!isoMatch)
|
|
88
|
+
return null;
|
|
89
|
+
const [, datePart, hh, mm, ss, ms] = isoMatch;
|
|
90
|
+
const isoCandidate = `${datePart}T${hh}:${mm}:${ss}.${ms}Z`;
|
|
91
|
+
const parsed = Date.parse(isoCandidate);
|
|
92
|
+
if (!Number.isFinite(parsed))
|
|
93
|
+
return null;
|
|
94
|
+
return new Date(parsed);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Sweep stale backup directories under `<backupsDir>/<skillName>/`. Idempotent:
|
|
98
|
+
* safe to invoke concurrently (uses `fs.rm` with `force: true` and treats
|
|
99
|
+
* already-removed dirs as success).
|
|
100
|
+
*
|
|
101
|
+
* Walk: two levels deep. Level 1 = skill-name directories; level 2 =
|
|
102
|
+
* timestamp-prefixed leaf directories. Files at any level are ignored;
|
|
103
|
+
* malformed timestamp leaves are skipped (with `console.warn`).
|
|
104
|
+
*/
|
|
105
|
+
export async function runBackupGC(opts = {}) {
|
|
106
|
+
const backupsDir = opts.backupsDir ?? getBackupsDir();
|
|
107
|
+
const retentionDays = resolveRetentionDays(opts.retentionDays);
|
|
108
|
+
const nowMs = (opts.now ?? new Date()).getTime();
|
|
109
|
+
const cutoffMs = nowMs - retentionDays * MS_PER_DAY;
|
|
110
|
+
const result = { removed: 0, kept: 0, skipped: 0 };
|
|
111
|
+
let level1;
|
|
112
|
+
try {
|
|
113
|
+
const entries = await fs.readdir(backupsDir, { withFileTypes: true });
|
|
114
|
+
level1 = entries.filter((e) => e.isDirectory()).map((e) => e.name);
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
// Missing root → nothing to do. Other errors (permission denied) bubble
|
|
118
|
+
// as warnings; sweep is best-effort.
|
|
119
|
+
if (err.code === 'ENOENT') {
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
console.warn(`[install.backup-gc] failed to enumerate ${backupsDir} (${err.message}); aborting sweep`);
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
for (const skillName of level1) {
|
|
126
|
+
const skillDir = path.join(backupsDir, skillName);
|
|
127
|
+
let leaves;
|
|
128
|
+
try {
|
|
129
|
+
const entries = await fs.readdir(skillDir, { withFileTypes: true });
|
|
130
|
+
leaves = entries.filter((e) => e.isDirectory()).map((e) => e.name);
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
console.warn(`[install.backup-gc] failed to enumerate ${skillDir} (${err.message}); skipping skill`);
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
for (const leaf of leaves) {
|
|
137
|
+
// The `.original` directory is reserved by `storeOriginal()` for
|
|
138
|
+
// three-way merge state — never GC it (mirrors the
|
|
139
|
+
// `cleanupOldBackups` carve-out in install.conflict-helpers.ts:202).
|
|
140
|
+
if (leaf === '.original') {
|
|
141
|
+
result.kept += 1;
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
const ts = parseBackupTimestamp(leaf);
|
|
145
|
+
if (ts === null) {
|
|
146
|
+
console.warn(`[install.backup-gc] skipping malformed backup directory: ${path.join(skillDir, leaf)}`);
|
|
147
|
+
result.skipped += 1;
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
if (ts.getTime() > cutoffMs) {
|
|
151
|
+
result.kept += 1;
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
const leafPath = path.join(skillDir, leaf);
|
|
155
|
+
try {
|
|
156
|
+
await fs.rm(leafPath, { recursive: true, force: true });
|
|
157
|
+
result.removed += 1;
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
console.warn(`[install.backup-gc] failed to remove ${leafPath} (${err.message}); leaving in place`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return result;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=install.backup-gc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.backup-gc.js","sourceRoot":"","sources":["../../../src/tools/install.backup-gc.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,11 @@
|
|
|
6
6
|
* Split from install.helpers.ts per governance code review (file size > 500 lines)
|
|
7
7
|
*/
|
|
8
8
|
/**
|
|
9
|
-
* SMI-1865: Get base directory for skill backups
|
|
10
|
-
*
|
|
9
|
+
* SMI-1865: Get base directory for skill backups.
|
|
10
|
+
*
|
|
11
|
+
* Uses a function instead of constant to support HOME overrides in tests.
|
|
12
|
+
* SMI-4578: routes through canonical install path so default-client
|
|
13
|
+
* backup directory follows the central path table.
|
|
11
14
|
*/
|
|
12
15
|
export declare function getBackupsDir(): string;
|
|
13
16
|
/**
|
|
@@ -40,6 +43,30 @@ export declare function detectModifications(installPath: string, originalHash: s
|
|
|
40
43
|
* @returns Path to the created backup directory
|
|
41
44
|
*/
|
|
42
45
|
export declare function createSkillBackup(skillName: string, installPath: string, reason: string): Promise<string>;
|
|
46
|
+
/**
|
|
47
|
+
* SMI-4589 Wave 3: Create a timestamped backup of a single prose file before
|
|
48
|
+
* an edit-applier mutation (CLAUDE.md or SKILL.md). Reuses `getBackupsDir()`
|
|
49
|
+
* for path resolution to keep prose backups co-located with skill backups
|
|
50
|
+
* and inside the canonical install root — `audit-history.ts`'s 30-day GC
|
|
51
|
+
* sweep covers this directory tree without further configuration.
|
|
52
|
+
*
|
|
53
|
+
* Path shape (decision #10): `<getBackupsDir()>/<basename(filePath)>/<timestamp>_<reason>/<basename(filePath)>`.
|
|
54
|
+
* The leading `<basename>` segment groups all prose backups for the same
|
|
55
|
+
* file alongside whichever skill or CLAUDE.md the file lives in; the inner
|
|
56
|
+
* `<basename>` mirrors `createSkillBackup`'s shape so `cleanupOldBackups`
|
|
57
|
+
* walks both surfaces uniformly.
|
|
58
|
+
*
|
|
59
|
+
* Failure mode: throws `Error` on any I/O failure. The caller
|
|
60
|
+
* (`applyRecommendedEdit`) maps the throw to `error: 'edit.backup_failed'`
|
|
61
|
+
* so the file-mutation step never runs without a valid backup.
|
|
62
|
+
*
|
|
63
|
+
* @param filePath - Absolute path to the prose file (e.g. SKILL.md, CLAUDE.md)
|
|
64
|
+
* @param reason - Reason for the backup (canonical: `'prose-edit'`)
|
|
65
|
+
* @returns `{ backupPath }` — absolute path to the created backup directory
|
|
66
|
+
*/
|
|
67
|
+
export declare function createProseBackup(filePath: string, reason: string): Promise<{
|
|
68
|
+
backupPath: string;
|
|
69
|
+
}>;
|
|
43
70
|
/**
|
|
44
71
|
* SMI-1865: Store the original content of a skill at install time
|
|
45
72
|
* Used for three-way merge during conflict resolution
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.conflict-helpers.d.ts","sourceRoot":"","sources":["../../../src/tools/install.conflict-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH
|
|
1
|
+
{"version":3,"file":"install.conflict-helpers.d.ts","sourceRoot":"","sources":["../../../src/tools/install.conflict-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH;;;;;;GAMG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,QAAQ,EAAE,OAAO,CAAA;IACjB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAA;IACnB,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAA;CACrB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAuB7B;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CA4BjB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAUjC;AA0BD;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAW5E;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B/F"}
|
|
@@ -7,18 +7,21 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import * as fs from 'fs/promises';
|
|
9
9
|
import * as path from 'path';
|
|
10
|
-
import * as os from 'os';
|
|
11
10
|
import { createHash } from 'crypto';
|
|
12
11
|
import { safeWriteFile } from '@skillsmith/core';
|
|
12
|
+
import { getCanonicalInstallPath } from '@skillsmith/core/install';
|
|
13
13
|
// ============================================================================
|
|
14
14
|
// Conflict Resolution Helpers (SMI-1865)
|
|
15
15
|
// ============================================================================
|
|
16
16
|
/**
|
|
17
|
-
* SMI-1865: Get base directory for skill backups
|
|
18
|
-
*
|
|
17
|
+
* SMI-1865: Get base directory for skill backups.
|
|
18
|
+
*
|
|
19
|
+
* Uses a function instead of constant to support HOME overrides in tests.
|
|
20
|
+
* SMI-4578: routes through canonical install path so default-client
|
|
21
|
+
* backup directory follows the central path table.
|
|
19
22
|
*/
|
|
20
23
|
export function getBackupsDir() {
|
|
21
|
-
return path.join(
|
|
24
|
+
return path.join(getCanonicalInstallPath(), '.backups');
|
|
22
25
|
}
|
|
23
26
|
/**
|
|
24
27
|
* SMI-1865: Compute SHA-256 hash of content for modification detection
|
|
@@ -87,6 +90,36 @@ export async function createSkillBackup(skillName, installPath, reason) {
|
|
|
87
90
|
}
|
|
88
91
|
return backupDir;
|
|
89
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* SMI-4589 Wave 3: Create a timestamped backup of a single prose file before
|
|
95
|
+
* an edit-applier mutation (CLAUDE.md or SKILL.md). Reuses `getBackupsDir()`
|
|
96
|
+
* for path resolution to keep prose backups co-located with skill backups
|
|
97
|
+
* and inside the canonical install root — `audit-history.ts`'s 30-day GC
|
|
98
|
+
* sweep covers this directory tree without further configuration.
|
|
99
|
+
*
|
|
100
|
+
* Path shape (decision #10): `<getBackupsDir()>/<basename(filePath)>/<timestamp>_<reason>/<basename(filePath)>`.
|
|
101
|
+
* The leading `<basename>` segment groups all prose backups for the same
|
|
102
|
+
* file alongside whichever skill or CLAUDE.md the file lives in; the inner
|
|
103
|
+
* `<basename>` mirrors `createSkillBackup`'s shape so `cleanupOldBackups`
|
|
104
|
+
* walks both surfaces uniformly.
|
|
105
|
+
*
|
|
106
|
+
* Failure mode: throws `Error` on any I/O failure. The caller
|
|
107
|
+
* (`applyRecommendedEdit`) maps the throw to `error: 'edit.backup_failed'`
|
|
108
|
+
* so the file-mutation step never runs without a valid backup.
|
|
109
|
+
*
|
|
110
|
+
* @param filePath - Absolute path to the prose file (e.g. SKILL.md, CLAUDE.md)
|
|
111
|
+
* @param reason - Reason for the backup (canonical: `'prose-edit'`)
|
|
112
|
+
* @returns `{ backupPath }` — absolute path to the created backup directory
|
|
113
|
+
*/
|
|
114
|
+
export async function createProseBackup(filePath, reason) {
|
|
115
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
116
|
+
const baseName = path.basename(filePath);
|
|
117
|
+
const backupDir = path.join(getBackupsDir(), baseName, `${timestamp}_${reason}`);
|
|
118
|
+
await fs.mkdir(backupDir, { recursive: true });
|
|
119
|
+
// Single-file copy — preserves byte-for-byte content for revert.
|
|
120
|
+
await fs.copyFile(filePath, path.join(backupDir, baseName));
|
|
121
|
+
return { backupPath: backupDir };
|
|
122
|
+
}
|
|
90
123
|
/**
|
|
91
124
|
* SMI-1865: Recursively copy a directory
|
|
92
125
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.conflict-helpers.js","sourceRoot":"","sources":["../../../src/tools/install.conflict-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,
|
|
1
|
+
{"version":3,"file":"install.conflict-helpers.js","sourceRoot":"","sources":["../../../src/tools/install.conflict-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ export { installTool } from './install.tool.js';
|
|
|
19
19
|
export { default } from './install.tool.js';
|
|
20
20
|
export { installInputSchema, type InstallInput, type InstallResult } from './install.types.js';
|
|
21
21
|
/**
|
|
22
|
-
* Install a skill from GitHub to the local
|
|
22
|
+
* Install a skill from GitHub to the local agent skills directory (~/.claude/skills/).
|
|
23
23
|
*
|
|
24
24
|
* Delegates core logic to SkillInstallationService from @skillsmith/core.
|
|
25
25
|
* Adds MCP-specific conflict resolution (three-way merge, backup).
|
|
@@ -35,4 +35,18 @@ export { installInputSchema, type InstallInput, type InstallResult } from './ins
|
|
|
35
35
|
* @returns Installation result with success status, security report, and dep intel
|
|
36
36
|
*/
|
|
37
37
|
export declare function installSkill(input: unknown, _context?: ToolContext): Promise<InstallResult>;
|
|
38
|
+
/**
|
|
39
|
+
* Best-effort skill name extraction for conflict pre-check.
|
|
40
|
+
* Does not need to be perfect -- just needs to match manifest keys.
|
|
41
|
+
*
|
|
42
|
+
* SMI-4737: throws when the extracted segment exceeds `FIELD_LIMITS.token`
|
|
43
|
+
* (128 chars). Adversarial `skillId` inputs that survive the Zod 512-char
|
|
44
|
+
* boundary but produce an over-cap segment are rejected at the derivation
|
|
45
|
+
* site so they cannot reach `sanitizeSegment`'s defensive 256-char floor
|
|
46
|
+
* (SMI-4733). Caller sites must wrap in try/catch and surface a structured
|
|
47
|
+
* tool-error envelope; the throw must not escape the MCP handler.
|
|
48
|
+
*
|
|
49
|
+
* Exported for direct unit testing (SMI-4737 tests).
|
|
50
|
+
*/
|
|
51
|
+
export declare function extractSkillName(skillId: string): string;
|
|
38
52
|
//# sourceMappingURL=install.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/tools/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/tools/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,OAAO,EAAyC,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAa9F,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAG3C,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAkD9F;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CA8JjG;AA+CD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAexD"}
|