@skillsmith/core 0.12.1 → 0.12.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +164 -0
- package/README.md +2 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/api/client.d.ts +5 -3
- package/dist/src/api/client.d.ts.map +1 -1
- package/dist/src/api/client.js +23 -33
- package/dist/src/api/client.js.map +1 -1
- package/dist/src/api/client.registry-sync.d.ts +28 -0
- package/dist/src/api/client.registry-sync.d.ts.map +1 -0
- package/dist/src/api/client.registry-sync.js +36 -0
- package/dist/src/api/client.registry-sync.js.map +1 -0
- package/dist/src/api/client.test.js +185 -0
- package/dist/src/api/client.test.js.map +1 -1
- package/dist/src/api/client.toSkill.d.ts +16 -0
- package/dist/src/api/client.toSkill.d.ts.map +1 -0
- package/dist/src/api/client.toSkill.js +46 -0
- package/dist/src/api/client.toSkill.js.map +1 -0
- package/dist/src/api/client.types.d.ts +22 -0
- package/dist/src/api/client.types.d.ts.map +1 -1
- package/dist/src/api/index.d.ts +1 -1
- package/dist/src/api/index.d.ts.map +1 -1
- package/dist/src/api/index.js.map +1 -1
- package/dist/src/api/schemas.d.ts +28 -0
- package/dist/src/api/schemas.d.ts.map +1 -1
- package/dist/src/api/schemas.js +13 -0
- package/dist/src/api/schemas.js.map +1 -1
- package/dist/src/audit/remote-audit.d.ts +85 -0
- package/dist/src/audit/remote-audit.d.ts.map +1 -1
- package/dist/src/audit/remote-audit.js +126 -3
- package/dist/src/audit/remote-audit.js.map +1 -1
- package/dist/src/audit/remote-audit.test.js +217 -1
- package/dist/src/audit/remote-audit.test.js.map +1 -1
- package/dist/src/config/index.d.ts +1 -0
- package/dist/src/config/index.d.ts.map +1 -1
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/db/migration-runner.d.ts.map +1 -1
- package/dist/src/db/migration-runner.js +6 -0
- package/dist/src/db/migration-runner.js.map +1 -1
- package/dist/src/db/migrations/v18-skill-versions-real-content-hash.d.ts +36 -0
- package/dist/src/db/migrations/v18-skill-versions-real-content-hash.d.ts.map +1 -0
- package/dist/src/db/migrations/v18-skill-versions-real-content-hash.js +38 -0
- package/dist/src/db/migrations/v18-skill-versions-real-content-hash.js.map +1 -0
- package/dist/src/db/schema.d.ts +1 -1
- package/dist/src/db/schema.d.ts.map +1 -1
- package/dist/src/db/schema.js +3 -1
- package/dist/src/db/schema.js.map +1 -1
- package/dist/src/exports/services.d.ts +3 -7
- package/dist/src/exports/services.d.ts.map +1 -1
- package/dist/src/exports/services.install.d.ts +18 -0
- package/dist/src/exports/services.install.d.ts.map +1 -0
- package/dist/src/exports/services.install.js +62 -0
- package/dist/src/exports/services.install.js.map +1 -0
- package/dist/src/exports/services.js +12 -32
- package/dist/src/exports/services.js.map +1 -1
- package/dist/src/exports/types.d.ts +1 -1
- package/dist/src/exports/types.d.ts.map +1 -1
- package/dist/src/index.d.ts +6 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/install/agent-config-merge.json.d.ts +5 -4
- package/dist/src/install/agent-config-merge.json.d.ts.map +1 -1
- package/dist/src/install/agent-config-merge.json.js +10 -9
- package/dist/src/install/agent-config-merge.json.js.map +1 -1
- package/dist/src/install/agent-config-merge.types.d.ts +11 -1
- package/dist/src/install/agent-config-merge.types.d.ts.map +1 -1
- package/dist/src/install/agent-config-merge.types.js.map +1 -1
- package/dist/src/install/agent-harness-targets.d.ts +30 -2
- package/dist/src/install/agent-harness-targets.d.ts.map +1 -1
- package/dist/src/install/agent-harness-targets.js +17 -0
- package/dist/src/install/agent-harness-targets.js.map +1 -1
- package/dist/src/install/agent-manifest-path-guard.d.ts +28 -3
- package/dist/src/install/agent-manifest-path-guard.d.ts.map +1 -1
- package/dist/src/install/agent-manifest-path-guard.js +59 -3
- package/dist/src/install/agent-manifest-path-guard.js.map +1 -1
- package/dist/src/install/agent-manifest-path-guard.test.js +27 -1
- package/dist/src/install/agent-manifest-path-guard.test.js.map +1 -1
- package/dist/src/install/agent-pack-installer.antigravity-mcp.d.ts +74 -0
- package/dist/src/install/agent-pack-installer.antigravity-mcp.d.ts.map +1 -0
- package/dist/src/install/agent-pack-installer.antigravity-mcp.js +106 -0
- package/dist/src/install/agent-pack-installer.antigravity-mcp.js.map +1 -0
- package/dist/src/install/agent-pack-installer.antigravity-mcp.test.d.ts +2 -0
- package/dist/src/install/agent-pack-installer.antigravity-mcp.test.d.ts.map +1 -0
- package/dist/src/install/agent-pack-installer.antigravity-mcp.test.js +157 -0
- package/dist/src/install/agent-pack-installer.antigravity-mcp.test.js.map +1 -0
- package/dist/src/install/agent-pack-installer.cursor-mcp.d.ts +53 -0
- package/dist/src/install/agent-pack-installer.cursor-mcp.d.ts.map +1 -0
- package/dist/src/install/agent-pack-installer.cursor-mcp.js +207 -0
- package/dist/src/install/agent-pack-installer.cursor-mcp.js.map +1 -0
- package/dist/src/install/agent-pack-installer.cursor-mcp.test.d.ts +2 -0
- package/dist/src/install/agent-pack-installer.cursor-mcp.test.d.ts.map +1 -0
- package/dist/src/install/agent-pack-installer.cursor-mcp.test.js +285 -0
- package/dist/src/install/agent-pack-installer.cursor-mcp.test.js.map +1 -0
- package/dist/src/install/agent-pack-installer.d.ts +8 -0
- package/dist/src/install/agent-pack-installer.d.ts.map +1 -1
- package/dist/src/install/agent-pack-installer.entry.d.ts +120 -3
- package/dist/src/install/agent-pack-installer.entry.d.ts.map +1 -1
- package/dist/src/install/agent-pack-installer.entry.js +166 -3
- package/dist/src/install/agent-pack-installer.entry.js.map +1 -1
- package/dist/src/install/agent-pack-installer.js +97 -3
- package/dist/src/install/agent-pack-installer.js.map +1 -1
- package/dist/src/install/agent-pack-installer.types.d.ts +27 -0
- package/dist/src/install/agent-pack-installer.types.d.ts.map +1 -1
- package/dist/src/install/agent-pack-installer.types.js +6 -0
- package/dist/src/install/agent-pack-installer.types.js.map +1 -1
- package/dist/src/install/agent-pack-installer.workspace-scope.test.d.ts +2 -0
- package/dist/src/install/agent-pack-installer.workspace-scope.test.d.ts.map +1 -0
- package/dist/src/install/agent-pack-installer.workspace-scope.test.js +148 -0
- package/dist/src/install/agent-pack-installer.workspace-scope.test.js.map +1 -0
- package/dist/src/install/agent-pack-uninstaller.d.ts +18 -7
- package/dist/src/install/agent-pack-uninstaller.d.ts.map +1 -1
- package/dist/src/install/agent-pack-uninstaller.js +59 -9
- package/dist/src/install/agent-pack-uninstaller.js.map +1 -1
- package/dist/src/install/agent-pack-uninstaller.test.js +74 -1
- package/dist/src/install/agent-pack-uninstaller.test.js.map +1 -1
- package/dist/src/install/fan-out.d.ts.map +1 -1
- package/dist/src/install/fan-out.js +6 -0
- package/dist/src/install/fan-out.js.map +1 -1
- package/dist/src/install/index.d.ts +2 -0
- package/dist/src/install/index.d.ts.map +1 -1
- package/dist/src/install/index.js +2 -0
- package/dist/src/install/index.js.map +1 -1
- package/dist/src/install/workspace-scope.d.ts +207 -0
- package/dist/src/install/workspace-scope.d.ts.map +1 -0
- package/dist/src/install/workspace-scope.js +275 -0
- package/dist/src/install/workspace-scope.js.map +1 -0
- package/dist/src/install/workspace-scope.test.d.ts +2 -0
- package/dist/src/install/workspace-scope.test.d.ts.map +1 -0
- package/dist/src/install/workspace-scope.test.js +378 -0
- package/dist/src/install/workspace-scope.test.js.map +1 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js +9 -1
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
- package/dist/src/scripts/scan-imported-skills.d.ts +7 -1
- package/dist/src/scripts/scan-imported-skills.d.ts.map +1 -1
- package/dist/src/scripts/scan-imported-skills.js +15 -2
- package/dist/src/scripts/scan-imported-skills.js.map +1 -1
- package/dist/src/scripts/skill-scanner/allowlist.d.ts +10 -0
- package/dist/src/scripts/skill-scanner/allowlist.d.ts.map +1 -1
- package/dist/src/scripts/skill-scanner/allowlist.js +10 -0
- package/dist/src/scripts/skill-scanner/allowlist.js.map +1 -1
- package/dist/src/scripts/skill-scanner/index.d.ts +8 -0
- package/dist/src/scripts/skill-scanner/index.d.ts.map +1 -1
- package/dist/src/scripts/skill-scanner/index.js +13 -5
- package/dist/src/scripts/skill-scanner/index.js.map +1 -1
- package/dist/src/scripts/skill-scanner/trust-scorer.d.ts.map +1 -1
- package/dist/src/scripts/skill-scanner/trust-scorer.js +6 -0
- package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -1
- package/dist/src/security/__tests__/pathValidation.test.js +30 -1
- package/dist/src/security/__tests__/pathValidation.test.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.action-context.d.ts +15 -0
- package/dist/src/security/scanner/SecurityScanner.action-context.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.action-context.js +209 -0
- package/dist/src/security/scanner/SecurityScanner.action-context.js.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.d.ts +25 -0
- package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.helpers.d.ts +40 -1
- package/dist/src/security/scanner/SecurityScanner.helpers.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.helpers.js +88 -51
- package/dist/src/security/scanner/SecurityScanner.helpers.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.js +39 -6
- package/dist/src/security/scanner/SecurityScanner.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.pii.d.ts +30 -0
- package/dist/src/security/scanner/SecurityScanner.pii.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.pii.js +8 -1
- package/dist/src/security/scanner/SecurityScanner.pii.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.prose-lexicon.d.ts +60 -0
- package/dist/src/security/scanner/SecurityScanner.prose-lexicon.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.prose-lexicon.js +228 -0
- package/dist/src/security/scanner/SecurityScanner.prose-lexicon.js.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.scanners.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.scanners.js +35 -5
- package/dist/src/security/scanner/SecurityScanner.scanners.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.value-gate.d.ts +49 -0
- package/dist/src/security/scanner/SecurityScanner.value-gate.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.value-gate.js +134 -0
- package/dist/src/security/scanner/SecurityScanner.value-gate.js.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.weak-passwords.d.ts +55 -0
- package/dist/src/security/scanner/SecurityScanner.weak-passwords.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.weak-passwords.js +313 -0
- package/dist/src/security/scanner/SecurityScanner.weak-passwords.js.map +1 -0
- package/dist/src/security/scanner/patterns.d.ts +16 -6
- package/dist/src/security/scanner/patterns.d.ts.map +1 -1
- package/dist/src/security/scanner/patterns.js +25 -61
- package/dist/src/security/scanner/patterns.js.map +1 -1
- package/dist/src/security/scanner/patterns.sensitive-path.d.ts +45 -0
- package/dist/src/security/scanner/patterns.sensitive-path.d.ts.map +1 -0
- package/dist/src/security/scanner/patterns.sensitive-path.js +137 -0
- package/dist/src/security/scanner/patterns.sensitive-path.js.map +1 -0
- package/dist/src/security/scanner/regex-utils.d.ts +31 -17
- package/dist/src/security/scanner/regex-utils.d.ts.map +1 -1
- package/dist/src/security/scanner/regex-utils.js +31 -17
- package/dist/src/security/scanner/regex-utils.js.map +1 -1
- package/dist/src/security/scanner/types.d.ts +9 -0
- package/dist/src/security/scanner/types.d.ts.map +1 -1
- package/dist/src/services/SubagentGenerator.client-profiles.d.ts +258 -0
- package/dist/src/services/SubagentGenerator.client-profiles.d.ts.map +1 -0
- package/dist/src/services/SubagentGenerator.client-profiles.js +260 -0
- package/dist/src/services/SubagentGenerator.client-profiles.js.map +1 -0
- package/dist/src/services/SubagentGenerator.d.ts +19 -41
- package/dist/src/services/SubagentGenerator.d.ts.map +1 -1
- package/dist/src/services/SubagentGenerator.helpers.d.ts +64 -0
- package/dist/src/services/SubagentGenerator.helpers.d.ts.map +1 -0
- package/dist/src/services/SubagentGenerator.helpers.js +228 -0
- package/dist/src/services/SubagentGenerator.helpers.js.map +1 -0
- package/dist/src/services/SubagentGenerator.js +66 -208
- package/dist/src/services/SubagentGenerator.js.map +1 -1
- package/dist/src/services/SubagentGenerator.types.d.ts +45 -0
- package/dist/src/services/SubagentGenerator.types.d.ts.map +1 -0
- package/dist/src/services/SubagentGenerator.types.js +14 -0
- package/dist/src/services/SubagentGenerator.types.js.map +1 -0
- package/dist/src/services/TransformationService.d.ts +18 -61
- package/dist/src/services/TransformationService.d.ts.map +1 -1
- package/dist/src/services/TransformationService.js +29 -17
- package/dist/src/services/TransformationService.js.map +1 -1
- package/dist/src/services/TransformationService.types.d.ts +74 -0
- package/dist/src/services/TransformationService.types.d.ts.map +1 -0
- package/dist/src/services/TransformationService.types.js +8 -0
- package/dist/src/services/TransformationService.types.js.map +1 -0
- package/dist/src/services/__tests__/SubagentGenerator.client-profiles.test.d.ts +5 -0
- package/dist/src/services/__tests__/SubagentGenerator.client-profiles.test.d.ts.map +1 -0
- package/dist/src/services/__tests__/SubagentGenerator.client-profiles.test.js +72 -0
- package/dist/src/services/__tests__/SubagentGenerator.client-profiles.test.js.map +1 -0
- package/dist/src/services/__tests__/SubagentGenerator.helpers.test.d.ts +2 -0
- package/dist/src/services/__tests__/SubagentGenerator.helpers.test.d.ts.map +1 -0
- package/dist/src/services/__tests__/SubagentGenerator.helpers.test.js +61 -0
- package/dist/src/services/__tests__/SubagentGenerator.helpers.test.js.map +1 -0
- package/dist/src/services/__tests__/SubagentGenerator.test.js +155 -0
- package/dist/src/services/__tests__/SubagentGenerator.test.js.map +1 -1
- package/dist/src/services/__tests__/TransformationService.test.js +48 -0
- package/dist/src/services/__tests__/TransformationService.test.js.map +1 -1
- package/dist/src/services/agent-pack/agent-pack.test.js +1 -0
- package/dist/src/services/agent-pack/agent-pack.test.js.map +1 -1
- package/dist/src/services/agent-pack/prompt-source.d.ts +1 -1
- package/dist/src/services/agent-pack/prompt-source.d.ts.map +1 -1
- package/dist/src/services/agent-pack/prompt-source.js +10 -3
- package/dist/src/services/agent-pack/prompt-source.js.map +1 -1
- package/dist/src/services/agent-pack/types.d.ts +26 -2
- package/dist/src/services/agent-pack/types.d.ts.map +1 -1
- package/dist/src/services/agent-pack/types.js +13 -0
- package/dist/src/services/agent-pack/types.js.map +1 -1
- package/dist/src/services/agent-tool-profile.d.ts.map +1 -1
- package/dist/src/services/agent-tool-profile.js +7 -0
- package/dist/src/services/agent-tool-profile.js.map +1 -1
- package/dist/src/services/agent-tool-profile.test.js +2 -2
- package/dist/src/services/skill-content-comparison.d.ts +71 -0
- package/dist/src/services/skill-content-comparison.d.ts.map +1 -0
- package/dist/src/services/skill-content-comparison.js +90 -0
- package/dist/src/services/skill-content-comparison.js.map +1 -0
- package/dist/src/services/skill-content-comparison.test.d.ts +6 -0
- package/dist/src/services/skill-content-comparison.test.d.ts.map +1 -0
- package/dist/src/services/skill-content-comparison.test.js +83 -0
- package/dist/src/services/skill-content-comparison.test.js.map +1 -0
- package/dist/src/services/skill-identity-classification.d.ts +202 -0
- package/dist/src/services/skill-identity-classification.d.ts.map +1 -0
- package/dist/src/services/skill-identity-classification.js +295 -0
- package/dist/src/services/skill-identity-classification.js.map +1 -0
- package/dist/src/services/skill-identity-classification.test.d.ts +6 -0
- package/dist/src/services/skill-identity-classification.test.d.ts.map +1 -0
- package/dist/src/services/skill-identity-classification.test.js +314 -0
- package/dist/src/services/skill-identity-classification.test.js.map +1 -0
- package/dist/src/services/skill-installation.content.d.ts.map +1 -1
- package/dist/src/services/skill-installation.content.js +6 -1
- package/dist/src/services/skill-installation.content.js.map +1 -1
- package/dist/src/services/skill-installation.helpers.d.ts +8 -15
- package/dist/src/services/skill-installation.helpers.d.ts.map +1 -1
- package/dist/src/services/skill-installation.helpers.js +11 -105
- package/dist/src/services/skill-installation.helpers.js.map +1 -1
- package/dist/src/services/skill-installation.helpers.test.js +106 -1
- package/dist/src/services/skill-installation.helpers.test.js.map +1 -1
- package/dist/src/services/skill-installation.service.js +1 -1
- package/dist/src/services/skill-installation.service.js.map +1 -1
- package/dist/src/services/skill-installation.types.d.ts +33 -0
- package/dist/src/services/skill-installation.types.d.ts.map +1 -1
- package/dist/src/services/skill-installation.types.js.map +1 -1
- package/dist/src/services/skill-installation.uninstall.d.ts +84 -0
- package/dist/src/services/skill-installation.uninstall.d.ts.map +1 -0
- package/dist/src/services/skill-installation.uninstall.js +252 -0
- package/dist/src/services/skill-installation.uninstall.js.map +1 -0
- package/dist/src/services/skill-manifest.d.ts +41 -0
- package/dist/src/services/skill-manifest.d.ts.map +1 -1
- package/dist/src/services/skill-manifest.js +93 -0
- package/dist/src/services/skill-manifest.js.map +1 -1
- package/dist/src/services/skill-manifest.test.js +27 -0
- package/dist/src/services/skill-manifest.test.js.map +1 -1
- package/dist/src/sync/SyncEngine.d.ts.map +1 -1
- package/dist/src/sync/SyncEngine.js +69 -77
- package/dist/src/sync/SyncEngine.js.map +1 -1
- package/dist/src/telemetry/agent-marker.d.ts +8 -0
- package/dist/src/telemetry/agent-marker.d.ts.map +1 -1
- package/dist/src/telemetry/agent-marker.js +7 -0
- package/dist/src/telemetry/agent-marker.js.map +1 -1
- package/dist/src/telemetry/agent-marker.test.js +7 -1
- package/dist/src/telemetry/agent-marker.test.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +1 -1
- package/dist/src/telemetry/index.d.ts.map +1 -1
- package/dist/src/telemetry/index.js +1 -1
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/wrap.d.ts +6 -0
- package/dist/src/telemetry/wrap.d.ts.map +1 -1
- package/dist/src/telemetry/wrap.js +65 -10
- package/dist/src/telemetry/wrap.js.map +1 -1
- package/dist/src/telemetry/wrap.test.js +81 -1
- package/dist/src/telemetry/wrap.test.js.map +1 -1
- package/dist/src/telemetry/wrap.tool-call-sink.test.d.ts +26 -0
- package/dist/src/telemetry/wrap.tool-call-sink.test.d.ts.map +1 -0
- package/dist/src/telemetry/wrap.tool-call-sink.test.js +162 -0
- package/dist/src/telemetry/wrap.tool-call-sink.test.js.map +1 -0
- package/dist/src/types/skill.d.ts +9 -1
- package/dist/src/types/skill.d.ts.map +1 -1
- package/dist/src/utils/index.d.ts +2 -1
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +3 -1
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/utils/skill-name.d.ts +19 -0
- package/dist/src/utils/skill-name.d.ts.map +1 -0
- package/dist/src/utils/skill-name.js +26 -0
- package/dist/src/utils/skill-name.js.map +1 -0
- package/dist/src/utils/skill-name.test.d.ts +2 -0
- package/dist/src/utils/skill-name.test.d.ts.map +1 -0
- package/dist/src/utils/skill-name.test.js +34 -0
- package/dist/src/utils/skill-name.test.js.map +1 -0
- package/dist/src/utils/version-check.d.ts +61 -0
- package/dist/src/utils/version-check.d.ts.map +1 -1
- package/dist/src/utils/version-check.js +78 -1
- package/dist/src/utils/version-check.js.map +1 -1
- package/dist/src/utils/version-check.test.js +130 -1
- package/dist/src/utils/version-check.test.js.map +1 -1
- package/dist/tests/db/migration-runner-race.test.js +19 -9
- package/dist/tests/db/migration-runner-race.test.js.map +1 -1
- package/dist/tests/install/fan-out.test.js +27 -0
- package/dist/tests/install/fan-out.test.js.map +1 -1
- package/dist/tests/security/ContinuousSecurity.performance.test.js +12 -7
- package/dist/tests/security/ContinuousSecurity.performance.test.js.map +1 -1
- package/dist/tests/security/ContinuousSecurity.test.js +14 -2
- package/dist/tests/security/ContinuousSecurity.test.js.map +1 -1
- package/dist/tests/security/ai-defence-multiline-promotion.test.d.ts +10 -12
- package/dist/tests/security/ai-defence-multiline-promotion.test.d.ts.map +1 -1
- package/dist/tests/security/ai-defence-multiline-promotion.test.js +26 -33
- package/dist/tests/security/ai-defence-multiline-promotion.test.js.map +1 -1
- package/dist/tests/security/nested-instruction-long-attribute.test.js +20 -10
- package/dist/tests/security/nested-instruction-long-attribute.test.js.map +1 -1
- package/dist/tests/security/scanner-evidence-tiers.test.js +15 -0
- package/dist/tests/security/scanner-evidence-tiers.test.js.map +1 -1
- package/dist/tests/security/scanner-multiline-cap.test.d.ts +21 -0
- package/dist/tests/security/scanner-multiline-cap.test.d.ts.map +1 -0
- package/dist/tests/security/scanner-multiline-cap.test.js +152 -0
- package/dist/tests/security/scanner-multiline-cap.test.js.map +1 -0
- package/dist/tests/security/scanner-regression-guard.test.js +37 -0
- package/dist/tests/security/scanner-regression-guard.test.js.map +1 -1
- package/dist/tests/security/scanner-witness-sw1.test.d.ts +32 -0
- package/dist/tests/security/scanner-witness-sw1.test.d.ts.map +1 -0
- package/dist/tests/security/scanner-witness-sw1.test.js +255 -0
- package/dist/tests/security/scanner-witness-sw1.test.js.map +1 -0
- package/dist/tests/security/sensitive-path-adversarial-review.test.d.ts +2 -0
- package/dist/tests/security/sensitive-path-adversarial-review.test.d.ts.map +1 -0
- package/dist/tests/security/sensitive-path-adversarial-review.test.js +193 -0
- package/dist/tests/security/sensitive-path-adversarial-review.test.js.map +1 -0
- package/dist/tests/security/sensitive-path-fp.test.js +248 -0
- package/dist/tests/security/sensitive-path-fp.test.js.map +1 -1
- package/dist/tests/security/smi5879-corroboration.core.test.js +44 -0
- package/dist/tests/security/smi5879-corroboration.core.test.js.map +1 -1
- package/dist/tests/security/weak-password-lexicon.test.d.ts +18 -0
- package/dist/tests/security/weak-password-lexicon.test.d.ts.map +1 -0
- package/dist/tests/security/weak-password-lexicon.test.js +122 -0
- package/dist/tests/security/weak-password-lexicon.test.js.map +1 -0
- package/dist/tests/skill-scanner/allowlist.test.js +58 -4
- package/dist/tests/skill-scanner/allowlist.test.js.map +1 -1
- package/dist/tests/skill-scanner/categorizer.test.d.ts +2 -0
- package/dist/tests/skill-scanner/categorizer.test.d.ts.map +1 -0
- package/dist/tests/skill-scanner/categorizer.test.js +71 -0
- package/dist/tests/skill-scanner/categorizer.test.js.map +1 -0
- package/dist/tests/skill-scanner/cli-guard.test.d.ts +23 -0
- package/dist/tests/skill-scanner/cli-guard.test.d.ts.map +1 -0
- package/dist/tests/skill-scanner/cli-guard.test.js +71 -0
- package/dist/tests/skill-scanner/cli-guard.test.js.map +1 -0
- package/dist/tests/sync/SyncEngine.abort.test.js +15 -11
- package/dist/tests/sync/SyncEngine.abort.test.js.map +1 -1
- package/dist/tests/sync/SyncEngine.status.test.js +1 -1
- package/dist/tests/sync/SyncEngine.status.test.js.map +1 -1
- package/dist/tests/sync/SyncEngine.test.d.ts +11 -2
- package/dist/tests/sync/SyncEngine.test.d.ts.map +1 -1
- package/dist/tests/sync/SyncEngine.test.js +164 -13
- package/dist/tests/sync/SyncEngine.test.js.map +1 -1
- package/dist/tests/unit/migrations/migration-v18.test.d.ts +16 -0
- package/dist/tests/unit/migrations/migration-v18.test.d.ts.map +1 -0
- package/dist/tests/unit/migrations/migration-v18.test.js +192 -0
- package/dist/tests/unit/migrations/migration-v18.test.js.map +1 -0
- package/dist/tests/unit/services/skill-installation.content.test.js +101 -1
- package/dist/tests/unit/services/skill-installation.content.test.js.map +1 -1
- package/dist/tests/unit/services/skill-installation.service.sensitive-path-fp.test.d.ts +29 -0
- package/dist/tests/unit/services/skill-installation.service.sensitive-path-fp.test.d.ts.map +1 -0
- package/dist/tests/unit/services/skill-installation.service.sensitive-path-fp.test.js +200 -0
- package/dist/tests/unit/services/skill-installation.service.sensitive-path-fp.test.js.map +1 -0
- package/dist/tests/unit/services/skill-installation.service.test.js +9 -8
- package/dist/tests/unit/services/skill-installation.service.test.js.map +1 -1
- package/dist/tests/unit/sync-engine.source-aware.test.js +5 -5
- package/dist/tests/unit/sync-engine.source-aware.test.js.map +1 -1
- package/package.json +7 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-pack-installer.cursor-mcp.js","sourceRoot":"","sources":["../../../src/install/agent-pack-installer.cursor-mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-pack-installer.cursor-mcp.test.d.ts","sourceRoot":"","sources":["../../../src/install/agent-pack-installer.cursor-mcp.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cursor `mcp.json` entry-shape + key-alignment regression coverage
|
|
3
|
+
* (SMI-6279 Wave 9, GH#2368 V3).
|
|
4
|
+
*
|
|
5
|
+
* Split from agent-pack-installer.test.ts, mirroring the existing
|
|
6
|
+
* agent-pack-installer.cursor-hooks.test.ts split (same temp-HOME +
|
|
7
|
+
* manifest-env fixture shape). Covers the two independent things
|
|
8
|
+
* `agent-pack-installer.cursor-mcp.ts` fixes:
|
|
9
|
+
* 1. Entry SHAPE: a resolved `skillsmith-mcp` binary path (or the
|
|
10
|
+
* documented paste-here placeholder when resolution fails) instead of
|
|
11
|
+
* the `npx`/`args` form two live UAT passes proved ENOENTs inside
|
|
12
|
+
* Cursor's bundled Node, plus `SKILLSMITH_CLIENT=cursor`.
|
|
13
|
+
* 2. Entry KEY: `@skillsmith/mcp-server` (matching the website/CLI docs
|
|
14
|
+
* snippet) instead of `skillsmith`, with a legacy-key cleanup step for
|
|
15
|
+
* a pre-fix install that still has the old key.
|
|
16
|
+
*
|
|
17
|
+
* `node:child_process`'s `execFileSync` is mocked so `resolveSkillsmithMcpBinPath`
|
|
18
|
+
* never depends on whether `skillsmith-mcp` happens to be on the test
|
|
19
|
+
* runner's real PATH.
|
|
20
|
+
*
|
|
21
|
+
* @module @skillsmith/core/install/agent-pack-installer.cursor-mcp.test
|
|
22
|
+
*/
|
|
23
|
+
import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
24
|
+
import { tmpdir } from 'node:os';
|
|
25
|
+
import { join } from 'node:path';
|
|
26
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
27
|
+
const { execFileSyncMock } = vi.hoisted(() => ({ execFileSyncMock: vi.fn() }));
|
|
28
|
+
vi.mock('node:child_process', async (importOriginal) => {
|
|
29
|
+
const actual = await importOriginal();
|
|
30
|
+
return { ...actual, execFileSync: execFileSyncMock };
|
|
31
|
+
});
|
|
32
|
+
// Defaults to the real writeFileSync so every test in this file gets real
|
|
33
|
+
// disk writes unmodified; only the one PR-07-regression test below swaps in
|
|
34
|
+
// a conditional throw, keyed by path so it can't accidentally intercept the
|
|
35
|
+
// unrelated skill-pack-file writes installAgentPack also performs in the
|
|
36
|
+
// same run (confirmed necessary: a naive call-order-based override fired on
|
|
37
|
+
// one of those instead, on the first pass at writing this test).
|
|
38
|
+
const { writeFileSyncMock, realWriteFileSyncRef } = vi.hoisted(() => ({
|
|
39
|
+
writeFileSyncMock: vi.fn(),
|
|
40
|
+
realWriteFileSyncRef: { current: null },
|
|
41
|
+
}));
|
|
42
|
+
vi.mock('node:fs', async (importOriginal) => {
|
|
43
|
+
const actual = await importOriginal();
|
|
44
|
+
realWriteFileSyncRef.current = actual.writeFileSync;
|
|
45
|
+
writeFileSyncMock.mockImplementation(actual.writeFileSync);
|
|
46
|
+
return { ...actual, writeFileSync: writeFileSyncMock };
|
|
47
|
+
});
|
|
48
|
+
import { installAgentPack } from './agent-pack-installer.js';
|
|
49
|
+
import { AGENT_INSTALL_DIR_ENV_VAR } from './agent-manifest.js';
|
|
50
|
+
let homeDir;
|
|
51
|
+
let manifestDir;
|
|
52
|
+
let prevInstallDirEnv;
|
|
53
|
+
const RESOLVED_BIN_PATH = '/usr/local/bin/skillsmith-mcp';
|
|
54
|
+
function mcpJsonPath(home) {
|
|
55
|
+
return join(home, '.cursor', 'mcp.json');
|
|
56
|
+
}
|
|
57
|
+
function readCursorMcpJson(home) {
|
|
58
|
+
return JSON.parse(readFileSync(mcpJsonPath(home), 'utf-8'));
|
|
59
|
+
}
|
|
60
|
+
function seedCursorPresent() {
|
|
61
|
+
mkdirSync(join(homeDir, '.cursor', 'skills'), { recursive: true });
|
|
62
|
+
}
|
|
63
|
+
beforeEach(() => {
|
|
64
|
+
homeDir = mkdtempSync(join(tmpdir(), 'skillsmith-agent-install-home-'));
|
|
65
|
+
manifestDir = mkdtempSync(join(tmpdir(), 'skillsmith-agent-install-manifest-'));
|
|
66
|
+
prevInstallDirEnv = process.env[AGENT_INSTALL_DIR_ENV_VAR];
|
|
67
|
+
process.env[AGENT_INSTALL_DIR_ENV_VAR] = manifestDir;
|
|
68
|
+
execFileSyncMock.mockReset();
|
|
69
|
+
// Reset to the real passthrough (see the vi.mock('node:fs', ...) setup
|
|
70
|
+
// above) in case a prior test overrode it to simulate a write failure.
|
|
71
|
+
writeFileSyncMock.mockClear();
|
|
72
|
+
});
|
|
73
|
+
afterEach(() => {
|
|
74
|
+
rmSync(homeDir, { recursive: true, force: true });
|
|
75
|
+
rmSync(manifestDir, { recursive: true, force: true });
|
|
76
|
+
if (prevInstallDirEnv !== undefined)
|
|
77
|
+
process.env[AGENT_INSTALL_DIR_ENV_VAR] = prevInstallDirEnv;
|
|
78
|
+
else
|
|
79
|
+
delete process.env[AGENT_INSTALL_DIR_ENV_VAR];
|
|
80
|
+
vi.restoreAllMocks();
|
|
81
|
+
});
|
|
82
|
+
describe('installAgentPack — cursor mcp.json entry shape (SMI-6279 Wave 9)', () => {
|
|
83
|
+
it('writes the entry under the @skillsmith/mcp-server key with a resolved binary path + SKILLSMITH_CLIENT=cursor', () => {
|
|
84
|
+
execFileSyncMock.mockReturnValue(`${RESOLVED_BIN_PATH}\n`);
|
|
85
|
+
seedCursorPresent();
|
|
86
|
+
const result = installAgentPack({ homeDir });
|
|
87
|
+
const doc = readCursorMcpJson(homeDir);
|
|
88
|
+
const entry = doc.mcpServers['@skillsmith/mcp-server'];
|
|
89
|
+
expect(entry?.command).toBe(RESOLVED_BIN_PATH);
|
|
90
|
+
expect(entry?.env?.SKILLSMITH_CLIENT).toBe('cursor');
|
|
91
|
+
expect(entry?.env?.SKILLSMITH_TOOL_PROFILE).toBe('agent');
|
|
92
|
+
// No `args` — unlike the broken npx form, Cursor's entry invokes the
|
|
93
|
+
// resolved binary directly.
|
|
94
|
+
expect(entry?.args).toBeUndefined();
|
|
95
|
+
// No stray legacy key on a first-ever install.
|
|
96
|
+
expect(doc.mcpServers.skillsmith).toBeUndefined();
|
|
97
|
+
const report = result.harnessReports.find((r) => r.harness === 'cursor');
|
|
98
|
+
expect(report?.mcpConfig?.status).toBe('created');
|
|
99
|
+
});
|
|
100
|
+
it('falls back to the documented paste-here placeholder when the binary cannot be resolved', () => {
|
|
101
|
+
execFileSyncMock.mockImplementation(() => {
|
|
102
|
+
throw new Error('not found');
|
|
103
|
+
});
|
|
104
|
+
seedCursorPresent();
|
|
105
|
+
installAgentPack({ homeDir });
|
|
106
|
+
const doc = readCursorMcpJson(homeDir);
|
|
107
|
+
const entry = doc.mcpServers['@skillsmith/mcp-server'];
|
|
108
|
+
expect(entry?.command).toContain('which skillsmith-mcp');
|
|
109
|
+
expect(entry?.command).toContain('where skillsmith-mcp');
|
|
110
|
+
});
|
|
111
|
+
it('falls back to the placeholder (never hangs) when the which/where lookup times out — code-review finding, GPT-5.6-Sol / SMI-6279', () => {
|
|
112
|
+
// execFileSync throws a synchronous ETIMEDOUT-shaped error when its own
|
|
113
|
+
// `timeout` option elapses — the existing blanket catch already handles
|
|
114
|
+
// this the same as "not found", so simulating that error is sufficient
|
|
115
|
+
// to prove the timeout-case fallback without an actual hung process.
|
|
116
|
+
const timeoutError = Object.assign(new Error('spawnSync which ETIMEDOUT'), {
|
|
117
|
+
code: 'ETIMEDOUT',
|
|
118
|
+
killed: true,
|
|
119
|
+
signal: 'SIGTERM',
|
|
120
|
+
});
|
|
121
|
+
execFileSyncMock.mockImplementation(() => {
|
|
122
|
+
throw timeoutError;
|
|
123
|
+
});
|
|
124
|
+
seedCursorPresent();
|
|
125
|
+
installAgentPack({ homeDir });
|
|
126
|
+
const doc = readCursorMcpJson(homeDir);
|
|
127
|
+
const entry = doc.mcpServers['@skillsmith/mcp-server'];
|
|
128
|
+
expect(entry?.command).toContain('which skillsmith-mcp');
|
|
129
|
+
// And the bound is actually wired to the real execFileSync call, not
|
|
130
|
+
// just documented — a `timeout` option keeps a hung/substituted
|
|
131
|
+
// which/where from blocking `agent install` indefinitely.
|
|
132
|
+
expect(execFileSyncMock).toHaveBeenCalledWith(expect.any(String), ['skillsmith-mcp'], expect.objectContaining({ timeout: expect.any(Number) }));
|
|
133
|
+
const [, , options] = execFileSyncMock.mock.calls[0];
|
|
134
|
+
expect(options.timeout).toBeGreaterThan(0);
|
|
135
|
+
// A few seconds is plenty for a local PATH lookup — not a network call.
|
|
136
|
+
expect(options.timeout).toBeLessThanOrEqual(5000);
|
|
137
|
+
});
|
|
138
|
+
it('does not regress claude-code’s own entry — still the npx form under the "skillsmith" key', () => {
|
|
139
|
+
execFileSyncMock.mockReturnValue(`${RESOLVED_BIN_PATH}\n`);
|
|
140
|
+
seedCursorPresent();
|
|
141
|
+
installAgentPack({ homeDir });
|
|
142
|
+
const claudeDoc = JSON.parse(readFileSync(join(homeDir, '.claude', 'settings.json'), 'utf-8'));
|
|
143
|
+
expect(claudeDoc.mcpServers.skillsmith?.command).toBe('npx');
|
|
144
|
+
expect(claudeDoc.mcpServers.skillsmith?.env?.SKILLSMITH_TOOL_PROFILE).toBe('agent');
|
|
145
|
+
expect(claudeDoc.mcpServers.skillsmith?.env?.SKILLSMITH_CLIENT).toBeUndefined();
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
describe('installAgentPack — cursor mcp.json idempotency (SMI-6279 Wave 9)', () => {
|
|
149
|
+
it('re-install does not create a duplicate second server entry', () => {
|
|
150
|
+
execFileSyncMock.mockReturnValue(`${RESOLVED_BIN_PATH}\n`);
|
|
151
|
+
seedCursorPresent();
|
|
152
|
+
installAgentPack({ homeDir });
|
|
153
|
+
const second = installAgentPack({ homeDir });
|
|
154
|
+
const doc = readCursorMcpJson(homeDir);
|
|
155
|
+
expect(Object.keys(doc.mcpServers)).toEqual(['@skillsmith/mcp-server']);
|
|
156
|
+
const report = second.harnessReports.find((r) => r.harness === 'cursor');
|
|
157
|
+
expect(report?.mcpConfig?.status).toBe('unchanged');
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
describe('installAgentPack — cursor mcp.json stale legacy-key cleanup (SMI-6279 Wave 9)', () => {
|
|
161
|
+
it('removes a stale "skillsmith"-keyed entry from a pre-fix install, leaving exactly one entry', () => {
|
|
162
|
+
execFileSyncMock.mockReturnValue(`${RESOLVED_BIN_PATH}\n`);
|
|
163
|
+
seedCursorPresent();
|
|
164
|
+
writeFileSync(mcpJsonPath(homeDir), JSON.stringify({
|
|
165
|
+
mcpServers: {
|
|
166
|
+
skillsmith: {
|
|
167
|
+
command: 'npx',
|
|
168
|
+
args: ['-y', '@skillsmith/mcp-server'],
|
|
169
|
+
env: { SKILLSMITH_TOOL_PROFILE: 'agent' },
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
}, null, 2));
|
|
173
|
+
installAgentPack({ homeDir });
|
|
174
|
+
const doc = readCursorMcpJson(homeDir);
|
|
175
|
+
expect(doc.mcpServers.skillsmith).toBeUndefined();
|
|
176
|
+
expect(doc.mcpServers['@skillsmith/mcp-server']?.command).toBe(RESOLVED_BIN_PATH);
|
|
177
|
+
expect(Object.keys(doc.mcpServers)).toEqual(['@skillsmith/mcp-server']);
|
|
178
|
+
});
|
|
179
|
+
it('preserves a foreign entry under the legacy "skillsmith" key — never deletes a user-owned unrelated entry', () => {
|
|
180
|
+
execFileSyncMock.mockReturnValue(`${RESOLVED_BIN_PATH}\n`);
|
|
181
|
+
seedCursorPresent();
|
|
182
|
+
const foreignEntry = { command: 'some-other-tool', args: ['--flag'] };
|
|
183
|
+
writeFileSync(mcpJsonPath(homeDir), JSON.stringify({ mcpServers: { skillsmith: foreignEntry } }, null, 2));
|
|
184
|
+
installAgentPack({ homeDir });
|
|
185
|
+
const doc = readCursorMcpJson(homeDir);
|
|
186
|
+
expect(doc.mcpServers.skillsmith).toEqual(foreignEntry);
|
|
187
|
+
expect(doc.mcpServers['@skillsmith/mcp-server']?.command).toBe(RESOLVED_BIN_PATH);
|
|
188
|
+
});
|
|
189
|
+
it('preserves a near-miss entry that references the package name in an extra description field (code-review finding, GPT-5.6-Sol / SMI-6279)', () => {
|
|
190
|
+
execFileSyncMock.mockReturnValue(`${RESOLVED_BIN_PATH}\n`);
|
|
191
|
+
seedCursorPresent();
|
|
192
|
+
// Structurally close to our own legacy shape (same command/args/env
|
|
193
|
+
// value) but NOT byte-identical — one extra key. The old loose
|
|
194
|
+
// `looksLikeOurMcpEntry` heuristic (substring-matches args, checks only
|
|
195
|
+
// key presence) would have matched this and deleted it; the tightened
|
|
196
|
+
// exact-shape check must not.
|
|
197
|
+
const nearMissEntry = {
|
|
198
|
+
command: 'npx',
|
|
199
|
+
args: ['-y', '@skillsmith/mcp-server'],
|
|
200
|
+
env: { SKILLSMITH_TOOL_PROFILE: 'agent' },
|
|
201
|
+
description: 'Custom wrapper — see @skillsmith/mcp-server docs for context',
|
|
202
|
+
};
|
|
203
|
+
writeFileSync(mcpJsonPath(homeDir), JSON.stringify({ mcpServers: { skillsmith: nearMissEntry } }, null, 2));
|
|
204
|
+
installAgentPack({ homeDir });
|
|
205
|
+
const doc = readCursorMcpJson(homeDir);
|
|
206
|
+
expect(doc.mcpServers.skillsmith).toEqual(nearMissEntry);
|
|
207
|
+
expect(doc.mcpServers['@skillsmith/mcp-server']?.command).toBe(RESOLVED_BIN_PATH);
|
|
208
|
+
});
|
|
209
|
+
it('preserves a near-miss "skillsmith"-keyed entry whose SKILLSMITH_TOOL_PROFILE value differs from what we would have written (code-review finding, GPT-5.6-Sol / SMI-6279)', () => {
|
|
210
|
+
execFileSyncMock.mockReturnValue(`${RESOLVED_BIN_PATH}\n`);
|
|
211
|
+
seedCursorPresent();
|
|
212
|
+
// Same command/args/key SET as our legacy shape, but a different env
|
|
213
|
+
// VALUE — the old loose heuristic only checked key presence, not value,
|
|
214
|
+
// and would have matched+deleted this too.
|
|
215
|
+
const nearMissEntry = {
|
|
216
|
+
command: 'npx',
|
|
217
|
+
args: ['-y', '@skillsmith/mcp-server'],
|
|
218
|
+
env: { SKILLSMITH_TOOL_PROFILE: 'debug' },
|
|
219
|
+
};
|
|
220
|
+
writeFileSync(mcpJsonPath(homeDir), JSON.stringify({ mcpServers: { skillsmith: nearMissEntry } }, null, 2));
|
|
221
|
+
installAgentPack({ homeDir });
|
|
222
|
+
const doc = readCursorMcpJson(homeDir);
|
|
223
|
+
expect(doc.mcpServers.skillsmith).toEqual(nearMissEntry);
|
|
224
|
+
expect(doc.mcpServers['@skillsmith/mcp-server']?.command).toBe(RESOLVED_BIN_PATH);
|
|
225
|
+
});
|
|
226
|
+
it('is idempotent: a second install run on an already-migrated file makes no further legacy-key change', () => {
|
|
227
|
+
execFileSyncMock.mockReturnValue(`${RESOLVED_BIN_PATH}\n`);
|
|
228
|
+
seedCursorPresent();
|
|
229
|
+
writeFileSync(mcpJsonPath(homeDir), JSON.stringify({
|
|
230
|
+
mcpServers: {
|
|
231
|
+
skillsmith: {
|
|
232
|
+
command: 'npx',
|
|
233
|
+
args: ['-y', '@skillsmith/mcp-server'],
|
|
234
|
+
env: { SKILLSMITH_TOOL_PROFILE: 'agent' },
|
|
235
|
+
},
|
|
236
|
+
},
|
|
237
|
+
}, null, 2));
|
|
238
|
+
installAgentPack({ homeDir }); // first run: writes the new key, cleans the legacy one
|
|
239
|
+
const afterFirst = readFileSync(mcpJsonPath(homeDir), 'utf-8');
|
|
240
|
+
const second = installAgentPack({ homeDir }); // second run: nothing left to clean
|
|
241
|
+
const afterSecond = readFileSync(mcpJsonPath(homeDir), 'utf-8');
|
|
242
|
+
expect(afterSecond).toBe(afterFirst);
|
|
243
|
+
const report = second.harnessReports.find((r) => r.harness === 'cursor');
|
|
244
|
+
expect(report?.mcpConfig?.status).toBe('unchanged');
|
|
245
|
+
});
|
|
246
|
+
it('reports a cleanup write failure via report.notes instead of swallowing it as "nothing to clean up" (PR-07 finding, GPT-5.6-Sol / SMI-6279)', () => {
|
|
247
|
+
execFileSyncMock.mockReturnValue(`${RESOLVED_BIN_PATH}\n`);
|
|
248
|
+
seedCursorPresent();
|
|
249
|
+
// Seed BOTH the already-correct new entry and the stale legacy entry, so
|
|
250
|
+
// the main merge sees 'unchanged' (no write attempted there) and only
|
|
251
|
+
// the cleanup step's own write is exercised below.
|
|
252
|
+
writeFileSync(mcpJsonPath(homeDir), JSON.stringify({
|
|
253
|
+
mcpServers: {
|
|
254
|
+
skillsmith: {
|
|
255
|
+
command: 'npx',
|
|
256
|
+
args: ['-y', '@skillsmith/mcp-server'],
|
|
257
|
+
env: { SKILLSMITH_TOOL_PROFILE: 'agent' },
|
|
258
|
+
},
|
|
259
|
+
'@skillsmith/mcp-server': {
|
|
260
|
+
command: RESOLVED_BIN_PATH,
|
|
261
|
+
env: { SKILLSMITH_TOOL_PROFILE: 'agent', SKILLSMITH_CLIENT: 'cursor' },
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
}, null, 2));
|
|
265
|
+
// Target only the cleanup's write to THIS file — installAgentPack also
|
|
266
|
+
// writes several unrelated skill-pack files earlier in the same run, and
|
|
267
|
+
// must keep writing those for real.
|
|
268
|
+
const targetPath = mcpJsonPath(homeDir);
|
|
269
|
+
writeFileSyncMock.mockImplementation((...args) => {
|
|
270
|
+
if (args[0] === targetPath) {
|
|
271
|
+
throw new Error('EACCES: permission denied (simulated)');
|
|
272
|
+
}
|
|
273
|
+
return realWriteFileSyncRef.current(...args);
|
|
274
|
+
});
|
|
275
|
+
const result = installAgentPack({ homeDir });
|
|
276
|
+
// The legacy key must still be on disk — the failed write must not have
|
|
277
|
+
// corrupted or partially applied the delete.
|
|
278
|
+
const doc = readCursorMcpJson(homeDir);
|
|
279
|
+
expect(doc.mcpServers.skillsmith).toBeDefined();
|
|
280
|
+
const report = result.harnessReports.find((r) => r.harness === 'cursor');
|
|
281
|
+
expect(report?.notes.some((n) => n.includes('could not remove it'))).toBe(true);
|
|
282
|
+
expect(report?.notes.some((n) => n.includes('EACCES'))).toBe(true);
|
|
283
|
+
});
|
|
284
|
+
});
|
|
285
|
+
//# sourceMappingURL=agent-pack-installer.cursor-mcp.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-pack-installer.cursor-mcp.test.js","sourceRoot":"","sources":["../../../src/install/agent-pack-installer.cursor-mcp.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,14 @@
|
|
|
24
24
|
* - The `skillsmith` MCP server registration (`SKILLSMITH_TOOL_PROFILE=agent`)
|
|
25
25
|
* for every detected MCP-capable harness (all 7), backup-first,
|
|
26
26
|
* idempotent, preserve-and-prompt on a foreign entry.
|
|
27
|
+
* - AntiGravity (SMI-6275 Wave 5): a workspace-scoped 8th target, handled
|
|
28
|
+
* OUTSIDE the 7-harness loop above — see the `antigravity` block near
|
|
29
|
+
* the end of `installAgentPack`. Whenever its workspace scope resolves
|
|
30
|
+
* (an existing `.agents/` marker auto-detects, or `--scope workspace`
|
|
31
|
+
* creates one), writes the skill pack AND `.agents/mcp_config.json`
|
|
32
|
+
* (`installAntigravityMcpConfig`, `agent-pack-installer.antigravity-mcp.ts`)
|
|
33
|
+
* — MCP config only, no hooks/shim this wave (stated decision, see
|
|
34
|
+
* `HOOK_HARNESSES`'s doc comment in `services/agent-pack/types.ts`).
|
|
27
35
|
*
|
|
28
36
|
* Every write funnels through `writeOwnedArtifactFile` (owned files) or the
|
|
29
37
|
* `agent-config-merge.*` helpers (shared config files), both of which record
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-pack-installer.d.ts","sourceRoot":"","sources":["../../../src/install/agent-pack-installer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"agent-pack-installer.d.ts","sourceRoot":"","sources":["../../../src/install/agent-pack-installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAYH,OAAO,EAGL,iBAAiB,EAGlB,MAAM,qBAAqB,CAAA;AAY5B,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAExB,MAAM,iCAAiC,CAAA;AA4FxC;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,mBAAwB,GAAG,kBAAkB,CA0NnF;AAGD,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
|
|
@@ -10,11 +10,97 @@
|
|
|
10
10
|
*/
|
|
11
11
|
/**
|
|
12
12
|
* The `skillsmith` MCP server registration value for `mcpServers`-convention
|
|
13
|
-
* harnesses (claude-code,
|
|
14
|
-
*
|
|
15
|
-
* {@link buildOpenCodeMcpEntryValue}.
|
|
13
|
+
* harnesses (claude-code, copilot, windsurf; hermes uses the same field
|
|
14
|
+
* names under YAML). OpenCode does NOT use this shape — see
|
|
15
|
+
* {@link buildOpenCodeMcpEntryValue}. Cursor ALSO does not use this shape —
|
|
16
|
+
* see {@link buildCursorMcpEntryValue} (SMI-6279 Wave 9): two independent
|
|
17
|
+
* live UAT passes proved the `npx`/`args` form here ENOENTs inside Cursor's
|
|
18
|
+
* bundled Node (GH#2368 C-01), which is why the website/CLI-template docs
|
|
19
|
+
* snippet was corrected to a resolved-binary-path form back in SMI-5893
|
|
20
|
+
* Wave 11 — this function stayed on the broken form for every OTHER
|
|
21
|
+
* harness it's still correct for, so it is deliberately left unchanged here.
|
|
16
22
|
*/
|
|
17
23
|
export declare function buildAgentMcpEntryValue(): Record<string, unknown>;
|
|
24
|
+
/**
|
|
25
|
+
* JSON key Cursor's MCP entry is installed under (SMI-6279 Wave 9).
|
|
26
|
+
*
|
|
27
|
+
* Every OTHER `mcpServers`-convention harness still uses the literal
|
|
28
|
+
* `'skillsmith'` key (hardcoded as `mergeJsonMcpEntry`'s default `entryKey`
|
|
29
|
+
* — deliberately NOT changed here, out of scope for this fix). Cursor is
|
|
30
|
+
* the one client with a human-facing docs snippet
|
|
31
|
+
* (`packages/website/src/lib/mcp-client-snippets.ts` /
|
|
32
|
+
* `packages/cli/src/templates/mcp-server.template.snippets.ts`) that tells a
|
|
33
|
+
* user to hand-paste an entry under the PACKAGE-scoped key
|
|
34
|
+
* `@skillsmith/mcp-server` instead — a mismatch that let a user who both
|
|
35
|
+
* pasted the docs snippet AND ran `sklx agent install` end up with two
|
|
36
|
+
* different server entries coexisting in the same `mcp.json`, neither ever
|
|
37
|
+
* recognized as "the other's" by the installer's own conflict-detection
|
|
38
|
+
* (which matches purely on key). Aligning the installer's key to the docs
|
|
39
|
+
* snippet's key here means a docs-paste and an `agent install` reconcile as
|
|
40
|
+
* ONE entry: either recognized as ours and updated in place, or correctly
|
|
41
|
+
* detected as foreign (conflict) and left alone — never silently
|
|
42
|
+
* duplicated. See `agent-pack-installer.cursor-mcp.ts` for the write path
|
|
43
|
+
* (including the legacy-key cleanup for a pre-fix install that still has
|
|
44
|
+
* the old `'skillsmith'`-keyed entry) and `version-check.ts`'s
|
|
45
|
+
* `checkCursorMcpArtifact` for the read-side (`skillsmith diagnose`) use.
|
|
46
|
+
*/
|
|
47
|
+
export declare const CURSOR_MCP_ENTRY_KEY = "@skillsmith/mcp-server";
|
|
48
|
+
/**
|
|
49
|
+
* The JSON key every pre-SMI-6279 `sklx agent install` run wrote Cursor's
|
|
50
|
+
* MCP entry under — kept as a named constant (not a bare literal) so the
|
|
51
|
+
* legacy-key cleanup step and the `diagnose` staleness check can both point
|
|
52
|
+
* at the exact same "this is the OLD key" definition instead of drifting.
|
|
53
|
+
*/
|
|
54
|
+
export declare const LEGACY_MCP_ENTRY_KEY = "skillsmith";
|
|
55
|
+
/**
|
|
56
|
+
* Placeholder command text shown when {@link resolveSkillsmithMcpBinPath}
|
|
57
|
+
* can't resolve a real path — byte-identical to the human-facing
|
|
58
|
+
* instruction already shipped in the website/CLI-template Cursor snippets
|
|
59
|
+
* (SMI-5893 Wave 11), so a user who runs `agent install` before the resolve
|
|
60
|
+
* step succeeds sees the exact same next action the docs already describe.
|
|
61
|
+
*/
|
|
62
|
+
export declare const CURSOR_MCP_COMMAND_PLACEHOLDER = "<paste output of: which skillsmith-mcp (macOS/Linux) or where skillsmith-mcp (Windows)>";
|
|
63
|
+
/**
|
|
64
|
+
* Resolve the on-disk path of the globally-installed `skillsmith-mcp`
|
|
65
|
+
* binary by shelling out to the exact command the docs already tell a
|
|
66
|
+
* human to run by hand — `which` on macOS/Linux, `where` on Windows
|
|
67
|
+
* (SMI-6279 Wave 9).
|
|
68
|
+
*
|
|
69
|
+
* There is no reliable programmatic equivalent that doesn't shell out:
|
|
70
|
+
* `@skillsmith/mcp-server` is a SEPARATE npm package from `@skillsmith/cli`
|
|
71
|
+
* (the package this code runs inside of) and is commonly NOT installed yet
|
|
72
|
+
* when `agent install` runs — it is a peer install the docs tell the user
|
|
73
|
+
* to do themselves (`npm install -g @skillsmith/mcp-server`). Node module
|
|
74
|
+
* resolution (`require.resolve`) only finds an already-installed package's
|
|
75
|
+
* importable entry point, not a DIFFERENT package's globally-linked `bin`
|
|
76
|
+
* symlink, and `process.execPath` is the Node binary running THIS process,
|
|
77
|
+
* not `skillsmith-mcp`'s location — neither is a substitute. `which`/`where`
|
|
78
|
+
* against the global npm bin directory (already on PATH for any shell the
|
|
79
|
+
* user installed from) is the SAME resolution the docs snippet instructs a
|
|
80
|
+
* human to do; this automates exactly that step rather than inventing a new
|
|
81
|
+
* one.
|
|
82
|
+
*
|
|
83
|
+
* Never throws and never hangs — returns `undefined` when the binary isn't
|
|
84
|
+
* found (an `agent install` run commonly happens BEFORE
|
|
85
|
+
* `@skillsmith/mcp-server` is installed; that is an expected outcome here,
|
|
86
|
+
* not an exceptional one) or when the lookup exceeds
|
|
87
|
+
* {@link BIN_RESOLVE_TIMEOUT_MS}.
|
|
88
|
+
*/
|
|
89
|
+
export declare function resolveSkillsmithMcpBinPath(): string | undefined;
|
|
90
|
+
/**
|
|
91
|
+
* Cursor's own MCP server registration value (SMI-6279 Wave 9) — structurally
|
|
92
|
+
* different from {@link buildAgentMcpEntryValue} in two ways confirmed
|
|
93
|
+
* broken by the GH#2368 V3 repro:
|
|
94
|
+
* 1. `command` is a resolved binary path (or the documented paste-here
|
|
95
|
+
* placeholder when resolution fails), never `npx` — two independent
|
|
96
|
+
* live UAT passes proved `npx` ENOENTs inside Cursor's bundled Node.
|
|
97
|
+
* 2. `env.SKILLSMITH_CLIENT` is always set to `'cursor'` — without it,
|
|
98
|
+
* Cursor installs silently land in the default `~/.claude/skills`
|
|
99
|
+
* instead of `~/.cursor/skills` (SMI-5894 Wave 1 Step 7).
|
|
100
|
+
* `SKILLSMITH_TOOL_PROFILE` is unchanged from the generic builder — this is
|
|
101
|
+
* still the curated agent-pack registration, not a general-purpose one.
|
|
102
|
+
*/
|
|
103
|
+
export declare function buildCursorMcpEntryValue(): Record<string, unknown>;
|
|
18
104
|
/**
|
|
19
105
|
* OpenCode's `mcp`-key entry value (Step-6 verified against
|
|
20
106
|
* opencode.ai/docs/mcp-servers/): entries are typed `local|remote`,
|
|
@@ -23,6 +109,37 @@ export declare function buildAgentMcpEntryValue(): Record<string, unknown>;
|
|
|
23
109
|
* would produce an entry OpenCode's config schema rejects.
|
|
24
110
|
*/
|
|
25
111
|
export declare function buildOpenCodeMcpEntryValue(): Record<string, unknown>;
|
|
112
|
+
/**
|
|
113
|
+
* AntiGravity's own MCP server registration value (SMI-6275 Wave 5).
|
|
114
|
+
*
|
|
115
|
+
* Unlike Cursor, there is no verified evidence of an `npx`-inside-bundled-Node
|
|
116
|
+
* failure for AntiGravity (Wave 7 of the SMI-6266 plan makes the same call
|
|
117
|
+
* for the website/CLI docs snippet) — so this stays on the plain `npx` form,
|
|
118
|
+
* composed directly over {@link buildAgentMcpEntryValue} rather than
|
|
119
|
+
* reimplementing it. The one addition is `env.SKILLSMITH_CLIENT = 'antigravity'`,
|
|
120
|
+
* for the same reason Cursor's builder sets it (SMI-5894 Wave 1 Step 7):
|
|
121
|
+
* without it, an MCP server spawned from THIS entry would default to
|
|
122
|
+
* `~/.claude/skills` (`resolveClientPath()`'s fallback) instead of
|
|
123
|
+
* AntiGravity's own directories.
|
|
124
|
+
*/
|
|
125
|
+
export declare function buildAntigravityMcpEntryValue(): Record<string, unknown>;
|
|
126
|
+
/**
|
|
127
|
+
* JSON key AntiGravity's `.agents/mcp_config.json` entry is installed under
|
|
128
|
+
* (SMI-6275 Wave 5) — deliberately the SAME value as {@link CURSOR_MCP_ENTRY_KEY},
|
|
129
|
+
* not the legacy `'skillsmith'` key every other non-Cursor harness's
|
|
130
|
+
* installer entry still uses. AntiGravity's OWN human-facing docs snippets
|
|
131
|
+
* (`packages/website/src/lib/mcp-client-snippets.ts`'s `STANDARD_JSON_BODY`
|
|
132
|
+
* and the CLI template's antigravity entry, both verified live 2026-08-30)
|
|
133
|
+
* already use the package-scoped key `@skillsmith/mcp-server` — aligning the
|
|
134
|
+
* installer's key here avoids the exact key-mismatch class of bug SMI-6279
|
|
135
|
+
* fixed for Cursor (a user who both pastes the docs snippet AND runs
|
|
136
|
+
* `agent install` ending up with two divergent, mutually-unrecognized
|
|
137
|
+
* entries). Unlike Cursor, AntiGravity has no PRE-EXISTING `agent install`
|
|
138
|
+
* writer to migrate away from — this is its first-ever implementation — so
|
|
139
|
+
* there is no legacy-keyed entry to clean up here (contrast
|
|
140
|
+
* `agent-pack-installer.cursor-mcp.ts`'s `stripStaleLegacyMcpKey`).
|
|
141
|
+
*/
|
|
142
|
+
export declare const ANTIGRAVITY_MCP_ENTRY_KEY = "@skillsmith/mcp-server";
|
|
26
143
|
/** Codex `[mcp_servers.skillsmith]` TOML block (text between our markers). */
|
|
27
144
|
export declare function buildCodexMcpTomlBlock(): string;
|
|
28
145
|
/** Regex matching a bare (non-marker-delimited) `[mcp_servers.skillsmith]` table header. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-pack-installer.entry.d.ts","sourceRoot":"","sources":["../../../src/install/agent-pack-installer.entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"agent-pack-installer.entry.d.ts","sourceRoot":"","sources":["../../../src/install/agent-pack-installer.entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQjE;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,oBAAoB,2BAA2B,CAAA;AAE5D;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,eAAe,CAAA;AAEhD;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,4FACgD,CAAA;AAc3F;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,GAAG,SAAS,CAehE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASlE;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASpE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASvE;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,yBAAyB,2BAAuB,CAAA;AAE7D,8EAA8E;AAC9E,wBAAgB,sBAAsB,IAAI,MAAM,CAS/C;AAED,4FAA4F;AAC5F,eAAO,MAAM,wBAAwB,QAAoD,CAAA;AAEzF,6FAA6F;AAC7F,eAAO,MAAM,2BAA2B,QAAqD,CAAA;AAE7F;;;;;;;;;GASG;AACH,wBAAgB,+BAA+B,CAAC,sBAAsB,EAAE,MAAM,GAAG,MAAM,CAQtF;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iCAAiC,QAA8B,CAAA"}
|