@skillsmith/mcp-server 0.4.13 → 0.5.1
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 +37 -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 +34 -2
- 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/compare.types.js +1 -1
- package/dist/src/tools/compare.types.js.map +1 -1
- 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/get-skill.d.ts.map +1 -1
- package/dist/src/tools/get-skill.js +1 -1
- package/dist/src/tools/get-skill.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 +168 -8
- 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 +136 -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/recommend.types.js +1 -1
- package/dist/src/tools/recommend.types.js.map +1 -1
- package/dist/src/tools/search.d.ts +2 -2
- package/dist/src/tools/search.d.ts.map +1 -1
- 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 +11 -2
- 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/install-assets.test.d.ts +16 -0
- package/dist/tests/install-assets.test.d.ts.map +1 -0
- package/dist/tests/install-assets.test.js +72 -0
- package/dist/tests/install-assets.test.js.map +1 -0
- 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/tool-descriptions.test.d.ts +16 -0
- package/dist/tests/tool-descriptions.test.d.ts.map +1 -0
- package/dist/tests/tool-descriptions.test.js +63 -0
- package/dist/tests/tool-descriptions.test.js.map +1 -0
- 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 +109 -80
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Audit-tool dispatch for the Skillsmith MCP server
|
|
3
|
+
* @module @skillsmith/mcp-server/audit-tool-dispatch
|
|
4
|
+
*
|
|
5
|
+
* SMI-4590 Wave 4 Step 0b: extracted from `tool-dispatch.ts` to keep the
|
|
6
|
+
* parent dispatcher under the 500-LOC file-size gate.
|
|
7
|
+
*
|
|
8
|
+
* Wave 4 PR 4 (this PR) adds three new tools:
|
|
9
|
+
* - `skill_inventory_audit` — full inventory audit (always registered)
|
|
10
|
+
* - `apply_namespace_rename` — apply a Wave 2 rename (always registered)
|
|
11
|
+
* - `apply_recommended_edit` — apply a Wave 3 prose edit; **registered
|
|
12
|
+
* iff `APPLY_TEMPLATE_REGISTRY.size > 0`** (defense-in-depth — if the
|
|
13
|
+
* registry ever empties via rollback, the tool unregisters itself and
|
|
14
|
+
* the audit-report writer surfaces edits as `manual_review` only).
|
|
15
|
+
*
|
|
16
|
+
* Surface: handles dispatch for all audit-family tools. The parent
|
|
17
|
+
* `tool-dispatch.ts` delegates by name match against {@link AUDIT_TOOL_NAMES};
|
|
18
|
+
* this module owns the audit case bodies, license + quota wiring (for the
|
|
19
|
+
* pre-existing `skill_audit` / `skill_pack_audit` cases), and Zod parse
|
|
20
|
+
* error envelopes.
|
|
21
|
+
*
|
|
22
|
+
* Dispatch responses for the three new tools follow the
|
|
23
|
+
* `safeParseOrError` pattern (see `validation.ts`) for protocol-level
|
|
24
|
+
* shape errors, AND embed an application-level `success: false` envelope
|
|
25
|
+
* inside `content[0].text` for domain-level failures (history not found,
|
|
26
|
+
* subcall failed). MCP clients introspect both.
|
|
27
|
+
*/
|
|
28
|
+
import { skillAuditInputSchema, executeSkillAudit } from './tools/skill-audit.js';
|
|
29
|
+
import { skillPackAuditInputSchema, executeSkillPackAudit } from './tools/skill-pack-audit.js';
|
|
30
|
+
import { skillInventoryAudit } from './tools/skill-inventory-audit.js';
|
|
31
|
+
import { applyNamespaceRename } from './tools/apply-namespace-rename.js';
|
|
32
|
+
import { applyRecommendedEditTool } from './tools/apply-recommended-edit.js';
|
|
33
|
+
import { APPLY_TEMPLATE_REGISTRY } from './audit/edit-applier.js';
|
|
34
|
+
import { withLicenseAndQuota } from './middleware/license.js';
|
|
35
|
+
/**
|
|
36
|
+
* Tool names handled by this dispatcher. The parent `tool-dispatch.ts`
|
|
37
|
+
* delegates iff the requested tool name is in this set.
|
|
38
|
+
*
|
|
39
|
+
* `apply_recommended_edit` is conditionally included based on
|
|
40
|
+
* `APPLY_TEMPLATE_REGISTRY.size`. When the registry is empty (rollback
|
|
41
|
+
* scenario), the name is omitted from this set AND
|
|
42
|
+
* {@link dispatchAuditTool} returns the standard "Unknown audit tool"
|
|
43
|
+
* error if the dispatcher is somehow reached for that name.
|
|
44
|
+
*/
|
|
45
|
+
export const AUDIT_TOOL_NAMES = new Set(buildAuditToolNames());
|
|
46
|
+
// SMI-4590 Wave 4 PR 5/6: the post-deploy smoke harness
|
|
47
|
+
// (`scripts/smoke-prod/mcp-server.sh`) greps the COMPILED JS of this file
|
|
48
|
+
// for the literal tool-name strings below. If you ever extract them into
|
|
49
|
+
// constants, named exports, or a JSON manifest, update those smoke checks
|
|
50
|
+
// in the same PR — otherwise the smoke continues to pass on a regression
|
|
51
|
+
// it was specifically built to catch.
|
|
52
|
+
function buildAuditToolNames() {
|
|
53
|
+
const names = [
|
|
54
|
+
'skill_audit',
|
|
55
|
+
'skill_pack_audit',
|
|
56
|
+
'skill_inventory_audit',
|
|
57
|
+
'apply_namespace_rename',
|
|
58
|
+
];
|
|
59
|
+
if (APPLY_TEMPLATE_REGISTRY.size > 0) {
|
|
60
|
+
names.push('apply_recommended_edit');
|
|
61
|
+
}
|
|
62
|
+
return names;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Returns true if `name` is an audit-family tool dispatched by this module.
|
|
66
|
+
* Parent dispatcher uses this to route — keeping the routing predicate
|
|
67
|
+
* colocated with the case bodies prevents drift.
|
|
68
|
+
*/
|
|
69
|
+
export function isAuditToolName(name) {
|
|
70
|
+
return AUDIT_TOOL_NAMES.has(name);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Wrap a Promise<T> as a successful MCP `CallToolResult` with a
|
|
74
|
+
* JSON-serialised body (mirrors `tool-dispatch.ok`).
|
|
75
|
+
*/
|
|
76
|
+
function okBody(payload) {
|
|
77
|
+
return {
|
|
78
|
+
content: [{ type: 'text', text: JSON.stringify(payload, null, 2) }],
|
|
79
|
+
isError: false,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Dispatch an audit-family tool call. Caller must check {@link isAuditToolName}
|
|
84
|
+
* before invoking; unrecognized names throw `Error('Unknown audit tool: <name>')`.
|
|
85
|
+
*
|
|
86
|
+
* @param name MCP tool name (must be in {@link AUDIT_TOOL_NAMES}).
|
|
87
|
+
* @param args Raw tool arguments from the request.
|
|
88
|
+
* @param toolContext Initialized database + repository context.
|
|
89
|
+
* @param licenseMiddleware License validation middleware instance.
|
|
90
|
+
* @param quotaMiddleware Quota enforcement middleware instance.
|
|
91
|
+
* @returns MCP tool response.
|
|
92
|
+
*/
|
|
93
|
+
export async function dispatchAuditTool(name, args, toolContext, licenseMiddleware, quotaMiddleware) {
|
|
94
|
+
switch (name) {
|
|
95
|
+
case 'skill_audit':
|
|
96
|
+
return withLicenseAndQuota('skill_audit', args, skillAuditInputSchema, executeSkillAudit, toolContext, licenseMiddleware, quotaMiddleware);
|
|
97
|
+
case 'skill_pack_audit':
|
|
98
|
+
return withLicenseAndQuota('skill_pack_audit', args, skillPackAuditInputSchema, executeSkillPackAudit, toolContext, licenseMiddleware, quotaMiddleware);
|
|
99
|
+
case 'skill_inventory_audit':
|
|
100
|
+
return okBody(await skillInventoryAudit(args));
|
|
101
|
+
case 'apply_namespace_rename':
|
|
102
|
+
return okBody(await applyNamespaceRename(args));
|
|
103
|
+
case 'apply_recommended_edit':
|
|
104
|
+
// Defense-in-depth: even if the parent dispatcher routes this name
|
|
105
|
+
// when the registry is empty (e.g. tests that mock the set), the
|
|
106
|
+
// tool body still calls Wave 3's applyRecommendedEdit which
|
|
107
|
+
// re-checks `APPLY_TEMPLATE_REGISTRY` and returns the typed
|
|
108
|
+
// `edit.template_not_in_apply_registry` error.
|
|
109
|
+
return okBody(await applyRecommendedEditTool(args));
|
|
110
|
+
default:
|
|
111
|
+
throw new Error('Unknown audit tool: ' + name);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=audit-tool-dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-tool-dispatch.js","sourceRoot":"","sources":["../../src/audit-tool-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACjF,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAC9F,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAI7D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAS,mBAAmB,EAAE,CAAC,CAAA;AAE3F,wDAAwD;AACxD,0EAA0E;AAC1E,yEAAyE;AACzE,0EAA0E;AAC1E,yEAAyE;AACzE,sCAAsC;AACtC,SAAS,mBAAmB;IAC1B,MAAM,KAAK,GAAG;QACZ,aAAa;QACb,kBAAkB;QAClB,uBAAuB;QACvB,wBAAwB;KACzB,CAAA;IACD,IAAI,uBAAuB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;IACtC,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACnC,CAAC;AAED;;;GAGG;AACH,SAAS,MAAM,CAAC,OAAgB;IAC9B,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAC5E,OAAO,EAAE,KAAK;KACf,CAAA;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,IAAyC,EACzC,WAAwB,EACxB,iBAAoC,EACpC,eAAgC;IAEhC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,aAAa;YAChB,OAAO,mBAAmB,CACxB,aAAa,EACb,IAAI,EACJ,qBAAqB,EACrB,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,eAAe,CAChB,CAAA;QAEH,KAAK,kBAAkB;YACrB,OAAO,mBAAmB,CACxB,kBAAkB,EAClB,IAAI,EACJ,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EACjB,eAAe,CAChB,CAAA;QAEH,KAAK,uBAAuB;YAC1B,OAAO,MAAM,CAAC,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAA;QAEhD,KAAK,wBAAwB;YAC3B,OAAO,MAAM,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAA;QAEjD,KAAK,wBAAwB;YAC3B,mEAAmE;YACnE,iEAAiE;YACjE,4DAA4D;YAC5D,4DAA4D;YAC5D,+CAA+C;YAC/C,OAAO,MAAM,CAAC,MAAM,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAA;QAErD;YACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAA;IAClD,CAAC;AACH,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -46,7 +46,7 @@ import { checkForUpdates, formatUpdateNotification } from '@skillsmith/core';
|
|
|
46
46
|
import { createLicenseMiddleware } from './middleware/license.js';
|
|
47
47
|
import { createQuotaMiddleware } from './middleware/quota.js';
|
|
48
48
|
// Package version - keep in sync with package.json
|
|
49
|
-
const PACKAGE_VERSION = '0.
|
|
49
|
+
const PACKAGE_VERSION = '0.5.1';
|
|
50
50
|
const PACKAGE_NAME = '@skillsmith/mcp-server';
|
|
51
51
|
import { installBundledSkills, installUserDocs, getUserGuidePath, } from './onboarding/install-assets.js';
|
|
52
52
|
// SMI-2679: Quota enforcement middleware — module-level singletons, initialized once
|
|
@@ -96,9 +96,12 @@ const toolDefinitions = [
|
|
|
96
96
|
complianceReportToolSchema,
|
|
97
97
|
];
|
|
98
98
|
// Create server
|
|
99
|
+
// SMI-4790 S1: version sourced from PACKAGE_VERSION constant (was hardcoded '0.4.6';
|
|
100
|
+
// drifted from package.json's actual version). prepare-release.ts updates PACKAGE_VERSION,
|
|
101
|
+
// so this binding stays in sync automatically.
|
|
99
102
|
const server = new Server({
|
|
100
103
|
name: 'skillsmith',
|
|
101
|
-
version:
|
|
104
|
+
version: PACKAGE_VERSION,
|
|
102
105
|
}, {
|
|
103
106
|
capabilities: {
|
|
104
107
|
tools: {},
|
|
@@ -159,6 +162,25 @@ function handleDocsFlag() {
|
|
|
159
162
|
}
|
|
160
163
|
process.exit(0);
|
|
161
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* SMI-4790: Idempotent install of the bundled `skillsmith` slash-command skill
|
|
167
|
+
* for MCP-only users (who never ran `skillsmith setup`) and recovery if the
|
|
168
|
+
* skill was uninstalled. Delegates routing to the existing
|
|
169
|
+
* `installBundledSkills()` which honours the SKILLSMITH_CLIENT env var via
|
|
170
|
+
* `resolveClientPath()` (Claude Code default; cursor/copilot/windsurf via env).
|
|
171
|
+
*
|
|
172
|
+
* Quiet by design: `installBundledSkills()` only logs when it actually copies
|
|
173
|
+
* a skill or hits an error, so happy-path startup adds zero stderr.
|
|
174
|
+
*/
|
|
175
|
+
function ensureSkillsmithSkillInstalled() {
|
|
176
|
+
try {
|
|
177
|
+
installBundledSkills();
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
// Fail-soft: never block MCP startup on bundled-skill install failure.
|
|
181
|
+
console.error('[skillsmith] Bundled skill install failed (non-fatal):', error instanceof Error ? error.message : 'Unknown error');
|
|
182
|
+
}
|
|
183
|
+
}
|
|
162
184
|
/**
|
|
163
185
|
* Run first-time setup: install bundled skills and Tier 1 skills from registry
|
|
164
186
|
*/
|
|
@@ -294,6 +316,16 @@ async function main() {
|
|
|
294
316
|
if (isFirstRun()) {
|
|
295
317
|
await runFirstTimeSetup();
|
|
296
318
|
}
|
|
319
|
+
else {
|
|
320
|
+
// SMI-4790: ensure the bundled `skillsmith` slash-command skill is installed
|
|
321
|
+
// even on non-first-run (covers MCP-only users who never ran `skillsmith setup`,
|
|
322
|
+
// and recovery if the skill was uninstalled). installBundledSkills() is
|
|
323
|
+
// idempotent — it skips skills already present at the runtime path resolved
|
|
324
|
+
// by `SKILLSMITH_CLIENT`. Opt out via SKILLSMITH_SKIP_SKILL_INSTALL=1.
|
|
325
|
+
if (process.env.SKILLSMITH_SKIP_SKILL_INSTALL !== '1') {
|
|
326
|
+
ensureSkillsmithSkillInstalled();
|
|
327
|
+
}
|
|
328
|
+
}
|
|
297
329
|
// SMI-1952: Auto-update check (non-blocking)
|
|
298
330
|
if (process.env.SKILLSMITH_AUTO_UPDATE_CHECK !== 'false') {
|
|
299
331
|
checkForUpdates(PACKAGE_NAME, PACKAGE_VERSION)
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEpC,uDAAuD;AACvD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAA;AAElG,wDAAwD;AACxD,OAAO,EAAE,mBAAmB,EAAoB,MAAM,cAAc,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EACL,gCAAgC,EAChC,yBAAyB,EACzB,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AACpF,OAAO,EACL,gCAAgC,EAChC,+BAA+B,GAChC,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACjG,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,GACb,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,mDAAmD;AACnD,MAAM,eAAe,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -77,11 +77,18 @@ export declare class LocalIndexer {
|
|
|
77
77
|
/**
|
|
78
78
|
* Index a single skill directory.
|
|
79
79
|
*
|
|
80
|
+
* SMI-4587 PR #4 / NEW-E-2: delegates the per-skill metadata extraction
|
|
81
|
+
* to the new `indexLocalSkill` core helper. This keeps the LocalIndexer
|
|
82
|
+
* focused on directory traversal + caching, and lets the namespace-audit
|
|
83
|
+
* `bootstrapUnmanagedSkills` callback share the same code path. The
|
|
84
|
+
* MCP-side `parseFrontmatter` (richer than the core fallback) is injected
|
|
85
|
+
* so behaviour stays identical to pre-refactor.
|
|
86
|
+
*
|
|
80
87
|
* @param skillDir - Path to the skill directory
|
|
81
88
|
* @param dirName - Name of the directory
|
|
82
89
|
* @returns LocalSkill object or null if directory should be skipped
|
|
83
90
|
*/
|
|
84
|
-
indexSkillDir(skillDir: string,
|
|
91
|
+
indexSkillDir(skillDir: string, _dirName: string): LocalSkill | null;
|
|
85
92
|
/**
|
|
86
93
|
* Internal method that performs the actual indexing.
|
|
87
94
|
* Called by both index() and indexSync() to avoid code duplication.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalIndexer.d.ts","sourceRoot":"","sources":["../../../src/indexer/LocalIndexer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"LocalIndexer.d.ts","sourceRoot":"","sources":["../../../src/indexer/LocalIndexer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAEhF;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAA;IACZ,mCAAmC;IACnC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAA;IACd,4BAA4B;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAA;IACpB,oDAAoD;IACpD,SAAS,EAAE,OAAO,CAAA;IAClB,wBAAwB;IACxB,MAAM,EAAE,OAAO,CAAA;IACf,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,iCAAiC;IACjC,UAAU,EAAE,OAAO,CAAA;IACnB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,uDAAuD;IACvD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CACzB;AAeD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAQ;IAExB;;;;OAIG;gBACS,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAc;IAQxD;;;;;;;;;;;;;;;OAeG;IACH,qBAAqB,CAAC,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM;IAqCjF;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAoBpE;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;IAkDrB;;;;;;;;OAQG;IACG,KAAK,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAI1D;;;;;OAKG;IACH,SAAS,CAAC,KAAK,GAAE,OAAe,GAAG,UAAU,EAAE;IAI/C;;;OAGG;IACH,UAAU,IAAI,IAAI;IAKlB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE;CA4B3D;AAmCD;;;GAGG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAK9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import * as fs from 'node:fs';
|
|
15
15
|
import * as path from 'node:path';
|
|
16
|
-
import
|
|
16
|
+
import { indexLocalSkill } from '@skillsmith/core';
|
|
17
|
+
import { getCanonicalInstallPath } from '@skillsmith/core/install';
|
|
17
18
|
import { parseFrontmatter } from './FrontmatterParser.js';
|
|
18
19
|
/**
|
|
19
20
|
* Quality scoring weights for local skills
|
|
@@ -41,7 +42,10 @@ export class LocalIndexer {
|
|
|
41
42
|
* @param cacheTtl - Cache TTL in milliseconds (defaults to 60000 = 1 minute)
|
|
42
43
|
*/
|
|
43
44
|
constructor(skillsDir, cacheTtl = 60000) {
|
|
44
|
-
|
|
45
|
+
// SMI-4578: routes through canonical install path so default-client
|
|
46
|
+
// directory is defined in exactly one place. Per-client scanning is
|
|
47
|
+
// handled by the cross-client `getInstalledSkills` (Step 4.5).
|
|
48
|
+
this.skillsDir = skillsDir || getCanonicalInstallPath();
|
|
45
49
|
this.cacheTtl = cacheTtl;
|
|
46
50
|
}
|
|
47
51
|
/**
|
|
@@ -93,52 +97,32 @@ export class LocalIndexer {
|
|
|
93
97
|
/**
|
|
94
98
|
* Index a single skill directory.
|
|
95
99
|
*
|
|
100
|
+
* SMI-4587 PR #4 / NEW-E-2: delegates the per-skill metadata extraction
|
|
101
|
+
* to the new `indexLocalSkill` core helper. This keeps the LocalIndexer
|
|
102
|
+
* focused on directory traversal + caching, and lets the namespace-audit
|
|
103
|
+
* `bootstrapUnmanagedSkills` callback share the same code path. The
|
|
104
|
+
* MCP-side `parseFrontmatter` (richer than the core fallback) is injected
|
|
105
|
+
* so behaviour stays identical to pre-refactor.
|
|
106
|
+
*
|
|
96
107
|
* @param skillDir - Path to the skill directory
|
|
97
108
|
* @param dirName - Name of the directory
|
|
98
109
|
* @returns LocalSkill object or null if directory should be skipped
|
|
99
110
|
*/
|
|
100
|
-
indexSkillDir(skillDir,
|
|
101
|
-
const skillMdPath = path.join(skillDir, 'SKILL.md');
|
|
102
|
-
let hasSkillMd = false;
|
|
103
|
-
let content = '';
|
|
104
|
-
let lastModified = null;
|
|
111
|
+
indexSkillDir(skillDir, _dirName) {
|
|
105
112
|
try {
|
|
106
|
-
//
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
//
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
113
|
+
// The core helper derives `name` from `frontmatter.name || basename`,
|
|
114
|
+
// which matches the pre-refactor `frontmatter.name || dirName`
|
|
115
|
+
// contract because `dirName === path.basename(skillDir)` for every
|
|
116
|
+
// call site in this class.
|
|
117
|
+
return indexLocalSkill(skillDir, {
|
|
118
|
+
parseFrontmatter: parseFrontmatterAdapter,
|
|
119
|
+
});
|
|
114
120
|
}
|
|
115
121
|
catch (error) {
|
|
116
|
-
// If we can't read the directory, skip it
|
|
122
|
+
// If we can't read the directory, skip it (parity with pre-refactor).
|
|
117
123
|
console.warn('[LocalIndexer] Failed to read skill directory:', skillDir, error instanceof Error ? error.message : String(error));
|
|
118
124
|
return null;
|
|
119
125
|
}
|
|
120
|
-
// Parse frontmatter (using imported function from FrontmatterParser)
|
|
121
|
-
const frontmatter = parseFrontmatter(content);
|
|
122
|
-
// Determine skill name
|
|
123
|
-
const name = frontmatter.name || dirName;
|
|
124
|
-
// Calculate quality score
|
|
125
|
-
const qualityScore = this.calculateQualityScore(frontmatter, hasSkillMd);
|
|
126
|
-
return {
|
|
127
|
-
id: `local/${name}`,
|
|
128
|
-
name,
|
|
129
|
-
description: frontmatter.description,
|
|
130
|
-
author: frontmatter.author || 'local',
|
|
131
|
-
tags: frontmatter.tags,
|
|
132
|
-
qualityScore,
|
|
133
|
-
trustTier: 'local',
|
|
134
|
-
source: 'local',
|
|
135
|
-
path: skillDir,
|
|
136
|
-
hasSkillMd,
|
|
137
|
-
lastModified,
|
|
138
|
-
repository: frontmatter.repository,
|
|
139
|
-
// SMI-2760: Compatibility tags from frontmatter
|
|
140
|
-
compatibility: frontmatter.compatibility.length > 0 ? frontmatter.compatibility : undefined,
|
|
141
|
-
};
|
|
142
126
|
}
|
|
143
127
|
/**
|
|
144
128
|
* Internal method that performs the actual indexing.
|
|
@@ -253,6 +237,26 @@ export class LocalIndexer {
|
|
|
253
237
|
});
|
|
254
238
|
}
|
|
255
239
|
}
|
|
240
|
+
/**
|
|
241
|
+
* Adapter that bridges the MCP-side richer `parseFrontmatter` (returns
|
|
242
|
+
* `SkillFrontmatter` with `triggers`/`homepage`/`version`) to the narrower
|
|
243
|
+
* `IndexLocalSkillFrontmatter` shape consumed by the core helper. The two
|
|
244
|
+
* shapes share fields by name; the adapter just narrows the surface so the
|
|
245
|
+
* indexer's behaviour stays bit-identical to pre-refactor.
|
|
246
|
+
*/
|
|
247
|
+
function parseFrontmatterAdapter(content) {
|
|
248
|
+
const fm = parseFrontmatter(content);
|
|
249
|
+
return {
|
|
250
|
+
name: fm.name,
|
|
251
|
+
description: fm.description,
|
|
252
|
+
author: fm.author,
|
|
253
|
+
tags: fm.tags,
|
|
254
|
+
version: fm.version,
|
|
255
|
+
repository: fm.repository,
|
|
256
|
+
homepage: fm.homepage,
|
|
257
|
+
compatibility: fm.compatibility,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
256
260
|
// Export singleton instance for convenience
|
|
257
261
|
let defaultIndexer = null;
|
|
258
262
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalIndexer.js","sourceRoot":"","sources":["../../../src/indexer/LocalIndexer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"LocalIndexer.js","sourceRoot":"","sources":["../../../src/indexer/LocalIndexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
// LG-3: withLicenseAndQuota rethrows non-profile_incomplete errors
|
|
5
5
|
// LG-4: withLicenseAndQuota passes through on success
|
|
6
6
|
// LG-5: checkAndTrack IS called before the handler (quota decremented for profile_incomplete)
|
|
7
|
+
// LG-6 (SMI-4463): NETWORK_QUOTA_EXCEEDED → JSON-RPC -32050 + structured quotaInfo
|
|
7
8
|
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
8
|
-
import { ApiClientError } from '@skillsmith/core';
|
|
9
|
-
import { createProfileIncompleteResponse, withLicenseAndQuota } from '../license.gate.js';
|
|
9
|
+
import { ApiClientError, SkillsmithError, ErrorCodes } from '@skillsmith/core';
|
|
10
|
+
import { createProfileIncompleteResponse, withLicenseAndQuota, MCP_MONTHLY_QUOTA_EXCEEDED_CODE, } from '../license.gate.js';
|
|
10
11
|
import { z } from 'zod';
|
|
11
12
|
const mockLicense = {
|
|
12
13
|
checkFeature: vi.fn().mockResolvedValue({ valid: true }),
|
|
@@ -70,5 +71,23 @@ describe('license.gate', () => {
|
|
|
70
71
|
await withLicenseAndQuota('search', { query: 'test' }, inputSchema, handler, mockCtx, mockLicense, mockQuota);
|
|
71
72
|
expect(mockQuota.checkAndTrack).toHaveBeenCalledOnce();
|
|
72
73
|
});
|
|
74
|
+
it('LG-6 (SMI-4463): NETWORK_QUOTA_EXCEEDED → JSON-RPC -32050 with quotaInfo', async () => {
|
|
75
|
+
const resetsAt = new Date(Date.now() + 5 * 86400000).toISOString();
|
|
76
|
+
const handler = vi
|
|
77
|
+
.fn()
|
|
78
|
+
.mockRejectedValue(new SkillsmithError(ErrorCodes.NETWORK_QUOTA_EXCEEDED, 'Monthly quota reached (1000/1000 community tier).\nUpgrade: https://skillsmith.app/pricing', { details: { used: 1000, limit: 1000, tier: 'community', resetsAt } }));
|
|
79
|
+
const result = await withLicenseAndQuota('search', { query: 'test' }, inputSchema, handler, mockCtx, mockLicense, mockQuota);
|
|
80
|
+
expect(result.isError).toBe(true);
|
|
81
|
+
const body = JSON.parse(result.content[0].text);
|
|
82
|
+
expect(body.code).toBe(MCP_MONTHLY_QUOTA_EXCEEDED_CODE);
|
|
83
|
+
expect(body.code).toBe(-32050);
|
|
84
|
+
expect(body.error).toBe('monthly_quota_exceeded');
|
|
85
|
+
expect(body.message).toContain('Monthly quota reached');
|
|
86
|
+
const quotaInfo = body.data.quotaInfo;
|
|
87
|
+
expect(quotaInfo.used).toBe(1000);
|
|
88
|
+
expect(quotaInfo.limit).toBe(1000);
|
|
89
|
+
expect(quotaInfo.tier).toBe('community');
|
|
90
|
+
expect(quotaInfo.resetsAt).toBe(resetsAt);
|
|
91
|
+
});
|
|
73
92
|
});
|
|
74
93
|
//# sourceMappingURL=license.gate.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license.gate.test.js","sourceRoot":"","sources":["../../../../src/middleware/__tests__/license.gate.test.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,sFAAsF;AACtF,4FAA4F;AAC5F,mEAAmE;AACnE,sDAAsD;AACtD,8FAA8F;
|
|
1
|
+
{"version":3,"file":"license.gate.test.js","sourceRoot":"","sources":["../../../../src/middleware/__tests__/license.gate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,20 @@ import type { ZodType, ZodTypeDef } from 'zod';
|
|
|
3
3
|
import type { ToolContext } from '../context.types.js';
|
|
4
4
|
import type { QuotaMiddleware } from './quota-types.js';
|
|
5
5
|
import type { LicenseMiddleware } from './license.js';
|
|
6
|
+
/**
|
|
7
|
+
* SMI-4463: JSON-RPC error code for monthly_quota_exceeded.
|
|
8
|
+
*
|
|
9
|
+
* Lives in the mid-range of the JSON-RPC reserved server-error band
|
|
10
|
+
* (-32000 / -32099). -32099 was at the edge and risks colliding with
|
|
11
|
+
* future spec assignments; -32050 gives us comfortable headroom.
|
|
12
|
+
*
|
|
13
|
+
* Disambiguator from per-minute rate-limit errors is the response
|
|
14
|
+
* `error: 'monthly_quota_exceeded'` body field — never the status code
|
|
15
|
+
* alone (both surface as 429 on the wire).
|
|
16
|
+
*
|
|
17
|
+
* Documented in CODES.md alongside other Skillsmith-canonical codes.
|
|
18
|
+
*/
|
|
19
|
+
export declare const MCP_MONTHLY_QUOTA_EXCEEDED_CODE = -32050;
|
|
6
20
|
export declare function ok(result: unknown): CallToolResult;
|
|
7
21
|
export declare function errResponse(response: {
|
|
8
22
|
content: Array<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license.gate.d.ts","sourceRoot":"","sources":["../../../src/middleware/license.gate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAGvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAKrD,wBAAgB,EAAE,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CAIlD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE;IACpC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC,GAAG,cAAc,CAEjB;AAID,wBAAgB,+BAA+B,IAAI;IACjD,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9C,OAAO,EAAE,IAAI,CAAA;CACd,CAoBA;AAMD,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,EACvC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,EACzD,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,iBAAiB,EACpC,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"license.gate.d.ts","sourceRoot":"","sources":["../../../src/middleware/license.gate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAGvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAKrD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,+BAA+B,SAAS,CAAA;AA8CrD,wBAAgB,EAAE,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CAIlD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE;IACpC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC,GAAG,cAAc,CAEjB;AAID,wBAAgB,+BAA+B,IAAI;IACjD,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9C,OAAO,EAAE,IAAI,CAAA;CACd,CAoBA;AAMD,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,EACvC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,EACzD,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,iBAAiB,EACpC,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC,cAAc,CAAC,CA0BzB"}
|
|
@@ -1,7 +1,52 @@
|
|
|
1
1
|
import { safeParseOrError } from '../validation.js';
|
|
2
|
-
import { ApiClientError } from '@skillsmith/core';
|
|
2
|
+
import { ApiClientError, SkillsmithError, ErrorCodes } from '@skillsmith/core';
|
|
3
3
|
import { createLicenseErrorResponse } from './license.js';
|
|
4
4
|
const COMPLETE_PROFILE_URL = 'https://skillsmith.app/complete-profile';
|
|
5
|
+
/**
|
|
6
|
+
* SMI-4463: JSON-RPC error code for monthly_quota_exceeded.
|
|
7
|
+
*
|
|
8
|
+
* Lives in the mid-range of the JSON-RPC reserved server-error band
|
|
9
|
+
* (-32000 / -32099). -32099 was at the edge and risks colliding with
|
|
10
|
+
* future spec assignments; -32050 gives us comfortable headroom.
|
|
11
|
+
*
|
|
12
|
+
* Disambiguator from per-minute rate-limit errors is the response
|
|
13
|
+
* `error: 'monthly_quota_exceeded'` body field — never the status code
|
|
14
|
+
* alone (both surface as 429 on the wire).
|
|
15
|
+
*
|
|
16
|
+
* Documented in CODES.md alongside other Skillsmith-canonical codes.
|
|
17
|
+
*/
|
|
18
|
+
export const MCP_MONTHLY_QUOTA_EXCEEDED_CODE = -32050;
|
|
19
|
+
/**
|
|
20
|
+
* SMI-4463: Build the user-facing MCP error response for a monthly quota
|
|
21
|
+
* exhaustion. The structured `data.quotaInfo` payload lets MCP clients
|
|
22
|
+
* render rich UI (countdown, upgrade button) without re-parsing the
|
|
23
|
+
* message. The plain-text message is suitable for any client that
|
|
24
|
+
* just stringifies content[0].text.
|
|
25
|
+
*/
|
|
26
|
+
function createMonthlyQuotaExceededResponse(err) {
|
|
27
|
+
const details = (err.details || {});
|
|
28
|
+
return {
|
|
29
|
+
content: [
|
|
30
|
+
{
|
|
31
|
+
type: 'text',
|
|
32
|
+
text: JSON.stringify({
|
|
33
|
+
code: MCP_MONTHLY_QUOTA_EXCEEDED_CODE,
|
|
34
|
+
error: 'monthly_quota_exceeded',
|
|
35
|
+
message: err.message,
|
|
36
|
+
data: {
|
|
37
|
+
quotaInfo: {
|
|
38
|
+
used: details.used ?? null,
|
|
39
|
+
limit: details.limit ?? null,
|
|
40
|
+
tier: details.tier ?? null,
|
|
41
|
+
resetsAt: details.resetsAt ?? null,
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
}, null, 2),
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
isError: true,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
5
50
|
export function ok(result) {
|
|
6
51
|
return {
|
|
7
52
|
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
@@ -53,6 +98,12 @@ export async function withLicenseAndQuota(toolName, args, schema, handler, toolC
|
|
|
53
98
|
err.message === 'profile_incomplete') {
|
|
54
99
|
return errResponse(createProfileIncompleteResponse());
|
|
55
100
|
}
|
|
101
|
+
// SMI-4463: monthly_quota_exceeded translates to JSON-RPC -32050 with
|
|
102
|
+
// structured quotaInfo. Disambiguates from per-minute rate-limit by
|
|
103
|
+
// the `error: 'monthly_quota_exceeded'` body field, not status code.
|
|
104
|
+
if (err instanceof SkillsmithError && err.code === ErrorCodes.NETWORK_QUOTA_EXCEEDED) {
|
|
105
|
+
return errResponse(createMonthlyQuotaExceededResponse(err));
|
|
106
|
+
}
|
|
56
107
|
throw err;
|
|
57
108
|
}
|
|
58
109
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license.gate.js","sourceRoot":"","sources":["../../../src/middleware/license.gate.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"license.gate.js","sourceRoot":"","sources":["../../../src/middleware/license.gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-assets.d.ts","sourceRoot":"","sources":["../../../src/onboarding/install-assets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"install-assets.d.ts","sourceRoot":"","sources":["../../../src/onboarding/install-assets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgDH;;;;;;GAMG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAmD/C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,OAAO,CA0BzC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAGrD"}
|
|
@@ -8,6 +8,7 @@ import { existsSync, cpSync, mkdirSync, readdirSync } from 'fs';
|
|
|
8
8
|
import { join, dirname } from 'path';
|
|
9
9
|
import { homedir } from 'os';
|
|
10
10
|
import { fileURLToPath } from 'url';
|
|
11
|
+
import { resolveClientPath } from '@skillsmith/core/install';
|
|
11
12
|
const __filename = fileURLToPath(import.meta.url);
|
|
12
13
|
const __dirname = dirname(__filename);
|
|
13
14
|
/**
|
|
@@ -38,7 +39,10 @@ function getAssetsDir() {
|
|
|
38
39
|
return fromDistPath;
|
|
39
40
|
}
|
|
40
41
|
const ASSETS_DIR = getAssetsDir();
|
|
41
|
-
|
|
42
|
+
// SMI-4578: bundled-asset install honours `SKILLSMITH_CLIENT` so a user
|
|
43
|
+
// who set the env var to e.g. `cursor` gets the bundled skillsmith skill
|
|
44
|
+
// at `~/.cursor/skills/skillsmith/` instead of `~/.claude/skills/`.
|
|
45
|
+
// Resolved at call time inside `installBundledSkills`.
|
|
42
46
|
const SKILLSMITH_DOCS_DIR = join(homedir(), '.skillsmith', 'docs');
|
|
43
47
|
/**
|
|
44
48
|
* Install bundled skills from package assets
|
|
@@ -54,9 +58,11 @@ export function installBundledSkills() {
|
|
|
54
58
|
console.error('[skillsmith] No bundled skills found in package');
|
|
55
59
|
return installed;
|
|
56
60
|
}
|
|
57
|
-
//
|
|
58
|
-
|
|
59
|
-
|
|
61
|
+
// SMI-4578: target directory honours SKILLSMITH_CLIENT — resolved at
|
|
62
|
+
// call time so a runtime env-var change is picked up.
|
|
63
|
+
const targetSkillsDir = resolveClientPath();
|
|
64
|
+
if (!existsSync(targetSkillsDir)) {
|
|
65
|
+
mkdirSync(targetSkillsDir, { recursive: true });
|
|
60
66
|
}
|
|
61
67
|
// Get all skill directories
|
|
62
68
|
let skillDirs;
|
|
@@ -72,7 +78,7 @@ export function installBundledSkills() {
|
|
|
72
78
|
// Install each skill
|
|
73
79
|
for (const skillName of skillDirs) {
|
|
74
80
|
const source = join(skillsDir, skillName);
|
|
75
|
-
const dest = join(
|
|
81
|
+
const dest = join(targetSkillsDir, skillName);
|
|
76
82
|
// Skip if already installed
|
|
77
83
|
if (existsSync(dest)) {
|
|
78
84
|
console.error(`[skillsmith] Skill already installed: ${skillName}`);
|