@opensip-cli/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/NOTICE +8 -0
- package/README.md +31 -0
- package/dist/__tests__/config-resolution.test.d.ts +2 -0
- package/dist/__tests__/config-resolution.test.d.ts.map +1 -0
- package/dist/__tests__/config-resolution.test.js +94 -0
- package/dist/__tests__/config-resolution.test.js.map +1 -0
- package/dist/__tests__/public-api.test.d.ts +16 -0
- package/dist/__tests__/public-api.test.d.ts.map +1 -0
- package/dist/__tests__/public-api.test.js +209 -0
- package/dist/__tests__/public-api.test.js.map +1 -0
- package/dist/__tests__/signal-batch.test.d.ts +2 -0
- package/dist/__tests__/signal-batch.test.d.ts.map +1 -0
- package/dist/__tests__/signal-batch.test.js +39 -0
- package/dist/__tests__/signal-batch.test.js.map +1 -0
- package/dist/__tests__/signal-sink.test.d.ts +2 -0
- package/dist/__tests__/signal-sink.test.d.ts.map +1 -0
- package/dist/__tests__/signal-sink.test.js +25 -0
- package/dist/__tests__/signal-sink.test.js.map +1 -0
- package/dist/__tests__/strip-utils.test.d.ts +2 -0
- package/dist/__tests__/strip-utils.test.d.ts.map +1 -0
- package/dist/__tests__/strip-utils.test.js +397 -0
- package/dist/__tests__/strip-utils.test.js.map +1 -0
- package/dist/__tests__/text-tree.test.d.ts +2 -0
- package/dist/__tests__/text-tree.test.d.ts.map +1 -0
- package/dist/__tests__/text-tree.test.js +31 -0
- package/dist/__tests__/text-tree.test.js.map +1 -0
- package/dist/baseline/__tests__/fingerprint-strategy.test.d.ts +2 -0
- package/dist/baseline/__tests__/fingerprint-strategy.test.d.ts.map +1 -0
- package/dist/baseline/__tests__/fingerprint-strategy.test.js +69 -0
- package/dist/baseline/__tests__/fingerprint-strategy.test.js.map +1 -0
- package/dist/baseline/fingerprint-strategy.d.ts +70 -0
- package/dist/baseline/fingerprint-strategy.d.ts.map +1 -0
- package/dist/baseline/fingerprint-strategy.js +90 -0
- package/dist/baseline/fingerprint-strategy.js.map +1 -0
- package/dist/config-resolution.d.ts +27 -0
- package/dist/config-resolution.d.ts.map +1 -0
- package/dist/config-resolution.js +92 -0
- package/dist/config-resolution.js.map +1 -0
- package/dist/index.d.ts +81 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +165 -0
- package/dist/index.js.map +1 -0
- package/dist/languages/__tests__/content-filter-dispatch.test.d.ts +2 -0
- package/dist/languages/__tests__/content-filter-dispatch.test.d.ts.map +1 -0
- package/dist/languages/__tests__/content-filter-dispatch.test.js +87 -0
- package/dist/languages/__tests__/content-filter-dispatch.test.js.map +1 -0
- package/dist/languages/__tests__/non-code-formats.test.d.ts +2 -0
- package/dist/languages/__tests__/non-code-formats.test.d.ts.map +1 -0
- package/dist/languages/__tests__/non-code-formats.test.js +31 -0
- package/dist/languages/__tests__/non-code-formats.test.js.map +1 -0
- package/dist/languages/__tests__/parse-cache.test.d.ts +2 -0
- package/dist/languages/__tests__/parse-cache.test.d.ts.map +1 -0
- package/dist/languages/__tests__/parse-cache.test.js +228 -0
- package/dist/languages/__tests__/parse-cache.test.js.map +1 -0
- package/dist/languages/__tests__/registry.test.d.ts +2 -0
- package/dist/languages/__tests__/registry.test.d.ts.map +1 -0
- package/dist/languages/__tests__/registry.test.js +193 -0
- package/dist/languages/__tests__/registry.test.js.map +1 -0
- package/dist/languages/__tests__/workspace-unit-contract.test.d.ts +2 -0
- package/dist/languages/__tests__/workspace-unit-contract.test.d.ts.map +1 -0
- package/dist/languages/__tests__/workspace-unit-contract.test.js +66 -0
- package/dist/languages/__tests__/workspace-unit-contract.test.js.map +1 -0
- package/dist/languages/adapter.d.ts +66 -0
- package/dist/languages/adapter.d.ts.map +1 -0
- package/dist/languages/adapter.js +2 -0
- package/dist/languages/adapter.js.map +1 -0
- package/dist/languages/content-filter-dispatch.d.ts +36 -0
- package/dist/languages/content-filter-dispatch.d.ts.map +1 -0
- package/dist/languages/content-filter-dispatch.js +75 -0
- package/dist/languages/content-filter-dispatch.js.map +1 -0
- package/dist/languages/generic-types.d.ts +22 -0
- package/dist/languages/generic-types.d.ts.map +1 -0
- package/dist/languages/generic-types.js +3 -0
- package/dist/languages/generic-types.js.map +1 -0
- package/dist/languages/index.d.ts +12 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +7 -0
- package/dist/languages/index.js.map +1 -0
- package/dist/languages/non-code-formats.d.ts +37 -0
- package/dist/languages/non-code-formats.d.ts.map +1 -0
- package/dist/languages/non-code-formats.js +45 -0
- package/dist/languages/non-code-formats.js.map +1 -0
- package/dist/languages/parse-cache-class.d.ts +69 -0
- package/dist/languages/parse-cache-class.d.ts.map +1 -0
- package/dist/languages/parse-cache-class.js +135 -0
- package/dist/languages/parse-cache-class.js.map +1 -0
- package/dist/languages/parse-cache.d.ts +54 -0
- package/dist/languages/parse-cache.d.ts.map +1 -0
- package/dist/languages/parse-cache.js +88 -0
- package/dist/languages/parse-cache.js.map +1 -0
- package/dist/languages/registry.d.ts +35 -0
- package/dist/languages/registry.d.ts.map +1 -0
- package/dist/languages/registry.js +123 -0
- package/dist/languages/registry.js.map +1 -0
- package/dist/languages/strip-scanners.d.ts +170 -0
- package/dist/languages/strip-scanners.d.ts.map +1 -0
- package/dist/languages/strip-scanners.js +233 -0
- package/dist/languages/strip-scanners.js.map +1 -0
- package/dist/languages/strip-utils.d.ts +66 -0
- package/dist/languages/strip-utils.d.ts.map +1 -0
- package/dist/languages/strip-utils.js +88 -0
- package/dist/languages/strip-utils.js.map +1 -0
- package/dist/languages/text-tree.d.ts +44 -0
- package/dist/languages/text-tree.d.ts.map +1 -0
- package/dist/languages/text-tree.js +34 -0
- package/dist/languages/text-tree.js.map +1 -0
- package/dist/languages/workspace-unit.d.ts +18 -0
- package/dist/languages/workspace-unit.d.ts.map +1 -0
- package/dist/languages/workspace-unit.js +2 -0
- package/dist/languages/workspace-unit.js.map +1 -0
- package/dist/lib/__tests__/config-version.test.d.ts +12 -0
- package/dist/lib/__tests__/config-version.test.d.ts.map +1 -0
- package/dist/lib/__tests__/config-version.test.js +92 -0
- package/dist/lib/__tests__/config-version.test.js.map +1 -0
- package/dist/lib/__tests__/diagnostics-bus.test.d.ts +7 -0
- package/dist/lib/__tests__/diagnostics-bus.test.d.ts.map +1 -0
- package/dist/lib/__tests__/diagnostics-bus.test.js +44 -0
- package/dist/lib/__tests__/diagnostics-bus.test.js.map +1 -0
- package/dist/lib/__tests__/env-registry.test.d.ts +7 -0
- package/dist/lib/__tests__/env-registry.test.d.ts.map +1 -0
- package/dist/lib/__tests__/env-registry.test.js +82 -0
- package/dist/lib/__tests__/env-registry.test.js.map +1 -0
- package/dist/lib/__tests__/errors.test.d.ts +2 -0
- package/dist/lib/__tests__/errors.test.d.ts.map +1 -0
- package/dist/lib/__tests__/errors.test.js +218 -0
- package/dist/lib/__tests__/errors.test.js.map +1 -0
- package/dist/lib/__tests__/format.test.d.ts +2 -0
- package/dist/lib/__tests__/format.test.d.ts.map +1 -0
- package/dist/lib/__tests__/format.test.js +23 -0
- package/dist/lib/__tests__/format.test.js.map +1 -0
- package/dist/lib/__tests__/ids.test.d.ts +2 -0
- package/dist/lib/__tests__/ids.test.d.ts.map +1 -0
- package/dist/lib/__tests__/ids.test.js +80 -0
- package/dist/lib/__tests__/ids.test.js.map +1 -0
- package/dist/lib/__tests__/logger.test.d.ts +2 -0
- package/dist/lib/__tests__/logger.test.d.ts.map +1 -0
- package/dist/lib/__tests__/logger.test.js +284 -0
- package/dist/lib/__tests__/logger.test.js.map +1 -0
- package/dist/lib/__tests__/package-version.test.d.ts +2 -0
- package/dist/lib/__tests__/package-version.test.d.ts.map +1 -0
- package/dist/lib/__tests__/package-version.test.js +47 -0
- package/dist/lib/__tests__/package-version.test.js.map +1 -0
- package/dist/lib/__tests__/paths.test.d.ts +5 -0
- package/dist/lib/__tests__/paths.test.d.ts.map +1 -0
- package/dist/lib/__tests__/paths.test.js +59 -0
- package/dist/lib/__tests__/paths.test.js.map +1 -0
- package/dist/lib/__tests__/payload-version.test.d.ts +2 -0
- package/dist/lib/__tests__/payload-version.test.d.ts.map +1 -0
- package/dist/lib/__tests__/payload-version.test.js +35 -0
- package/dist/lib/__tests__/payload-version.test.js.map +1 -0
- package/dist/lib/__tests__/phantom-detect.test.d.ts +10 -0
- package/dist/lib/__tests__/phantom-detect.test.d.ts.map +1 -0
- package/dist/lib/__tests__/phantom-detect.test.js +84 -0
- package/dist/lib/__tests__/phantom-detect.test.js.map +1 -0
- package/dist/lib/__tests__/project-context.test.d.ts +10 -0
- package/dist/lib/__tests__/project-context.test.d.ts.map +1 -0
- package/dist/lib/__tests__/project-context.test.js +240 -0
- package/dist/lib/__tests__/project-context.test.js.map +1 -0
- package/dist/lib/__tests__/registry.test.d.ts +2 -0
- package/dist/lib/__tests__/registry.test.d.ts.map +1 -0
- package/dist/lib/__tests__/registry.test.js +333 -0
- package/dist/lib/__tests__/registry.test.js.map +1 -0
- package/dist/lib/__tests__/retry.test.d.ts +2 -0
- package/dist/lib/__tests__/retry.test.d.ts.map +1 -0
- package/dist/lib/__tests__/retry.test.js +71 -0
- package/dist/lib/__tests__/retry.test.js.map +1 -0
- package/dist/lib/__tests__/run-diagnostics.test.d.ts +9 -0
- package/dist/lib/__tests__/run-diagnostics.test.d.ts.map +1 -0
- package/dist/lib/__tests__/run-diagnostics.test.js +61 -0
- package/dist/lib/__tests__/run-diagnostics.test.js.map +1 -0
- package/dist/lib/__tests__/run-scope.test.d.ts +2 -0
- package/dist/lib/__tests__/run-scope.test.d.ts.map +1 -0
- package/dist/lib/__tests__/run-scope.test.js +202 -0
- package/dist/lib/__tests__/run-scope.test.js.map +1 -0
- package/dist/lib/__tests__/run-timer.test.d.ts +2 -0
- package/dist/lib/__tests__/run-timer.test.d.ts.map +1 -0
- package/dist/lib/__tests__/run-timer.test.js +152 -0
- package/dist/lib/__tests__/run-timer.test.js.map +1 -0
- package/dist/lib/__tests__/severity-policy.test.d.ts +6 -0
- package/dist/lib/__tests__/severity-policy.test.d.ts.map +1 -0
- package/dist/lib/__tests__/severity-policy.test.js +47 -0
- package/dist/lib/__tests__/severity-policy.test.js.map +1 -0
- package/dist/lib/__tests__/telemetry.test.d.ts +2 -0
- package/dist/lib/__tests__/telemetry.test.d.ts.map +1 -0
- package/dist/lib/__tests__/telemetry.test.js +212 -0
- package/dist/lib/__tests__/telemetry.test.js.map +1 -0
- package/dist/lib/__tests__/verdict-policy.test.d.ts +7 -0
- package/dist/lib/__tests__/verdict-policy.test.d.ts.map +1 -0
- package/dist/lib/__tests__/verdict-policy.test.js +91 -0
- package/dist/lib/__tests__/verdict-policy.test.js.map +1 -0
- package/dist/lib/__tests__/yaml.test.d.ts +6 -0
- package/dist/lib/__tests__/yaml.test.d.ts.map +1 -0
- package/dist/lib/__tests__/yaml.test.js +79 -0
- package/dist/lib/__tests__/yaml.test.js.map +1 -0
- package/dist/lib/config-version.d.ts +49 -0
- package/dist/lib/config-version.d.ts.map +1 -0
- package/dist/lib/config-version.js +56 -0
- package/dist/lib/config-version.js.map +1 -0
- package/dist/lib/diagnostics-bus.d.ts +48 -0
- package/dist/lib/diagnostics-bus.d.ts.map +1 -0
- package/dist/lib/diagnostics-bus.js +74 -0
- package/dist/lib/diagnostics-bus.js.map +1 -0
- package/dist/lib/env-registry.d.ts +108 -0
- package/dist/lib/env-registry.d.ts.map +1 -0
- package/dist/lib/env-registry.js +92 -0
- package/dist/lib/env-registry.js.map +1 -0
- package/dist/lib/errors.d.ts +132 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +160 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/execution/__tests__/execution.test.d.ts +7 -0
- package/dist/lib/execution/__tests__/execution.test.d.ts.map +1 -0
- package/dist/lib/execution/__tests__/execution.test.js +254 -0
- package/dist/lib/execution/__tests__/execution.test.js.map +1 -0
- package/dist/lib/execution/index.d.ts +15 -0
- package/dist/lib/execution/index.d.ts.map +1 -0
- package/dist/lib/execution/index.js +10 -0
- package/dist/lib/execution/index.js.map +1 -0
- package/dist/lib/execution/options.d.ts +32 -0
- package/dist/lib/execution/options.d.ts.map +1 -0
- package/dist/lib/execution/options.js +15 -0
- package/dist/lib/execution/options.js.map +1 -0
- package/dist/lib/execution/pipeline.d.ts +36 -0
- package/dist/lib/execution/pipeline.d.ts.map +1 -0
- package/dist/lib/execution/pipeline.js +38 -0
- package/dist/lib/execution/pipeline.js.map +1 -0
- package/dist/lib/execution/retry.d.ts +38 -0
- package/dist/lib/execution/retry.d.ts.map +1 -0
- package/dist/lib/execution/retry.js +56 -0
- package/dist/lib/execution/retry.js.map +1 -0
- package/dist/lib/execution/run-with-timeout.d.ts +46 -0
- package/dist/lib/execution/run-with-timeout.d.ts.map +1 -0
- package/dist/lib/execution/run-with-timeout.js +86 -0
- package/dist/lib/execution/run-with-timeout.js.map +1 -0
- package/dist/lib/execution/schedule.d.ts +62 -0
- package/dist/lib/execution/schedule.d.ts.map +1 -0
- package/dist/lib/execution/schedule.js +130 -0
- package/dist/lib/execution/schedule.js.map +1 -0
- package/dist/lib/format.d.ts +17 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +26 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/ids.d.ts +13 -0
- package/dist/lib/ids.d.ts.map +1 -0
- package/dist/lib/ids.js +48 -0
- package/dist/lib/ids.js.map +1 -0
- package/dist/lib/logger.d.ts +166 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +283 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/package-version.d.ts +17 -0
- package/dist/lib/package-version.d.ts.map +1 -0
- package/dist/lib/package-version.js +52 -0
- package/dist/lib/package-version.js.map +1 -0
- package/dist/lib/paths.d.ts +139 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +105 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/payload-version.d.ts +15 -0
- package/dist/lib/payload-version.d.ts.map +1 -0
- package/dist/lib/payload-version.js +24 -0
- package/dist/lib/payload-version.js.map +1 -0
- package/dist/lib/phantom-detect.d.ts +21 -0
- package/dist/lib/phantom-detect.d.ts.map +1 -0
- package/dist/lib/phantom-detect.js +76 -0
- package/dist/lib/phantom-detect.js.map +1 -0
- package/dist/lib/project-context.d.ts +66 -0
- package/dist/lib/project-context.d.ts.map +1 -0
- package/dist/lib/project-context.js +112 -0
- package/dist/lib/project-context.js.map +1 -0
- package/dist/lib/recipe-id.d.ts +13 -0
- package/dist/lib/recipe-id.d.ts.map +1 -0
- package/dist/lib/recipe-id.js +15 -0
- package/dist/lib/recipe-id.js.map +1 -0
- package/dist/lib/registry.d.ts +98 -0
- package/dist/lib/registry.d.ts.map +1 -0
- package/dist/lib/registry.js +152 -0
- package/dist/lib/registry.js.map +1 -0
- package/dist/lib/retry.d.ts +26 -0
- package/dist/lib/retry.d.ts.map +1 -0
- package/dist/lib/retry.js +48 -0
- package/dist/lib/retry.js.map +1 -0
- package/dist/lib/run-diagnostics.d.ts +64 -0
- package/dist/lib/run-diagnostics.d.ts.map +1 -0
- package/dist/lib/run-diagnostics.js +25 -0
- package/dist/lib/run-diagnostics.js.map +1 -0
- package/dist/lib/run-scope.d.ts +167 -0
- package/dist/lib/run-scope.d.ts.map +1 -0
- package/dist/lib/run-scope.js +176 -0
- package/dist/lib/run-scope.js.map +1 -0
- package/dist/lib/run-timer.d.ts +82 -0
- package/dist/lib/run-timer.d.ts.map +1 -0
- package/dist/lib/run-timer.js +79 -0
- package/dist/lib/run-timer.js.map +1 -0
- package/dist/lib/scope-types.d.ts +172 -0
- package/dist/lib/scope-types.d.ts.map +1 -0
- package/dist/lib/scope-types.js +27 -0
- package/dist/lib/scope-types.js.map +1 -0
- package/dist/lib/severity-policy.d.ts +38 -0
- package/dist/lib/severity-policy.d.ts.map +1 -0
- package/dist/lib/severity-policy.js +44 -0
- package/dist/lib/severity-policy.js.map +1 -0
- package/dist/lib/telemetry.d.ts +93 -0
- package/dist/lib/telemetry.d.ts.map +1 -0
- package/dist/lib/telemetry.js +144 -0
- package/dist/lib/telemetry.js.map +1 -0
- package/dist/lib/ui-context.d.ts +34 -0
- package/dist/lib/ui-context.d.ts.map +1 -0
- package/dist/lib/ui-context.js +16 -0
- package/dist/lib/ui-context.js.map +1 -0
- package/dist/lib/verdict-policy.d.ts +71 -0
- package/dist/lib/verdict-policy.d.ts.map +1 -0
- package/dist/lib/verdict-policy.js +82 -0
- package/dist/lib/verdict-policy.js.map +1 -0
- package/dist/lib/yaml.d.ts +74 -0
- package/dist/lib/yaml.d.ts.map +1 -0
- package/dist/lib/yaml.js +118 -0
- package/dist/lib/yaml.js.map +1 -0
- package/dist/plugins/__tests__/as-if-external.test.d.ts +18 -0
- package/dist/plugins/__tests__/as-if-external.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/as-if-external.test.js +159 -0
- package/dist/plugins/__tests__/as-if-external.test.js.map +1 -0
- package/dist/plugins/__tests__/authored-tool-discovery.test.d.ts +8 -0
- package/dist/plugins/__tests__/authored-tool-discovery.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/authored-tool-discovery.test.js +97 -0
- package/dist/plugins/__tests__/authored-tool-discovery.test.js.map +1 -0
- package/dist/plugins/__tests__/capability-discovery.test.d.ts +2 -0
- package/dist/plugins/__tests__/capability-discovery.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/capability-discovery.test.js +349 -0
- package/dist/plugins/__tests__/capability-discovery.test.js.map +1 -0
- package/dist/plugins/__tests__/capability-from-manifest.test.d.ts +2 -0
- package/dist/plugins/__tests__/capability-from-manifest.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/capability-from-manifest.test.js +172 -0
- package/dist/plugins/__tests__/capability-from-manifest.test.js.map +1 -0
- package/dist/plugins/__tests__/capability-loader.test.d.ts +2 -0
- package/dist/plugins/__tests__/capability-loader.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/capability-loader.test.js +122 -0
- package/dist/plugins/__tests__/capability-loader.test.js.map +1 -0
- package/dist/plugins/__tests__/capability-registry.test.d.ts +2 -0
- package/dist/plugins/__tests__/capability-registry.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/capability-registry.test.js +185 -0
- package/dist/plugins/__tests__/capability-registry.test.js.map +1 -0
- package/dist/plugins/__tests__/discover.test.d.ts +2 -0
- package/dist/plugins/__tests__/discover.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/discover.test.js +311 -0
- package/dist/plugins/__tests__/discover.test.js.map +1 -0
- package/dist/plugins/__tests__/loader.test.d.ts +2 -0
- package/dist/plugins/__tests__/loader.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/loader.test.js +191 -0
- package/dist/plugins/__tests__/loader.test.js.map +1 -0
- package/dist/plugins/__tests__/manifest-discovery.test.d.ts +2 -0
- package/dist/plugins/__tests__/manifest-discovery.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/manifest-discovery.test.js +132 -0
- package/dist/plugins/__tests__/manifest-discovery.test.js.map +1 -0
- package/dist/plugins/__tests__/manifest-loader.test.d.ts +2 -0
- package/dist/plugins/__tests__/manifest-loader.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/manifest-loader.test.js +434 -0
- package/dist/plugins/__tests__/manifest-loader.test.js.map +1 -0
- package/dist/plugins/__tests__/marker-discovery.test.d.ts +2 -0
- package/dist/plugins/__tests__/marker-discovery.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/marker-discovery.test.js +164 -0
- package/dist/plugins/__tests__/marker-discovery.test.js.map +1 -0
- package/dist/plugins/__tests__/node-modules-walk.test.d.ts +2 -0
- package/dist/plugins/__tests__/node-modules-walk.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/node-modules-walk.test.js +76 -0
- package/dist/plugins/__tests__/node-modules-walk.test.js.map +1 -0
- package/dist/plugins/__tests__/package-entry.test.d.ts +9 -0
- package/dist/plugins/__tests__/package-entry.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/package-entry.test.js +117 -0
- package/dist/plugins/__tests__/package-entry.test.js.map +1 -0
- package/dist/plugins/__tests__/recipe-loader.test.d.ts +2 -0
- package/dist/plugins/__tests__/recipe-loader.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/recipe-loader.test.js +130 -0
- package/dist/plugins/__tests__/recipe-loader.test.js.map +1 -0
- package/dist/plugins/__tests__/scope-validation.test.d.ts +2 -0
- package/dist/plugins/__tests__/scope-validation.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/scope-validation.test.js +68 -0
- package/dist/plugins/__tests__/scope-validation.test.js.map +1 -0
- package/dist/plugins/__tests__/single-core-guard.test.d.ts +10 -0
- package/dist/plugins/__tests__/single-core-guard.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/single-core-guard.test.js +89 -0
- package/dist/plugins/__tests__/single-core-guard.test.js.map +1 -0
- package/dist/plugins/__tests__/tool-package-discovery.test.d.ts +2 -0
- package/dist/plugins/__tests__/tool-package-discovery.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/tool-package-discovery.test.js +215 -0
- package/dist/plugins/__tests__/tool-package-discovery.test.js.map +1 -0
- package/dist/plugins/authored-tool-discovery.d.ts +45 -0
- package/dist/plugins/authored-tool-discovery.d.ts.map +1 -0
- package/dist/plugins/authored-tool-discovery.js +61 -0
- package/dist/plugins/authored-tool-discovery.js.map +1 -0
- package/dist/plugins/capability-discovery.d.ts +80 -0
- package/dist/plugins/capability-discovery.d.ts.map +1 -0
- package/dist/plugins/capability-discovery.js +278 -0
- package/dist/plugins/capability-discovery.js.map +1 -0
- package/dist/plugins/capability-loader.d.ts +50 -0
- package/dist/plugins/capability-loader.d.ts.map +1 -0
- package/dist/plugins/capability-loader.js +85 -0
- package/dist/plugins/capability-loader.js.map +1 -0
- package/dist/plugins/capability-registry.d.ts +169 -0
- package/dist/plugins/capability-registry.d.ts.map +1 -0
- package/dist/plugins/capability-registry.js +319 -0
- package/dist/plugins/capability-registry.js.map +1 -0
- package/dist/plugins/discover.d.ts +64 -0
- package/dist/plugins/discover.d.ts.map +1 -0
- package/dist/plugins/discover.js +303 -0
- package/dist/plugins/discover.js.map +1 -0
- package/dist/plugins/index.d.ts +37 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +40 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/json-guards.d.ts +11 -0
- package/dist/plugins/json-guards.d.ts.map +1 -0
- package/dist/plugins/json-guards.js +15 -0
- package/dist/plugins/json-guards.js.map +1 -0
- package/dist/plugins/loader.d.ts +67 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +137 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manifest-discovery.d.ts +28 -0
- package/dist/plugins/manifest-discovery.d.ts.map +1 -0
- package/dist/plugins/manifest-discovery.js +103 -0
- package/dist/plugins/manifest-discovery.js.map +1 -0
- package/dist/plugins/manifest-loader.d.ts +120 -0
- package/dist/plugins/manifest-loader.d.ts.map +1 -0
- package/dist/plugins/manifest-loader.js +410 -0
- package/dist/plugins/manifest-loader.js.map +1 -0
- package/dist/plugins/marker-discovery.d.ts +115 -0
- package/dist/plugins/marker-discovery.d.ts.map +1 -0
- package/dist/plugins/marker-discovery.js +172 -0
- package/dist/plugins/marker-discovery.js.map +1 -0
- package/dist/plugins/node-modules-walk.d.ts +61 -0
- package/dist/plugins/node-modules-walk.d.ts.map +1 -0
- package/dist/plugins/node-modules-walk.js +99 -0
- package/dist/plugins/node-modules-walk.js.map +1 -0
- package/dist/plugins/package-entry.d.ts +38 -0
- package/dist/plugins/package-entry.d.ts.map +1 -0
- package/dist/plugins/package-entry.js +86 -0
- package/dist/plugins/package-entry.js.map +1 -0
- package/dist/plugins/recipe-loader.d.ts +63 -0
- package/dist/plugins/recipe-loader.d.ts.map +1 -0
- package/dist/plugins/recipe-loader.js +67 -0
- package/dist/plugins/recipe-loader.js.map +1 -0
- package/dist/plugins/scope-validation.d.ts +35 -0
- package/dist/plugins/scope-validation.d.ts.map +1 -0
- package/dist/plugins/scope-validation.js +55 -0
- package/dist/plugins/scope-validation.js.map +1 -0
- package/dist/plugins/single-core-guard.d.ts +28 -0
- package/dist/plugins/single-core-guard.d.ts.map +1 -0
- package/dist/plugins/single-core-guard.js +69 -0
- package/dist/plugins/single-core-guard.js.map +1 -0
- package/dist/plugins/tool-package-discovery.d.ts +93 -0
- package/dist/plugins/tool-package-discovery.d.ts.map +1 -0
- package/dist/plugins/tool-package-discovery.js +118 -0
- package/dist/plugins/tool-package-discovery.js.map +1 -0
- package/dist/plugins/types.d.ts +78 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +15 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/recipes/__tests__/registry.test.d.ts +2 -0
- package/dist/recipes/__tests__/registry.test.d.ts.map +1 -0
- package/dist/recipes/__tests__/registry.test.js +170 -0
- package/dist/recipes/__tests__/registry.test.js.map +1 -0
- package/dist/recipes/__tests__/selector.test.d.ts +20 -0
- package/dist/recipes/__tests__/selector.test.d.ts.map +1 -0
- package/dist/recipes/__tests__/selector.test.js +173 -0
- package/dist/recipes/__tests__/selector.test.js.map +1 -0
- package/dist/recipes/__tests__/unit-config.test.d.ts +7 -0
- package/dist/recipes/__tests__/unit-config.test.d.ts.map +1 -0
- package/dist/recipes/__tests__/unit-config.test.js +52 -0
- package/dist/recipes/__tests__/unit-config.test.js.map +1 -0
- package/dist/recipes/registry.d.ts +105 -0
- package/dist/recipes/registry.d.ts.map +1 -0
- package/dist/recipes/registry.js +141 -0
- package/dist/recipes/registry.js.map +1 -0
- package/dist/recipes/selector.d.ts +112 -0
- package/dist/recipes/selector.d.ts.map +1 -0
- package/dist/recipes/selector.js +134 -0
- package/dist/recipes/selector.js.map +1 -0
- package/dist/recipes/unit-config.d.ts +63 -0
- package/dist/recipes/unit-config.d.ts.map +1 -0
- package/dist/recipes/unit-config.js +68 -0
- package/dist/recipes/unit-config.js.map +1 -0
- package/dist/runtime/__tests__/in-process-transport.test.d.ts +6 -0
- package/dist/runtime/__tests__/in-process-transport.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/in-process-transport.test.js +73 -0
- package/dist/runtime/__tests__/in-process-transport.test.js.map +1 -0
- package/dist/runtime/__tests__/subprocess-transport.test.d.ts +11 -0
- package/dist/runtime/__tests__/subprocess-transport.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/subprocess-transport.test.js +118 -0
- package/dist/runtime/__tests__/subprocess-transport.test.js.map +1 -0
- package/dist/runtime/in-process-transport.d.ts +20 -0
- package/dist/runtime/in-process-transport.d.ts.map +1 -0
- package/dist/runtime/in-process-transport.js +49 -0
- package/dist/runtime/in-process-transport.js.map +1 -0
- package/dist/runtime/progress-transport.d.ts +73 -0
- package/dist/runtime/progress-transport.d.ts.map +1 -0
- package/dist/runtime/progress-transport.js +17 -0
- package/dist/runtime/progress-transport.js.map +1 -0
- package/dist/runtime/subprocess-transport.d.ts +43 -0
- package/dist/runtime/subprocess-transport.d.ts.map +1 -0
- package/dist/runtime/subprocess-transport.js +134 -0
- package/dist/runtime/subprocess-transport.js.map +1 -0
- package/dist/signals/comment-openers.d.ts +29 -0
- package/dist/signals/comment-openers.d.ts.map +1 -0
- package/dist/signals/comment-openers.js +41 -0
- package/dist/signals/comment-openers.js.map +1 -0
- package/dist/signals/comment-openers.test.d.ts +7 -0
- package/dist/signals/comment-openers.test.d.ts.map +1 -0
- package/dist/signals/comment-openers.test.js +41 -0
- package/dist/signals/comment-openers.test.js.map +1 -0
- package/dist/signals/create-signal-from-violation.d.ts +29 -0
- package/dist/signals/create-signal-from-violation.d.ts.map +1 -0
- package/dist/signals/create-signal-from-violation.js +29 -0
- package/dist/signals/create-signal-from-violation.js.map +1 -0
- package/dist/signals/signal-sink.d.ts +49 -0
- package/dist/signals/signal-sink.d.ts.map +1 -0
- package/dist/signals/signal-sink.js +6 -0
- package/dist/signals/signal-sink.js.map +1 -0
- package/dist/signals/suppress.d.ts +102 -0
- package/dist/signals/suppress.d.ts.map +1 -0
- package/dist/signals/suppress.js +325 -0
- package/dist/signals/suppress.js.map +1 -0
- package/dist/signals/suppress.test.d.ts +2 -0
- package/dist/signals/suppress.test.d.ts.map +1 -0
- package/dist/signals/suppress.test.js +213 -0
- package/dist/signals/suppress.test.js.map +1 -0
- package/dist/tools/__tests__/command-spec.test.d.ts +2 -0
- package/dist/tools/__tests__/command-spec.test.d.ts.map +1 -0
- package/dist/tools/__tests__/command-spec.test.js +191 -0
- package/dist/tools/__tests__/command-spec.test.js.map +1 -0
- package/dist/tools/__tests__/compatibility.test.d.ts +5 -0
- package/dist/tools/__tests__/compatibility.test.d.ts.map +1 -0
- package/dist/tools/__tests__/compatibility.test.js +41 -0
- package/dist/tools/__tests__/compatibility.test.js.map +1 -0
- package/dist/tools/__tests__/ids.test.d.ts +5 -0
- package/dist/tools/__tests__/ids.test.d.ts.map +1 -0
- package/dist/tools/__tests__/ids.test.js +56 -0
- package/dist/tools/__tests__/ids.test.js.map +1 -0
- package/dist/tools/__tests__/manifest-assert.test.d.ts +5 -0
- package/dist/tools/__tests__/manifest-assert.test.d.ts.map +1 -0
- package/dist/tools/__tests__/manifest-assert.test.js +66 -0
- package/dist/tools/__tests__/manifest-assert.test.js.map +1 -0
- package/dist/tools/__tests__/registry.test.d.ts +2 -0
- package/dist/tools/__tests__/registry.test.d.ts.map +1 -0
- package/dist/tools/__tests__/registry.test.js +93 -0
- package/dist/tools/__tests__/registry.test.js.map +1 -0
- package/dist/tools/__tests__/types.test.d.ts +2 -0
- package/dist/tools/__tests__/types.test.d.ts.map +1 -0
- package/dist/tools/__tests__/types.test.js +51 -0
- package/dist/tools/__tests__/types.test.js.map +1 -0
- package/dist/tools/capability.d.ts +257 -0
- package/dist/tools/capability.d.ts.map +1 -0
- package/dist/tools/capability.js +46 -0
- package/dist/tools/capability.js.map +1 -0
- package/dist/tools/command-spec.d.ts +211 -0
- package/dist/tools/command-spec.d.ts.map +1 -0
- package/dist/tools/command-spec.js +110 -0
- package/dist/tools/command-spec.js.map +1 -0
- package/dist/tools/compatibility.d.ts +45 -0
- package/dist/tools/compatibility.d.ts.map +1 -0
- package/dist/tools/compatibility.js +49 -0
- package/dist/tools/compatibility.js.map +1 -0
- package/dist/tools/ids.d.ts +61 -0
- package/dist/tools/ids.d.ts.map +1 -0
- package/dist/tools/ids.js +61 -0
- package/dist/tools/ids.js.map +1 -0
- package/dist/tools/index.d.ts +22 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +28 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/manifest-assert.d.ts +35 -0
- package/dist/tools/manifest-assert.d.ts.map +1 -0
- package/dist/tools/manifest-assert.js +67 -0
- package/dist/tools/manifest-assert.js.map +1 -0
- package/dist/tools/manifest.d.ts +178 -0
- package/dist/tools/manifest.d.ts.map +1 -0
- package/dist/tools/manifest.js +35 -0
- package/dist/tools/manifest.js.map +1 -0
- package/dist/tools/registry.d.ts +37 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +49 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +1021 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +77 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/types/__tests__/signal.test.d.ts +2 -0
- package/dist/types/__tests__/signal.test.d.ts.map +1 -0
- package/dist/types/__tests__/signal.test.js +111 -0
- package/dist/types/__tests__/signal.test.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/signal-batch.d.ts +56 -0
- package/dist/types/signal-batch.d.ts.map +1 -0
- package/dist/types/signal-batch.js +54 -0
- package/dist/types/signal-batch.js.map +1 -0
- package/dist/types/signal.d.ts +77 -0
- package/dist/types/signal.d.ts.map +1 -0
- package/dist/types/signal.js +42 -0
- package/dist/types/signal.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { logger } from '../../lib/logger.js';
|
|
3
|
+
import { VALID_NPM_SCOPE_REGEX, resolveScopes } from '../scope-validation.js';
|
|
4
|
+
describe('VALID_NPM_SCOPE_REGEX', () => {
|
|
5
|
+
it('accepts well-formed npm scopes', () => {
|
|
6
|
+
expect(VALID_NPM_SCOPE_REGEX.test('@opensip-cli')).toBe(true);
|
|
7
|
+
expect(VALID_NPM_SCOPE_REGEX.test('@foo')).toBe(true);
|
|
8
|
+
expect(VALID_NPM_SCOPE_REGEX.test('@foo-bar')).toBe(true);
|
|
9
|
+
expect(VALID_NPM_SCOPE_REGEX.test('@foo.bar')).toBe(true);
|
|
10
|
+
expect(VALID_NPM_SCOPE_REGEX.test('@foo_bar')).toBe(true);
|
|
11
|
+
expect(VALID_NPM_SCOPE_REGEX.test('@0abc')).toBe(true);
|
|
12
|
+
});
|
|
13
|
+
it('rejects malformed scopes', () => {
|
|
14
|
+
expect(VALID_NPM_SCOPE_REGEX.test('foo')).toBe(false); // missing @
|
|
15
|
+
expect(VALID_NPM_SCOPE_REGEX.test('@')).toBe(false); // empty body
|
|
16
|
+
expect(VALID_NPM_SCOPE_REGEX.test('@Foo')).toBe(false); // uppercase
|
|
17
|
+
expect(VALID_NPM_SCOPE_REGEX.test('@foo/bar')).toBe(false); // slash
|
|
18
|
+
expect(VALID_NPM_SCOPE_REGEX.test('@..')).toBe(false); // path traversal-ish
|
|
19
|
+
expect(VALID_NPM_SCOPE_REGEX.test('@-foo')).toBe(false); // leading dash
|
|
20
|
+
expect(VALID_NPM_SCOPE_REGEX.test('')).toBe(false);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
describe('resolveScopes', () => {
|
|
24
|
+
let warnSpy;
|
|
25
|
+
beforeEach(() => {
|
|
26
|
+
warnSpy = vi.spyOn(logger, 'warn').mockImplementation(() => undefined);
|
|
27
|
+
});
|
|
28
|
+
afterEach(() => {
|
|
29
|
+
warnSpy.mockRestore();
|
|
30
|
+
});
|
|
31
|
+
it('always includes the default scope first', () => {
|
|
32
|
+
const out = resolveScopes('@opensip-cli', [], 'plugin.invalid_scope');
|
|
33
|
+
expect(out).toEqual(['@opensip-cli']);
|
|
34
|
+
});
|
|
35
|
+
it('appends valid extra scopes after the default', () => {
|
|
36
|
+
const out = resolveScopes('@opensip-cli', ['@other', '@third'], 'plugin.invalid_scope');
|
|
37
|
+
expect(out).toEqual(['@opensip-cli', '@other', '@third']);
|
|
38
|
+
});
|
|
39
|
+
it('deduplicates extra scopes that match the default', () => {
|
|
40
|
+
const out = resolveScopes('@opensip-cli', ['@opensip-cli', '@other'], 'plugin.invalid_scope');
|
|
41
|
+
expect(out).toEqual(['@opensip-cli', '@other']);
|
|
42
|
+
});
|
|
43
|
+
it('deduplicates duplicate extra scopes', () => {
|
|
44
|
+
const out = resolveScopes('@opensip-cli', ['@other', '@other', '@third'], 'plugin.invalid_scope');
|
|
45
|
+
expect(out).toEqual(['@opensip-cli', '@other', '@third']);
|
|
46
|
+
});
|
|
47
|
+
it('drops invalid scopes with a structured warning', () => {
|
|
48
|
+
const out = resolveScopes('@opensip-cli', ['@valid', 'no-at-sign', '@Bad'], 'plugin.invalid_scope');
|
|
49
|
+
expect(out).toEqual(['@opensip-cli', '@valid']);
|
|
50
|
+
expect(warnSpy).toHaveBeenCalledTimes(2);
|
|
51
|
+
expect(warnSpy.mock.calls[0]?.[0]).toMatchObject({
|
|
52
|
+
evt: 'plugin.invalid_scope',
|
|
53
|
+
module: 'core:plugins',
|
|
54
|
+
scope: 'no-at-sign',
|
|
55
|
+
});
|
|
56
|
+
expect(warnSpy.mock.calls[1]?.[0]).toMatchObject({
|
|
57
|
+
evt: 'plugin.invalid_scope',
|
|
58
|
+
scope: '@Bad',
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
it('uses the supplied event name in warnings', () => {
|
|
62
|
+
resolveScopes('@opensip-cli', ['bad'], 'plugin.scenario_package.invalid_scope');
|
|
63
|
+
expect(warnSpy.mock.calls[0]?.[0]).toMatchObject({
|
|
64
|
+
evt: 'plugin.scenario_package.invalid_scope',
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=scope-validation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-validation.test.js","sourceRoot":"","sources":["../../../src/plugins/__tests__/scope-validation.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEzE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE9E,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY;QACnE,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa;QAClE,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY;QACpE,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;QACpE,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB;QAC5E,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe;QACxE,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,OAAoC,CAAC;IAEzC,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,WAAW,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,GAAG,GAAG,aAAa,CAAC,cAAc,EAAE,EAAE,EAAE,sBAAsB,CAAC,CAAC;QACtE,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,GAAG,GAAG,aAAa,CAAC,cAAc,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,sBAAsB,CAAC,CAAC;QACxF,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,GAAG,GAAG,aAAa,CAAC,cAAc,EAAE,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAC9F,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,GAAG,GAAG,aAAa,CACvB,cAAc,EACd,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAC9B,sBAAsB,CACvB,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,GAAG,GAAG,aAAa,CACvB,cAAc,EACd,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,EAChC,sBAAsB,CACvB,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAC/C,GAAG,EAAE,sBAAsB;YAC3B,MAAM,EAAE,cAAc;YACtB,KAAK,EAAE,YAAY;SACpB,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAC/C,GAAG,EAAE,sBAAsB;YAC3B,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,aAAa,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,EAAE,uCAAuC,CAAC,CAAC;QAChF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YAC/C,GAAG,EAAE,uCAAuC;SAC7C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* single-core-guard — the discovery-time policy that drops capability packs which
|
|
3
|
+
* resolve a DIFFERENT physical `@opensip-cli/core` than the running engine.
|
|
4
|
+
*
|
|
5
|
+
* `selfCore()` is the canonical core this runtime resolves; `foreignCorePath`
|
|
6
|
+
* probes a pack's resolved core; `filterSameCorePackages` keeps only same-core
|
|
7
|
+
* (or core-less) packs and reports each foreign drop via `onForeign`.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=single-core-guard.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-core-guard.test.d.ts","sourceRoot":"","sources":["../../../src/plugins/__tests__/single-core-guard.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* single-core-guard — the discovery-time policy that drops capability packs which
|
|
3
|
+
* resolve a DIFFERENT physical `@opensip-cli/core` than the running engine.
|
|
4
|
+
*
|
|
5
|
+
* `selfCore()` is the canonical core this runtime resolves; `foreignCorePath`
|
|
6
|
+
* probes a pack's resolved core; `filterSameCorePackages` keeps only same-core
|
|
7
|
+
* (or core-less) packs and reports each foreign drop via `onForeign`.
|
|
8
|
+
*/
|
|
9
|
+
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
10
|
+
import { tmpdir } from 'node:os';
|
|
11
|
+
import { join } from 'node:path';
|
|
12
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
13
|
+
import { filterSameCorePackages, foreignCorePath, selfCore } from '../single-core-guard.js';
|
|
14
|
+
let testDir;
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
testDir = mkdtempSync(join(tmpdir(), 'opensip-single-core-'));
|
|
17
|
+
});
|
|
18
|
+
afterEach(() => {
|
|
19
|
+
rmSync(testDir, { recursive: true, force: true });
|
|
20
|
+
});
|
|
21
|
+
/**
|
|
22
|
+
* Plant a self-contained `@opensip-cli/core` under `<dir>/node_modules` so a
|
|
23
|
+
* pack rooted at `dir` resolves THAT physical copy — a "foreign" core distinct
|
|
24
|
+
* from the test runner's own resolved core.
|
|
25
|
+
*/
|
|
26
|
+
function plantForeignCore(dir) {
|
|
27
|
+
const coreDir = join(dir, 'node_modules', '@opensip-cli', 'core');
|
|
28
|
+
mkdirSync(coreDir, { recursive: true });
|
|
29
|
+
writeFileSync(join(coreDir, 'package.json'), JSON.stringify({ name: '@opensip-cli/core', version: '0.0.0-foreign', main: 'index.js' }));
|
|
30
|
+
writeFileSync(join(coreDir, 'index.js'), 'module.exports = {};');
|
|
31
|
+
}
|
|
32
|
+
describe('selfCore', () => {
|
|
33
|
+
it('resolves a concrete path to the running @opensip-cli/core', () => {
|
|
34
|
+
const self = selfCore();
|
|
35
|
+
expect(self).toBeDefined();
|
|
36
|
+
// Resolves to core's own entry point (a workspace `packages/core/...` path
|
|
37
|
+
// in this monorepo, or a `node_modules/@opensip-cli/core/...` path when
|
|
38
|
+
// installed) — in either case a concrete, absolute file path.
|
|
39
|
+
expect(self).toMatch(/[/\\]core[/\\]/);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
describe('foreignCorePath', () => {
|
|
43
|
+
it('returns undefined for a pack dir with no resolvable core (no core dep)', () => {
|
|
44
|
+
// testDir has no node_modules at all → resolution throws → "no foreign core".
|
|
45
|
+
expect(foreignCorePath(testDir)).toBeUndefined();
|
|
46
|
+
});
|
|
47
|
+
it('returns the foreign core path for a pack that vendors its own core', () => {
|
|
48
|
+
plantForeignCore(testDir);
|
|
49
|
+
const foreign = foreignCorePath(testDir);
|
|
50
|
+
expect(foreign).toBeDefined();
|
|
51
|
+
expect(foreign).toContain('@opensip-cli');
|
|
52
|
+
expect(foreign).toContain(testDir);
|
|
53
|
+
expect(foreign).not.toBe(selfCore());
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe('filterSameCorePackages', () => {
|
|
57
|
+
it('keeps packs with no core dependency', () => {
|
|
58
|
+
const pkgs = [{ name: 'no-core', packageDir: testDir }];
|
|
59
|
+
expect(filterSameCorePackages(pkgs)).toEqual(pkgs);
|
|
60
|
+
});
|
|
61
|
+
it('drops a foreign-core pack and reports it via onForeign', () => {
|
|
62
|
+
plantForeignCore(testDir);
|
|
63
|
+
const pkgs = [{ name: 'foreign-pack', packageDir: testDir }];
|
|
64
|
+
const dropped = [];
|
|
65
|
+
const kept = filterSameCorePackages(pkgs, (pkg, foreignCore) => {
|
|
66
|
+
dropped.push({ name: pkg.name, foreignCore });
|
|
67
|
+
});
|
|
68
|
+
expect(kept).toEqual([]);
|
|
69
|
+
expect(dropped).toHaveLength(1);
|
|
70
|
+
expect(dropped[0].name).toBe('foreign-pack');
|
|
71
|
+
expect(dropped[0].foreignCore).toContain('@opensip-cli');
|
|
72
|
+
});
|
|
73
|
+
it('keeps same-core packs and drops only the foreign one in a mixed set', () => {
|
|
74
|
+
const sameCoreDir = mkdtempSync(join(tmpdir(), 'opensip-same-core-'));
|
|
75
|
+
plantForeignCore(testDir);
|
|
76
|
+
try {
|
|
77
|
+
const pkgs = [
|
|
78
|
+
{ name: 'same-core', packageDir: sameCoreDir },
|
|
79
|
+
{ name: 'foreign', packageDir: testDir },
|
|
80
|
+
];
|
|
81
|
+
const kept = filterSameCorePackages(pkgs);
|
|
82
|
+
expect(kept.map((p) => p.name)).toEqual(['same-core']);
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
rmSync(sameCoreDir, { recursive: true, force: true });
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=single-core-guard.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-core-guard.test.js","sourceRoot":"","sources":["../../../src/plugins/__tests__/single-core-guard.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-package-discovery.test.d.ts","sourceRoot":"","sources":["../../../src/plugins/__tests__/tool-package-discovery.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { tmpdir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
5
|
+
import { discoverPackagesInNodeModules } from '../marker-discovery.js';
|
|
6
|
+
import { discoverToolPackages, discoverToolPackagesFromAnchors, readToolPackageMetadata, } from '../tool-package-discovery.js';
|
|
7
|
+
let testDir;
|
|
8
|
+
function writePkg(dir, json) {
|
|
9
|
+
mkdirSync(dir, { recursive: true });
|
|
10
|
+
writeFileSync(join(dir, 'package.json'), JSON.stringify(json));
|
|
11
|
+
}
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
testDir = mkdtempSync(join(tmpdir(), 'opensip-tool-discover-'));
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
rmSync(testDir, { recursive: true, force: true });
|
|
17
|
+
});
|
|
18
|
+
describe('discoverToolPackages', () => {
|
|
19
|
+
it('returns an empty list when node_modules is missing', () => {
|
|
20
|
+
expect(discoverToolPackages({ projectDir: testDir })).toEqual([]);
|
|
21
|
+
});
|
|
22
|
+
it('finds an unscoped package marked as a tool', () => {
|
|
23
|
+
writePkg(join(testDir, 'node_modules', 'audit'), {
|
|
24
|
+
name: 'audit',
|
|
25
|
+
opensipTools: { kind: 'tool' },
|
|
26
|
+
});
|
|
27
|
+
const out = discoverToolPackages({ projectDir: testDir });
|
|
28
|
+
expect(out.map((t) => t.name)).toEqual(['audit']);
|
|
29
|
+
});
|
|
30
|
+
it('finds a scoped package marked as a tool', () => {
|
|
31
|
+
writePkg(join(testDir, 'node_modules', '@opensip-cli', 'fitness'), {
|
|
32
|
+
name: '@opensip-cli/fitness',
|
|
33
|
+
opensipTools: { kind: 'tool' },
|
|
34
|
+
});
|
|
35
|
+
const out = discoverToolPackages({ projectDir: testDir });
|
|
36
|
+
expect(out.map((t) => t.name)).toEqual(['@opensip-cli/fitness']);
|
|
37
|
+
});
|
|
38
|
+
it('skips packages that are not marked as tools', () => {
|
|
39
|
+
writePkg(join(testDir, 'node_modules', 'random-pkg'), { name: 'random-pkg' });
|
|
40
|
+
expect(discoverToolPackages({ projectDir: testDir })).toEqual([]);
|
|
41
|
+
});
|
|
42
|
+
it('skips dot-prefixed entries (.bin, .pnpm, etc.)', () => {
|
|
43
|
+
writePkg(join(testDir, 'node_modules', '.bin', 'fake-tool'), {
|
|
44
|
+
name: 'fake-tool',
|
|
45
|
+
opensipTools: { kind: 'tool' },
|
|
46
|
+
});
|
|
47
|
+
expect(discoverToolPackages({ projectDir: testDir })).toEqual([]);
|
|
48
|
+
});
|
|
49
|
+
it('walks ancestor node_modules and dedupes by package name', () => {
|
|
50
|
+
const nested = join(testDir, 'project');
|
|
51
|
+
mkdirSync(nested, { recursive: true });
|
|
52
|
+
writePkg(join(testDir, 'node_modules', '@opensip-cli', 'fitness'), {
|
|
53
|
+
name: '@opensip-cli/fitness',
|
|
54
|
+
opensipTools: { kind: 'tool' },
|
|
55
|
+
});
|
|
56
|
+
writePkg(join(nested, 'node_modules', '@opensip-cli', 'fitness'), {
|
|
57
|
+
name: '@opensip-cli/fitness',
|
|
58
|
+
opensipTools: { kind: 'tool' },
|
|
59
|
+
});
|
|
60
|
+
const out = discoverToolPackages({ projectDir: nested });
|
|
61
|
+
expect(out).toHaveLength(1);
|
|
62
|
+
// Nearest-ancestor wins: the inner copy
|
|
63
|
+
expect(out[0]?.packageDir).toBe(join(nested, 'node_modules', '@opensip-cli', 'fitness'));
|
|
64
|
+
});
|
|
65
|
+
it('treats malformed package.json as non-tool (no crash)', () => {
|
|
66
|
+
const dir = join(testDir, 'node_modules', 'broken');
|
|
67
|
+
mkdirSync(dir, { recursive: true });
|
|
68
|
+
writeFileSync(join(dir, 'package.json'), '{not-json');
|
|
69
|
+
expect(discoverToolPackages({ projectDir: testDir })).toEqual([]);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
describe('discoverPackagesInNodeModules (single-dir scan, no walk-up)', () => {
|
|
73
|
+
it('finds a tool in the exact node_modules dir', () => {
|
|
74
|
+
writePkg(join(testDir, 'host', 'node_modules', '@my', 'audit'), {
|
|
75
|
+
name: '@my/audit',
|
|
76
|
+
opensipTools: { kind: 'tool' },
|
|
77
|
+
});
|
|
78
|
+
const out = discoverPackagesInNodeModules(join(testDir, 'host', 'node_modules'), 'tool');
|
|
79
|
+
expect(out.map((t) => t.name)).toEqual(['@my/audit']);
|
|
80
|
+
});
|
|
81
|
+
it('does NOT walk up into ancestor node_modules', () => {
|
|
82
|
+
// A tool in an ANCESTOR node_modules must be invisible to the single-dir
|
|
83
|
+
// scan (this is the property that keeps a host-dir scan from pulling in
|
|
84
|
+
// $HOME/node_modules).
|
|
85
|
+
writePkg(join(testDir, 'node_modules', 'ancestor-tool'), {
|
|
86
|
+
name: 'ancestor-tool',
|
|
87
|
+
opensipTools: { kind: 'tool' },
|
|
88
|
+
});
|
|
89
|
+
const emptyHost = join(testDir, 'host', 'node_modules');
|
|
90
|
+
mkdirSync(emptyHost, { recursive: true });
|
|
91
|
+
expect(discoverPackagesInNodeModules(emptyHost, 'tool')).toEqual([]);
|
|
92
|
+
});
|
|
93
|
+
it('returns [] when the dir does not exist', () => {
|
|
94
|
+
expect(discoverPackagesInNodeModules(join(testDir, 'nope'), 'tool')).toEqual([]);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe('discoverToolPackagesFromAnchors', () => {
|
|
98
|
+
it('merges walkUp + scanDir sources, first-occurrence-wins on duplicate name', () => {
|
|
99
|
+
// Project-local host dir (scanDir) pins audit@local; the cwd walk also
|
|
100
|
+
// sees a different copy — the earlier source wins.
|
|
101
|
+
writePkg(join(testDir, 'proj', '.runtime', 'plugins', 'tool', 'node_modules', 'audit'), {
|
|
102
|
+
name: 'audit',
|
|
103
|
+
opensipTools: { kind: 'tool' },
|
|
104
|
+
});
|
|
105
|
+
writePkg(join(testDir, 'cwd', 'node_modules', 'audit'), {
|
|
106
|
+
name: 'audit',
|
|
107
|
+
opensipTools: { kind: 'tool' },
|
|
108
|
+
});
|
|
109
|
+
writePkg(join(testDir, 'cwd', 'node_modules', 'other'), {
|
|
110
|
+
name: 'other',
|
|
111
|
+
opensipTools: { kind: 'tool' },
|
|
112
|
+
});
|
|
113
|
+
const out = discoverToolPackagesFromAnchors([
|
|
114
|
+
{ dir: join(testDir, 'proj', '.runtime', 'plugins', 'tool'), mode: 'scanDir' },
|
|
115
|
+
{ dir: join(testDir, 'cwd'), mode: 'walkUp' },
|
|
116
|
+
]);
|
|
117
|
+
expect(out.map((t) => t.name).sort()).toEqual(['audit', 'other']);
|
|
118
|
+
// First source (project-local scanDir) wins for the duplicate name.
|
|
119
|
+
expect(out.find((t) => t.name === 'audit')?.packageDir).toBe(join(testDir, 'proj', '.runtime', 'plugins', 'tool', 'node_modules', 'audit'));
|
|
120
|
+
});
|
|
121
|
+
it('returns [] when no source yields a tool', () => {
|
|
122
|
+
expect(discoverToolPackagesFromAnchors([{ dir: join(testDir, 'empty'), mode: 'walkUp' }])).toEqual([]);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
describe('readToolPackageMetadata', () => {
|
|
126
|
+
let pkgDir;
|
|
127
|
+
beforeEach(() => {
|
|
128
|
+
pkgDir = join(testDir, 'pkg');
|
|
129
|
+
mkdirSync(pkgDir, { recursive: true });
|
|
130
|
+
});
|
|
131
|
+
it('returns undefined when neither package.json nor an authored sidecar is present', () => {
|
|
132
|
+
expect(readToolPackageMetadata(pkgDir)).toBeUndefined();
|
|
133
|
+
});
|
|
134
|
+
it('returns undefined when package.json is malformed', () => {
|
|
135
|
+
writeFileSync(join(pkgDir, 'package.json'), '{');
|
|
136
|
+
expect(readToolPackageMetadata(pkgDir)).toBeUndefined();
|
|
137
|
+
});
|
|
138
|
+
it('returns undefined when name is missing', () => {
|
|
139
|
+
writeFileSync(join(pkgDir, 'package.json'), JSON.stringify({}));
|
|
140
|
+
expect(readToolPackageMetadata(pkgDir)).toBeUndefined();
|
|
141
|
+
});
|
|
142
|
+
it('falls back to ./index.js when no exports or main are declared', () => {
|
|
143
|
+
writeFileSync(join(pkgDir, 'package.json'), JSON.stringify({ name: 'pkg' }));
|
|
144
|
+
expect(readToolPackageMetadata(pkgDir)).toEqual({
|
|
145
|
+
name: 'pkg',
|
|
146
|
+
mainEntry: join(pkgDir, './index.js'),
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
it('uses pkg.main when declared', () => {
|
|
150
|
+
writeFileSync(join(pkgDir, 'package.json'), JSON.stringify({ name: 'pkg', main: './lib/main.js' }));
|
|
151
|
+
expect(readToolPackageMetadata(pkgDir)?.mainEntry).toBe(join(pkgDir, './lib/main.js'));
|
|
152
|
+
});
|
|
153
|
+
it('uses string-form exports when declared', () => {
|
|
154
|
+
writeFileSync(join(pkgDir, 'package.json'), JSON.stringify({ name: 'pkg', exports: './dist/index.js' }));
|
|
155
|
+
expect(readToolPackageMetadata(pkgDir)?.mainEntry).toBe(join(pkgDir, './dist/index.js'));
|
|
156
|
+
});
|
|
157
|
+
it('uses object-form exports["."]', () => {
|
|
158
|
+
writeFileSync(join(pkgDir, 'package.json'), JSON.stringify({ name: 'pkg', exports: { '.': './dist/dot.js' } }));
|
|
159
|
+
expect(readToolPackageMetadata(pkgDir)?.mainEntry).toBe(join(pkgDir, './dist/dot.js'));
|
|
160
|
+
});
|
|
161
|
+
it('uses exports["."]["import"] when present', () => {
|
|
162
|
+
writeFileSync(join(pkgDir, 'package.json'), JSON.stringify({
|
|
163
|
+
name: 'pkg',
|
|
164
|
+
exports: { '.': { import: './dist/import.js', default: './dist/default.js' } },
|
|
165
|
+
}));
|
|
166
|
+
expect(readToolPackageMetadata(pkgDir)?.mainEntry).toBe(join(pkgDir, './dist/import.js'));
|
|
167
|
+
});
|
|
168
|
+
it('falls back to exports["."]["default"] when import is absent', () => {
|
|
169
|
+
writeFileSync(join(pkgDir, 'package.json'), JSON.stringify({
|
|
170
|
+
name: 'pkg',
|
|
171
|
+
exports: { '.': { default: './dist/default.js' } },
|
|
172
|
+
}));
|
|
173
|
+
expect(readToolPackageMetadata(pkgDir)?.mainEntry).toBe(join(pkgDir, './dist/default.js'));
|
|
174
|
+
});
|
|
175
|
+
// Authored tools have NO package.json — entry resolves from the sidecar.
|
|
176
|
+
it("resolves an authored sidecar's `main` when there is no package.json", () => {
|
|
177
|
+
writeFileSync(join(pkgDir, 'opensip-tool.manifest.json'), JSON.stringify({
|
|
178
|
+
kind: 'tool',
|
|
179
|
+
id: 'audit',
|
|
180
|
+
name: '@my-co/audit',
|
|
181
|
+
version: '1.0.0',
|
|
182
|
+
main: './dist/audit.js',
|
|
183
|
+
commands: [],
|
|
184
|
+
}));
|
|
185
|
+
expect(readToolPackageMetadata(pkgDir)).toEqual({
|
|
186
|
+
name: '@my-co/audit',
|
|
187
|
+
mainEntry: join(pkgDir, './dist/audit.js'),
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
it('defaults an authored sidecar entry to ./index.js when `main` is absent, naming from id', () => {
|
|
191
|
+
writeFileSync(join(pkgDir, 'opensip-tool.manifest.json'), JSON.stringify({ kind: 'tool', id: 'bench', version: '1.0.0', commands: [] }));
|
|
192
|
+
expect(readToolPackageMetadata(pkgDir)).toEqual({
|
|
193
|
+
name: 'bench',
|
|
194
|
+
mainEntry: join(pkgDir, './index.js'),
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
it('prefers a real package.json over an authored sidecar when both exist', () => {
|
|
198
|
+
writeFileSync(join(pkgDir, 'package.json'), JSON.stringify({ name: 'pkg', main: './dist/pkg.js' }));
|
|
199
|
+
writeFileSync(join(pkgDir, 'opensip-tool.manifest.json'), JSON.stringify({ kind: 'tool', id: 'audit', main: './dist/sidecar.js', commands: [] }));
|
|
200
|
+
expect(readToolPackageMetadata(pkgDir)?.mainEntry).toBe(join(pkgDir, './dist/pkg.js'));
|
|
201
|
+
});
|
|
202
|
+
it('returns undefined for a malformed authored sidecar (no resolvable entry)', () => {
|
|
203
|
+
writeFileSync(join(pkgDir, 'opensip-tool.manifest.json'), '{not-json');
|
|
204
|
+
expect(readToolPackageMetadata(pkgDir)).toBeUndefined();
|
|
205
|
+
});
|
|
206
|
+
it('returns undefined when the authored sidecar parses to a non-object (e.g. a JSON array)', () => {
|
|
207
|
+
writeFileSync(join(pkgDir, 'opensip-tool.manifest.json'), JSON.stringify(['not', 'an', 'object']));
|
|
208
|
+
expect(readToolPackageMetadata(pkgDir)).toBeUndefined();
|
|
209
|
+
});
|
|
210
|
+
it('falls back to the directory name when the sidecar has neither name nor id', () => {
|
|
211
|
+
writeFileSync(join(pkgDir, 'opensip-tool.manifest.json'), JSON.stringify({ kind: 'tool', main: './dist/x.js', commands: [] }));
|
|
212
|
+
expect(readToolPackageMetadata(pkgDir)?.name).toBe('pkg');
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
//# sourceMappingURL=tool-package-discovery.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-package-discovery.test.js","sourceRoot":"","sources":["../../../src/plugins/__tests__/tool-package-discovery.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Authored-Tool sidecar discovery (kernel).
|
|
3
|
+
*
|
|
4
|
+
* Finds authored `Tool` sidecars — `<root>/<name>/opensip-tool.manifest.json`
|
|
5
|
+
* — under a single authored `tools/` root and returns source-tagged-by-caller
|
|
6
|
+
* candidates the host can route through admission.
|
|
7
|
+
*
|
|
8
|
+
* This is the authored analogue of the npm-marker walker
|
|
9
|
+
* (`marker-discovery.ts`): a `safeReaddir` over a directory, skipping
|
|
10
|
+
* dotfiles, returning `{name, dir}`. It differs in *shape* — it scans an
|
|
11
|
+
* authored `tools/` root (one level: each child dir is a tool), not a
|
|
12
|
+
* `node_modules` tree, and keys on the SIDECAR FILE's presence rather than a
|
|
13
|
+
* `package.json` marker. It reads NO module code (identity only) and does NOT
|
|
14
|
+
* call `loadToolManifest`/`admitTool` — discovery is *location*, admission is
|
|
15
|
+
* the caller's concern.
|
|
16
|
+
*
|
|
17
|
+
* The walk is intentionally SOURCE-AGNOSTIC: it takes a plain `string` root
|
|
18
|
+
* and never infers a `ToolSource` from path shape. The caller assigns the
|
|
19
|
+
* source per root (project root ⇒ `project-local`, global root ⇒
|
|
20
|
+
* `user-global`), so one walk serves both authored roots and the source tag
|
|
21
|
+
* is carried, never inferred inside the kernel.
|
|
22
|
+
*/
|
|
23
|
+
/** A directory under an authored `tools/` root that carries a sidecar manifest. */
|
|
24
|
+
export interface AuthoredToolCandidate {
|
|
25
|
+
/** Directory containing the opensip-tool.manifest.json sidecar. */
|
|
26
|
+
readonly dir: string;
|
|
27
|
+
/** Directory name (the authored tool's folder name) — for diagnostics. */
|
|
28
|
+
readonly name: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Discover authored-Tool sidecars under an authored `tools/` root.
|
|
32
|
+
*
|
|
33
|
+
* Lists `root`'s immediate children (skipping dotfiles) and returns each child
|
|
34
|
+
* directory that contains an `opensip-tool.manifest.json` sidecar. A missing
|
|
35
|
+
* root yields `[]` (best-effort, mirrors `discoverPackagesInNodeModules`'s
|
|
36
|
+
* `existsSync` guard). Presence of the sidecar IS the discovery signal —
|
|
37
|
+
* validity/admission is the caller's concern, so the walk stays pure and
|
|
38
|
+
* source-agnostic (one walk serves the project and global roots).
|
|
39
|
+
*
|
|
40
|
+
* @param root An authored `tools/` root — `<project>/opensip-cli/tools` or
|
|
41
|
+
* `~/.opensip-cli/tools`. NOT inferred-from here; the caller assigns the
|
|
42
|
+
* `ToolSource` per root.
|
|
43
|
+
*/
|
|
44
|
+
export declare function discoverAuthoredToolSidecars(root: string): AuthoredToolCandidate[];
|
|
45
|
+
//# sourceMappingURL=authored-tool-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authored-tool-discovery.d.ts","sourceRoot":"","sources":["../../src/plugins/authored-tool-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAUH,mFAAmF;AACnF,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAelF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Authored-Tool sidecar discovery (kernel).
|
|
3
|
+
*
|
|
4
|
+
* Finds authored `Tool` sidecars — `<root>/<name>/opensip-tool.manifest.json`
|
|
5
|
+
* — under a single authored `tools/` root and returns source-tagged-by-caller
|
|
6
|
+
* candidates the host can route through admission.
|
|
7
|
+
*
|
|
8
|
+
* This is the authored analogue of the npm-marker walker
|
|
9
|
+
* (`marker-discovery.ts`): a `safeReaddir` over a directory, skipping
|
|
10
|
+
* dotfiles, returning `{name, dir}`. It differs in *shape* — it scans an
|
|
11
|
+
* authored `tools/` root (one level: each child dir is a tool), not a
|
|
12
|
+
* `node_modules` tree, and keys on the SIDECAR FILE's presence rather than a
|
|
13
|
+
* `package.json` marker. It reads NO module code (identity only) and does NOT
|
|
14
|
+
* call `loadToolManifest`/`admitTool` — discovery is *location*, admission is
|
|
15
|
+
* the caller's concern.
|
|
16
|
+
*
|
|
17
|
+
* The walk is intentionally SOURCE-AGNOSTIC: it takes a plain `string` root
|
|
18
|
+
* and never infers a `ToolSource` from path shape. The caller assigns the
|
|
19
|
+
* source per root (project root ⇒ `project-local`, global root ⇒
|
|
20
|
+
* `user-global`), so one walk serves both authored roots and the source tag
|
|
21
|
+
* is carried, never inferred inside the kernel.
|
|
22
|
+
*/
|
|
23
|
+
import { existsSync } from 'node:fs';
|
|
24
|
+
import { join } from 'node:path';
|
|
25
|
+
import { logger } from '../lib/logger.js';
|
|
26
|
+
import { PROJECT_LOCAL_MANIFEST_FILE } from './manifest-loader.js';
|
|
27
|
+
import { safeReaddir } from './node-modules-walk.js';
|
|
28
|
+
/**
|
|
29
|
+
* Discover authored-Tool sidecars under an authored `tools/` root.
|
|
30
|
+
*
|
|
31
|
+
* Lists `root`'s immediate children (skipping dotfiles) and returns each child
|
|
32
|
+
* directory that contains an `opensip-tool.manifest.json` sidecar. A missing
|
|
33
|
+
* root yields `[]` (best-effort, mirrors `discoverPackagesInNodeModules`'s
|
|
34
|
+
* `existsSync` guard). Presence of the sidecar IS the discovery signal —
|
|
35
|
+
* validity/admission is the caller's concern, so the walk stays pure and
|
|
36
|
+
* source-agnostic (one walk serves the project and global roots).
|
|
37
|
+
*
|
|
38
|
+
* @param root An authored `tools/` root — `<project>/opensip-cli/tools` or
|
|
39
|
+
* `~/.opensip-cli/tools`. NOT inferred-from here; the caller assigns the
|
|
40
|
+
* `ToolSource` per root.
|
|
41
|
+
*/
|
|
42
|
+
export function discoverAuthoredToolSidecars(root) {
|
|
43
|
+
if (!existsSync(root))
|
|
44
|
+
return [];
|
|
45
|
+
const out = [];
|
|
46
|
+
for (const name of safeReaddir(root)) {
|
|
47
|
+
if (name.startsWith('.'))
|
|
48
|
+
continue;
|
|
49
|
+
const dir = join(root, name);
|
|
50
|
+
if (!existsSync(join(dir, PROJECT_LOCAL_MANIFEST_FILE)))
|
|
51
|
+
continue;
|
|
52
|
+
out.push({ dir, name });
|
|
53
|
+
logger.debug({
|
|
54
|
+
evt: 'core.authored_tool.discovered',
|
|
55
|
+
module: 'core:plugins',
|
|
56
|
+
dir,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=authored-tool-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authored-tool-discovery.js","sourceRoot":"","sources":["../../src/plugins/authored-tool-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAUrD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAAY;IACvD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC;YAAE,SAAS;QAClE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC;YACX,GAAG,EAAE,+BAA+B;YACpC,MAAM,EAAE,cAAc;YACtB,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview The generic capability-contribution discovery substrate (§5.3).
|
|
3
|
+
*
|
|
4
|
+
* One walker that, given a capability domain's manifest-declared discovery
|
|
5
|
+
* descriptor + resolved preferences, finds every contributing package (by marker
|
|
6
|
+
* OR name-pattern), dynamic-imports each one, reads its declared export, and
|
|
7
|
+
* yields the raw contributions. It hoists the machinery previously split across
|
|
8
|
+
* three bespoke loaders — fitness's `check-loader.ts`, simulation's
|
|
9
|
+
* `scenario-package-discovery.ts`, and graph's `graph-adapter-discovery.ts`.
|
|
10
|
+
*
|
|
11
|
+
* Pure infra: it takes NO scope, touches NO registry, and imports NO tool. It
|
|
12
|
+
* yields `{ contribution, sourcePackage }` records that the host's capability
|
|
13
|
+
* registry routes to the owning tool's registrar (Phase 2). Per-package failures
|
|
14
|
+
* are isolated — a bad export or an import that throws skips that package with a
|
|
15
|
+
* structured diagnostic, never the whole run.
|
|
16
|
+
*/
|
|
17
|
+
import type { CapabilityDiscoveryDescriptor } from '../tools/capability.js';
|
|
18
|
+
/**
|
|
19
|
+
* Resolved discovery preferences for one domain. The host resolves these from
|
|
20
|
+
* project config (Phase 3) against the descriptor's `configKeys`; the substrate
|
|
21
|
+
* just applies them. Absent `packages` means "auto-discover"; `autoDiscover:
|
|
22
|
+
* false` disables it; an explicit `packages` list always wins over auto-discovery.
|
|
23
|
+
*/
|
|
24
|
+
export interface CapabilityDiscoveryPreferences {
|
|
25
|
+
/** Explicit package-name list. When present (even empty), auto-discovery is skipped. */
|
|
26
|
+
readonly packages?: readonly string[];
|
|
27
|
+
/** Disable auto-discovery (name-pattern/marker walk). Default: true (enabled). */
|
|
28
|
+
readonly autoDiscover?: boolean;
|
|
29
|
+
/** name-pattern mode only: scopes to scan, overriding the descriptor's `defaultScopes`. */
|
|
30
|
+
readonly scopes?: readonly string[];
|
|
31
|
+
}
|
|
32
|
+
/** A raw contribution yielded by discovery, tagged with the package it came from. */
|
|
33
|
+
export interface RawCapabilityContribution {
|
|
34
|
+
/** The contribution value read from the package's declared export (unvalidated). */
|
|
35
|
+
readonly contribution: unknown;
|
|
36
|
+
/** npm package name the contribution came from, for diagnostics + provenance. */
|
|
37
|
+
readonly sourcePackage: string;
|
|
38
|
+
/**
|
|
39
|
+
* The domain this contribution routes to, when it is NOT the primary domain
|
|
40
|
+
* being discovered — i.e. a co-contribution (§5.3): a `recipes` export read from
|
|
41
|
+
* a fit-pack package, routed to the `fit-recipe` domain. `undefined` means the
|
|
42
|
+
* primary domain (`descriptor`'s own domain).
|
|
43
|
+
*/
|
|
44
|
+
readonly targetDomainId?: string;
|
|
45
|
+
}
|
|
46
|
+
/** A structured non-fatal discovery diagnostic (missing package, bad export, import throw). */
|
|
47
|
+
export interface CapabilityDiscoveryDiagnostic {
|
|
48
|
+
/** Stable event id, e.g. `capability.discovery.package_not_resolved`. */
|
|
49
|
+
readonly evt: string;
|
|
50
|
+
/** The package the diagnostic concerns, when known. */
|
|
51
|
+
readonly packageName?: string;
|
|
52
|
+
/** Human-readable message. */
|
|
53
|
+
readonly message: string;
|
|
54
|
+
}
|
|
55
|
+
/** Options for {@link discoverCapabilityContributions}. */
|
|
56
|
+
export interface DiscoverCapabilityContributionsOptions {
|
|
57
|
+
/** The domain's manifest-declared discovery descriptor. */
|
|
58
|
+
readonly descriptor: CapabilityDiscoveryDescriptor;
|
|
59
|
+
/** Discovery anchor for consumer-owned packages (the project root). */
|
|
60
|
+
readonly projectDir: string;
|
|
61
|
+
/**
|
|
62
|
+
* Discovery anchor for BUILT-IN packages (those under `descriptor.builtinScope`).
|
|
63
|
+
* When the descriptor declares a `builtinScope`, packages under that scope are
|
|
64
|
+
* resolved from here (the CLI's own install tree) instead of `projectDir`, so a
|
|
65
|
+
* project pinning an older copy cannot shadow the bundled built-in. Ignored when
|
|
66
|
+
* the descriptor declares no `builtinScope`.
|
|
67
|
+
*/
|
|
68
|
+
readonly cliDir?: string;
|
|
69
|
+
/** Resolved preferences (explicit list / opt-out / scopes). */
|
|
70
|
+
readonly preferences?: CapabilityDiscoveryPreferences;
|
|
71
|
+
/** Sink for non-fatal per-package diagnostics. */
|
|
72
|
+
readonly onDiagnostic?: (diagnostic: CapabilityDiscoveryDiagnostic) => void;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Discover + load every contributing package for one capability domain and
|
|
76
|
+
* return the flat list of raw contributions. See the file header for the
|
|
77
|
+
* contract; per-package failures are isolated via `onDiagnostic`.
|
|
78
|
+
*/
|
|
79
|
+
export declare function discoverCapabilityContributions(options: DiscoverCapabilityContributionsOptions): Promise<RawCapabilityContribution[]>;
|
|
80
|
+
//# sourceMappingURL=capability-discovery.d.ts.map
|