@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,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract the inner `__version` (if present and valid) from an opaque tool-owned payload.
|
|
3
|
+
*
|
|
4
|
+
* This is the single canonical helper for the payload schema evolution convention.
|
|
5
|
+
* It is intentionally pure, tiny, and has zero knowledge of any tool's payload shape
|
|
6
|
+
* (FitnessSessionPayload, GraphSessionPayload, etc.). Callers in session-store and
|
|
7
|
+
* the individual tools use it to decide legacy projection vs. current shape.
|
|
8
|
+
*
|
|
9
|
+
* Rules (defensive, per plan hardening):
|
|
10
|
+
* - Only plain objects are inspected.
|
|
11
|
+
* - `__version` must be a positive finite number.
|
|
12
|
+
* - Missing, non-numeric, <=0, Infinity, NaN → undefined (treated as legacy v1 by callers).
|
|
13
|
+
*/
|
|
14
|
+
export function extractPayloadVersion(payload) {
|
|
15
|
+
if (!payload || typeof payload !== 'object') {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
const v = payload.__version;
|
|
19
|
+
if (typeof v === 'number' && Number.isFinite(v) && v > 0) {
|
|
20
|
+
return v;
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=payload-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload-version.js","sourceRoot":"","sources":["../../src/lib/payload-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,CAAC,GAAI,OAAmC,CAAC,SAAS,CAAC;IACzD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Detect orphaned `opensip-cli/` subtrees between cwd
|
|
3
|
+
* and the discovered project root. These are fossils from pre-discovery
|
|
4
|
+
* runs where `opensip fit` was invoked from a subdirectory and
|
|
5
|
+
* silently scaffolded a phantom project tree at that subdir.
|
|
6
|
+
*
|
|
7
|
+
* Conservative: only flag directories where `opensip-cli/` contains
|
|
8
|
+
* EXCLUSIVELY `.runtime/` (plus optional dotfiles). Any other entry
|
|
9
|
+
* (a `fit/`, a `sim/`, a `opensip-cli.config.yml` at that level) is
|
|
10
|
+
* treated as legitimate user content and ignored — never warned about.
|
|
11
|
+
*
|
|
12
|
+
* Warn-only: returns paths. Callers print warnings to stderr but never
|
|
13
|
+
* auto-delete. Auto-deletion of anything called `opensip-cli/` would
|
|
14
|
+
* be too dangerous to do without explicit user invocation.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Walk every ancestor between `cwd` (inclusive) and `root` (exclusive)
|
|
18
|
+
* and return the list of paths that host a phantom `opensip-cli/`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function detectPhantomRuntimes(cwd: string, root: string): readonly string[];
|
|
21
|
+
//# sourceMappingURL=phantom-detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phantom-detect.d.ts","sourceRoot":"","sources":["../../src/lib/phantom-detect.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;GAcG;AASH;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CA0BlF"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// @fitness-ignore-file error-handling-quality -- isPhantomDir/safeIsDirectory are filesystem probes where exception → false is the function's contract; the caller treats absence/permission errors identically to "not a phantom dir".
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Detect orphaned `opensip-cli/` subtrees between cwd
|
|
4
|
+
* and the discovered project root. These are fossils from pre-discovery
|
|
5
|
+
* runs where `opensip fit` was invoked from a subdirectory and
|
|
6
|
+
* silently scaffolded a phantom project tree at that subdir.
|
|
7
|
+
*
|
|
8
|
+
* Conservative: only flag directories where `opensip-cli/` contains
|
|
9
|
+
* EXCLUSIVELY `.runtime/` (plus optional dotfiles). Any other entry
|
|
10
|
+
* (a `fit/`, a `sim/`, a `opensip-cli.config.yml` at that level) is
|
|
11
|
+
* treated as legitimate user content and ignored — never warned about.
|
|
12
|
+
*
|
|
13
|
+
* Warn-only: returns paths. Callers print warnings to stderr but never
|
|
14
|
+
* auto-delete. Auto-deletion of anything called `opensip-cli/` would
|
|
15
|
+
* be too dangerous to do without explicit user invocation.
|
|
16
|
+
*/
|
|
17
|
+
import { readdirSync, statSync } from 'node:fs';
|
|
18
|
+
import { dirname, join, resolve, sep } from 'node:path';
|
|
19
|
+
import { logger } from './logger.js';
|
|
20
|
+
const MODULE_TAG = 'core:phantom-detect';
|
|
21
|
+
/**
|
|
22
|
+
* Walk every ancestor between `cwd` (inclusive) and `root` (exclusive)
|
|
23
|
+
* and return the list of paths that host a phantom `opensip-cli/`.
|
|
24
|
+
*/
|
|
25
|
+
export function detectPhantomRuntimes(cwd, root) {
|
|
26
|
+
const start = resolve(cwd);
|
|
27
|
+
const stop = resolve(root);
|
|
28
|
+
if (!start.startsWith(stop + sep) && start !== stop) {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
const phantoms = [];
|
|
32
|
+
let dir = start;
|
|
33
|
+
while (dir !== stop) {
|
|
34
|
+
if (isPhantomDir(dir)) {
|
|
35
|
+
phantoms.push(join(dir, 'opensip-cli'));
|
|
36
|
+
}
|
|
37
|
+
const parent = dirname(dir);
|
|
38
|
+
if (parent === dir)
|
|
39
|
+
break; // hit filesystem root unexpectedly
|
|
40
|
+
dir = parent;
|
|
41
|
+
}
|
|
42
|
+
if (phantoms.length > 0) {
|
|
43
|
+
logger.info({
|
|
44
|
+
evt: 'cli.phantom.runtime.detected',
|
|
45
|
+
module: MODULE_TAG,
|
|
46
|
+
cwd: start,
|
|
47
|
+
root: stop,
|
|
48
|
+
phantoms,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return phantoms;
|
|
52
|
+
}
|
|
53
|
+
function isPhantomDir(dir) {
|
|
54
|
+
const innerDir = join(dir, 'opensip-cli');
|
|
55
|
+
if (!safeIsDirectory(innerDir))
|
|
56
|
+
return false;
|
|
57
|
+
let entries;
|
|
58
|
+
try {
|
|
59
|
+
entries = readdirSync(innerDir);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
// Conservative: only flag if `.runtime` is the only non-dotfile entry.
|
|
65
|
+
const meaningful = entries.filter((name) => !name.startsWith('.') || name === '.runtime');
|
|
66
|
+
return meaningful.length === 1 && meaningful[0] === '.runtime';
|
|
67
|
+
}
|
|
68
|
+
function safeIsDirectory(path) {
|
|
69
|
+
try {
|
|
70
|
+
return statSync(path).isDirectory();
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=phantom-detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phantom-detect.js","sourceRoot":"","sources":["../../src/lib/phantom-detect.ts"],"names":[],"mappings":"AAAA,wOAAwO;AACxO;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAExD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,UAAU,GAAG,qBAAqB,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW,EAAE,IAAY;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC;QACpB,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM,CAAC,mCAAmC;QAC9D,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC;YACV,GAAG,EAAE,8BAA8B;YACnC,MAAM,EAAE,UAAU;YAClB,GAAG,EAAE,KAAK;YACV,IAAI,EAAE,IAAI;YACV,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAC1C,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,uEAAuE;IACvE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,UAAU,CAAC,CAAC;IAC1F,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC;AACjE,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Project-context resolver.
|
|
3
|
+
*
|
|
4
|
+
* Walks up from `cwd` looking for an opensip-cli project (i.e. an
|
|
5
|
+
* ancestor where `resolveProjectConfigPath` would succeed). Returns a
|
|
6
|
+
* single `ProjectContext` carrying everything downstream consumers
|
|
7
|
+
* need: cwd, cwdExplicit, projectRoot, configPath, walkedUp, scope.
|
|
8
|
+
*
|
|
9
|
+
* The walker leans on `resolveProjectConfigPath` at each ancestor so
|
|
10
|
+
* the `package.json#opensip-cli.configPath` pointer is honored
|
|
11
|
+
* everywhere it works at a single directory (matches existing
|
|
12
|
+
* `resolveProjectConfigPath` contract).
|
|
13
|
+
*
|
|
14
|
+
* Strict `--config` semantics: when the caller passes `explicitConfigPath`
|
|
15
|
+
* and `resolveProjectConfigPath` rejects it at the starting ancestor,
|
|
16
|
+
* the resolver propagates the underlying `ValidationError` rather than
|
|
17
|
+
* silently walking up. Silently walking up would let `--config /typo.yml`
|
|
18
|
+
* land on some unrelated ancestor's config — exactly the surprise this
|
|
19
|
+
* module exists to prevent. Implicit ancestor discovery still swallows
|
|
20
|
+
* "no config at this directory" errors (that's the walking signal).
|
|
21
|
+
*/
|
|
22
|
+
/** Resolved per-invocation project context — read by every downstream consumer. */
|
|
23
|
+
export interface ProjectContext {
|
|
24
|
+
/** Literal cwd at invocation (or the value of an explicit `--cwd` flag). Absolute. */
|
|
25
|
+
readonly cwd: string;
|
|
26
|
+
/** True when the user passed `--cwd` on the command line (vs Commander defaulting it). */
|
|
27
|
+
readonly cwdExplicit: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Resolved project root. If an ancestor has a config file, that ancestor.
|
|
30
|
+
* Otherwise equals `cwd` (no discovery; commands like `init` fall back to here).
|
|
31
|
+
*/
|
|
32
|
+
readonly projectRoot: string;
|
|
33
|
+
/** Resolved config file path at `projectRoot`, or undefined when no project was found. */
|
|
34
|
+
readonly configPath: string | undefined;
|
|
35
|
+
/** Ancestor steps walked from `cwd` to `projectRoot`. 0 when cwd is the root. */
|
|
36
|
+
readonly walkedUp: number;
|
|
37
|
+
/** `'project'` iff a config was discovered; `'none'` otherwise. */
|
|
38
|
+
readonly scope: 'project' | 'none';
|
|
39
|
+
}
|
|
40
|
+
/** Input to {@link resolveProjectContext}: cwd plus optional overrides controlling discovery. */
|
|
41
|
+
export interface ResolveProjectContextInput {
|
|
42
|
+
/** Literal cwd or `--cwd` value. */
|
|
43
|
+
readonly cwd: string;
|
|
44
|
+
/** True when `--cwd` was passed on the command line. */
|
|
45
|
+
readonly cwdExplicit: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Optional `--config <path>` override. Honored at the *start* ancestor only.
|
|
48
|
+
* Strict: if provided and the path doesn't resolve, the resolver throws.
|
|
49
|
+
*/
|
|
50
|
+
readonly explicitConfigPath?: string;
|
|
51
|
+
/**
|
|
52
|
+
* Absolute path beyond which the walker stops. Used by tests to prevent the
|
|
53
|
+
* walker from escaping fixture directories and finding the real repo's config
|
|
54
|
+
* above. Defaults to the filesystem root.
|
|
55
|
+
*/
|
|
56
|
+
readonly stopAt?: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Resolve the project context for an invocation. Pure function — no side
|
|
60
|
+
* effects beyond debug logging.
|
|
61
|
+
*
|
|
62
|
+
* @throws {ValidationError} when `explicitConfigPath` is provided and
|
|
63
|
+
* `resolveProjectConfigPath` rejects it at the starting ancestor.
|
|
64
|
+
*/
|
|
65
|
+
export declare function resolveProjectContext(input: ResolveProjectContextInput): ProjectContext;
|
|
66
|
+
//# sourceMappingURL=project-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-context.d.ts","sourceRoot":"","sources":["../../src/lib/project-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAYH,mFAAmF;AACnF,MAAM,WAAW,cAAc;IAC7B,sFAAsF;IACtF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,0FAA0F;IAC1F,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,0FAA0F;IAC1F,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,iFAAiF;IACjF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC;CACpC;AAED,iGAAiG;AACjG,MAAM,WAAW,0BAA0B;IACzC,oCAAoC;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,GAAG,cAAc,CAgDvF"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Project-context resolver.
|
|
3
|
+
*
|
|
4
|
+
* Walks up from `cwd` looking for an opensip-cli project (i.e. an
|
|
5
|
+
* ancestor where `resolveProjectConfigPath` would succeed). Returns a
|
|
6
|
+
* single `ProjectContext` carrying everything downstream consumers
|
|
7
|
+
* need: cwd, cwdExplicit, projectRoot, configPath, walkedUp, scope.
|
|
8
|
+
*
|
|
9
|
+
* The walker leans on `resolveProjectConfigPath` at each ancestor so
|
|
10
|
+
* the `package.json#opensip-cli.configPath` pointer is honored
|
|
11
|
+
* everywhere it works at a single directory (matches existing
|
|
12
|
+
* `resolveProjectConfigPath` contract).
|
|
13
|
+
*
|
|
14
|
+
* Strict `--config` semantics: when the caller passes `explicitConfigPath`
|
|
15
|
+
* and `resolveProjectConfigPath` rejects it at the starting ancestor,
|
|
16
|
+
* the resolver propagates the underlying `ValidationError` rather than
|
|
17
|
+
* silently walking up. Silently walking up would let `--config /typo.yml`
|
|
18
|
+
* land on some unrelated ancestor's config — exactly the surprise this
|
|
19
|
+
* module exists to prevent. Implicit ancestor discovery still swallows
|
|
20
|
+
* "no config at this directory" errors (that's the walking signal).
|
|
21
|
+
*/
|
|
22
|
+
import { existsSync } from 'node:fs';
|
|
23
|
+
import { dirname, resolve } from 'node:path';
|
|
24
|
+
import { resolveProjectConfigPath } from '../config-resolution.js';
|
|
25
|
+
import { ValidationError } from './errors.js';
|
|
26
|
+
import { logger } from './logger.js';
|
|
27
|
+
const MODULE_TAG = 'core:project-context';
|
|
28
|
+
/**
|
|
29
|
+
* Resolve the project context for an invocation. Pure function — no side
|
|
30
|
+
* effects beyond debug logging.
|
|
31
|
+
*
|
|
32
|
+
* @throws {ValidationError} when `explicitConfigPath` is provided and
|
|
33
|
+
* `resolveProjectConfigPath` rejects it at the starting ancestor.
|
|
34
|
+
*/
|
|
35
|
+
export function resolveProjectContext(input) {
|
|
36
|
+
const start = resolve(input.cwd);
|
|
37
|
+
const stop = input.stopAt ? resolve(input.stopAt) : null;
|
|
38
|
+
let dir = start;
|
|
39
|
+
let prev = '';
|
|
40
|
+
let walkedUp = 0;
|
|
41
|
+
while (dir !== prev) {
|
|
42
|
+
const explicit = walkedUp === 0 ? input.explicitConfigPath : undefined;
|
|
43
|
+
const configPath = tryResolveConfig(dir, explicit);
|
|
44
|
+
if (configPath) {
|
|
45
|
+
logger.debug({
|
|
46
|
+
evt: 'project.root.resolved',
|
|
47
|
+
module: MODULE_TAG,
|
|
48
|
+
cwd: start,
|
|
49
|
+
projectRoot: dir,
|
|
50
|
+
configPath,
|
|
51
|
+
walkedUp,
|
|
52
|
+
});
|
|
53
|
+
return {
|
|
54
|
+
cwd: start,
|
|
55
|
+
cwdExplicit: input.cwdExplicit,
|
|
56
|
+
projectRoot: dir,
|
|
57
|
+
configPath,
|
|
58
|
+
walkedUp,
|
|
59
|
+
scope: 'project',
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
if (stop && dir === stop)
|
|
63
|
+
break;
|
|
64
|
+
prev = dir;
|
|
65
|
+
dir = dirname(dir);
|
|
66
|
+
walkedUp++;
|
|
67
|
+
}
|
|
68
|
+
logger.debug({
|
|
69
|
+
evt: 'project.root.not-found',
|
|
70
|
+
module: MODULE_TAG,
|
|
71
|
+
cwd: start,
|
|
72
|
+
walkedTo: dir,
|
|
73
|
+
});
|
|
74
|
+
return {
|
|
75
|
+
cwd: start,
|
|
76
|
+
cwdExplicit: input.cwdExplicit,
|
|
77
|
+
projectRoot: start,
|
|
78
|
+
configPath: undefined,
|
|
79
|
+
walkedUp: 0,
|
|
80
|
+
scope: 'none',
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Wrap `resolveProjectConfigPath` so a throw at an ancestor during
|
|
85
|
+
* implicit walking is just "no config here." When the caller passed
|
|
86
|
+
* `--config <path>`, an unresolvable path is a USER ERROR and must
|
|
87
|
+
* propagate — silently walking up would land on the wrong config.
|
|
88
|
+
*/
|
|
89
|
+
function tryResolveConfig(dir, explicit) {
|
|
90
|
+
try {
|
|
91
|
+
const resolved = resolveProjectConfigPath(dir, explicit);
|
|
92
|
+
return existsSync(resolved) ? resolved : undefined;
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (explicit !== undefined)
|
|
96
|
+
throw error;
|
|
97
|
+
// Only swallow the terminal "no config discovered at this root after all
|
|
98
|
+
// attempts (default + package pointer + etc.)". This allows upward walking
|
|
99
|
+
// when a directory simply has no OpenSIP config.
|
|
100
|
+
//
|
|
101
|
+
// Propagate other ValidationErrors, notably:
|
|
102
|
+
// - broken package.json#opensip-cli.configPath pointers ("points to a file that does not exist")
|
|
103
|
+
// - other resolution problems
|
|
104
|
+
// So a misconfigured pointer fails loudly instead of the walk silently
|
|
105
|
+
// adopting an ancestor project's config.
|
|
106
|
+
if (error instanceof ValidationError && /No .*? found\. Checked:/.test(error.message)) {
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=project-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-context.js","sourceRoot":"","sources":["../../src/lib/project-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* deriveRecipeId — the one recipe-id derivation every domain shares (north-star
|
|
3
|
+
* §5.8, launch).
|
|
4
|
+
*
|
|
5
|
+
* Previously the three domains derived ids divergently — fitness `RCP_${name}`,
|
|
6
|
+
* graph `GRCP_${name}`, sim hardcoded `BSCP_default`. The format is identical
|
|
7
|
+
* (`<prefix>_<name>`); this hoists it so the derivation is one function, not three
|
|
8
|
+
* inline templates. The prefix stays per-domain (so existing ids are unchanged),
|
|
9
|
+
* but the scheme is shared.
|
|
10
|
+
*/
|
|
11
|
+
/** Derive a recipe id as `<prefix>_<name>` (e.g. `deriveRecipeId('RCP', 'example')`). */
|
|
12
|
+
export declare function deriveRecipeId(prefix: string, name: string): string;
|
|
13
|
+
//# sourceMappingURL=recipe-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe-id.d.ts","sourceRoot":"","sources":["../../src/lib/recipe-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,yFAAyF;AACzF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* deriveRecipeId — the one recipe-id derivation every domain shares (north-star
|
|
3
|
+
* §5.8, launch).
|
|
4
|
+
*
|
|
5
|
+
* Previously the three domains derived ids divergently — fitness `RCP_${name}`,
|
|
6
|
+
* graph `GRCP_${name}`, sim hardcoded `BSCP_default`. The format is identical
|
|
7
|
+
* (`<prefix>_<name>`); this hoists it so the derivation is one function, not three
|
|
8
|
+
* inline templates. The prefix stays per-domain (so existing ids are unchanged),
|
|
9
|
+
* but the scheme is shared.
|
|
10
|
+
*/
|
|
11
|
+
/** Derive a recipe id as `<prefix>_<name>` (e.g. `deriveRecipeId('RCP', 'example')`). */
|
|
12
|
+
export function deriveRecipeId(prefix, name) {
|
|
13
|
+
return `${prefix}_${name}`;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=recipe-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe-id.js","sourceRoot":"","sources":["../../src/lib/recipe-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,yFAAyF;AACzF,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,IAAY;IACzD,OAAO,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Generic registry — the single base class for every
|
|
3
|
+
* registry in the workspace.
|
|
4
|
+
*
|
|
5
|
+
* Replaces the ten registry classes catalogued in
|
|
6
|
+
* `docs/plans/ready/architecture-runscope-and-registry/phase-0-audit-and-design.md`.
|
|
7
|
+
*
|
|
8
|
+
* Owns: by-id Map, by-name Map, the closed `DuplicatePolicy` branch,
|
|
9
|
+
* the orthogonal `nameCollisionMode` guard, and the structured-event
|
|
10
|
+
* emitter. Domain-specific indices (extension, alias, slug, scope)
|
|
11
|
+
* live in thin subclasses or alongside; the base must stay
|
|
12
|
+
* tool-agnostic.
|
|
13
|
+
*/
|
|
14
|
+
import { type Logger } from './logger.js';
|
|
15
|
+
/**
|
|
16
|
+
* Closed union of duplicate-handling policies.
|
|
17
|
+
*
|
|
18
|
+
* - `warn-first-wins` — log warning, keep incumbent (ToolRegistry,
|
|
19
|
+
* LanguageRegistry, graph rules).
|
|
20
|
+
* - `throw` — throw `ValidationError` on duplicate id/name
|
|
21
|
+
* (FitnessRecipeRegistry, SimulationRecipeRegistry).
|
|
22
|
+
* - `overwrite` — replace incumbent silently (graph lang-adapter
|
|
23
|
+
* registry).
|
|
24
|
+
* - `silent-skip` — ignore the second registration (CheckRegistry,
|
|
25
|
+
* TargetRegistry, scenarios).
|
|
26
|
+
* - `allow-internal` — first call bypasses the guard; subsequent
|
|
27
|
+
* duplicates throw unless `{ internal: true }` is passed. Reserved
|
|
28
|
+
* for "register builtins without flag" patterns; current consumers
|
|
29
|
+
* use per-call `{ internal: true }` against a strict default.
|
|
30
|
+
*/
|
|
31
|
+
export type DuplicatePolicy = 'warn-first-wins' | 'throw' | 'overwrite' | 'silent-skip' | 'allow-internal';
|
|
32
|
+
/** Minimum shape any registry item must satisfy. */
|
|
33
|
+
export interface Registerable {
|
|
34
|
+
readonly id: string;
|
|
35
|
+
readonly name: string;
|
|
36
|
+
readonly tags?: readonly string[];
|
|
37
|
+
}
|
|
38
|
+
/** Constructor options for `Registry<T>`. */
|
|
39
|
+
export interface RegistryOptions {
|
|
40
|
+
/** Human-readable module label used in structured events / errors. */
|
|
41
|
+
readonly module: string;
|
|
42
|
+
readonly duplicatePolicy: DuplicatePolicy;
|
|
43
|
+
/** Event prefix — events emit as `<prefix>.duplicate` etc. */
|
|
44
|
+
readonly evtPrefix: string;
|
|
45
|
+
/** Validation-error code surfaced when policy === 'throw'. */
|
|
46
|
+
readonly validationCode?: string;
|
|
47
|
+
/**
|
|
48
|
+
* Name-collision policy (orthogonal to `duplicatePolicy`). When set
|
|
49
|
+
* to `'throw'`, registering an item whose `name` is already used by
|
|
50
|
+
* a DIFFERENT id throws a `ValidationError`. Default `'allow'`
|
|
51
|
+
* falls through to `duplicatePolicy`.
|
|
52
|
+
*/
|
|
53
|
+
readonly nameCollisionMode?: 'allow' | 'throw';
|
|
54
|
+
/** Logger override — defaults to the workspace singleton. */
|
|
55
|
+
readonly logger?: Logger;
|
|
56
|
+
}
|
|
57
|
+
/** Per-call options. */
|
|
58
|
+
export interface RegisterCallOptions {
|
|
59
|
+
/**
|
|
60
|
+
* Bypass the duplicate guard for this single call. Use for
|
|
61
|
+
* built-in seeding. Ignored if no duplicate condition is reached.
|
|
62
|
+
*/
|
|
63
|
+
readonly internal?: boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Source package id — included in structured events for
|
|
66
|
+
* third-party warnings.
|
|
67
|
+
*/
|
|
68
|
+
readonly sourcePackage?: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Generic id+name+tag registry with a closed duplicate-handling
|
|
72
|
+
* policy and structured-event emission. Use composition (one
|
|
73
|
+
* `Registry<T>` instance per registry) or inheritance (extend
|
|
74
|
+
* the class) — both are supported.
|
|
75
|
+
*/
|
|
76
|
+
export declare class Registry<T extends Registerable> {
|
|
77
|
+
private readonly byId;
|
|
78
|
+
private readonly byName;
|
|
79
|
+
private readonly module;
|
|
80
|
+
private readonly duplicatePolicy;
|
|
81
|
+
private readonly evtPrefix;
|
|
82
|
+
private readonly validationCode;
|
|
83
|
+
private readonly nameCollisionMode;
|
|
84
|
+
private readonly logger;
|
|
85
|
+
constructor(opts: RegistryOptions);
|
|
86
|
+
register(item: T, callOpts?: RegisterCallOptions): void;
|
|
87
|
+
registerAll(items: readonly T[], callOpts?: RegisterCallOptions): void;
|
|
88
|
+
get(idOrName: string): T | undefined;
|
|
89
|
+
getById(id: string): T | undefined;
|
|
90
|
+
getByName(name: string): T | undefined;
|
|
91
|
+
has(idOrName: string): boolean;
|
|
92
|
+
getAll(): readonly T[];
|
|
93
|
+
getByTag(tag: string): readonly T[];
|
|
94
|
+
remove(id: string): boolean;
|
|
95
|
+
clear(): void;
|
|
96
|
+
get size(): number;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAA2B,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAEnE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,eAAe,GACvB,iBAAiB,GACjB,OAAO,GACP,WAAW,GACX,aAAa,GACb,gBAAgB,CAAC;AAErB,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,6CAA6C;AAC7C,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8DAA8D;IAC9D,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;OAKG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC/C,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAwB;AACxB,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;;;GAKG;AACH,qBAAa,QAAQ,CAAC,CAAC,SAAS,YAAY;IAC1C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,IAAI,EAAE,eAAe;IAgBjC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,GAAE,mBAAwB,GAAG,IAAI;IAoF3D,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAE,mBAAwB,GAAG,IAAI;IAI1E,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAIpC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAIlC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAItC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9B,MAAM,IAAI,SAAS,CAAC,EAAE;IAItB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE;IAInC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAQ3B,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
// @fitness-ignore-file toctou-race-condition -- registry register() reads byName.get then byName.set on local Maps owned by the Registry instance; entirely synchronous, no async gap, safe in single-threaded Node.js
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Generic registry — the single base class for every
|
|
4
|
+
* registry in the workspace.
|
|
5
|
+
*
|
|
6
|
+
* Replaces the ten registry classes catalogued in
|
|
7
|
+
* `docs/plans/ready/architecture-runscope-and-registry/phase-0-audit-and-design.md`.
|
|
8
|
+
*
|
|
9
|
+
* Owns: by-id Map, by-name Map, the closed `DuplicatePolicy` branch,
|
|
10
|
+
* the orthogonal `nameCollisionMode` guard, and the structured-event
|
|
11
|
+
* emitter. Domain-specific indices (extension, alias, slug, scope)
|
|
12
|
+
* live in thin subclasses or alongside; the base must stay
|
|
13
|
+
* tool-agnostic.
|
|
14
|
+
*/
|
|
15
|
+
import { ValidationError } from './errors.js';
|
|
16
|
+
import { logger as defaultLogger } from './logger.js';
|
|
17
|
+
/**
|
|
18
|
+
* Generic id+name+tag registry with a closed duplicate-handling
|
|
19
|
+
* policy and structured-event emission. Use composition (one
|
|
20
|
+
* `Registry<T>` instance per registry) or inheritance (extend
|
|
21
|
+
* the class) — both are supported.
|
|
22
|
+
*/
|
|
23
|
+
export class Registry {
|
|
24
|
+
byId = new Map();
|
|
25
|
+
byName = new Map();
|
|
26
|
+
module;
|
|
27
|
+
duplicatePolicy;
|
|
28
|
+
evtPrefix;
|
|
29
|
+
validationCode;
|
|
30
|
+
nameCollisionMode;
|
|
31
|
+
logger;
|
|
32
|
+
constructor(opts) {
|
|
33
|
+
this.module = opts.module;
|
|
34
|
+
this.duplicatePolicy = opts.duplicatePolicy;
|
|
35
|
+
this.evtPrefix = opts.evtPrefix;
|
|
36
|
+
this.validationCode = opts.validationCode;
|
|
37
|
+
this.nameCollisionMode = opts.nameCollisionMode ?? 'allow';
|
|
38
|
+
this.logger = opts.logger ?? defaultLogger;
|
|
39
|
+
}
|
|
40
|
+
// register() centralizes the five DuplicatePolicy branches + orthogonal nameCollisionMode
|
|
41
|
+
// guard + internal bypass. The switch + nested ifs for the "exact same item" allow-internal
|
|
42
|
+
// fast-path and overwrite cleanup produce inherent branching complexity (19). It is the
|
|
43
|
+
// single implementation of the registry contract used by *all* registries in the system;
|
|
44
|
+
// extracting sub-fns would fragment the policy table that must be reviewed as a unit for
|
|
45
|
+
// ADR-0023/ADR-0037/etc. correctness. Disable scoped to this method only.
|
|
46
|
+
/* eslint-disable sonarjs/cognitive-complexity -- single registry contract: DuplicatePolicy table and nameCollision guard reviewed as a unit (rationale above) */
|
|
47
|
+
register(item, callOpts = {}) {
|
|
48
|
+
const { byId, byName } = this;
|
|
49
|
+
const internal = callOpts.internal === true;
|
|
50
|
+
// Name-collision guard (orthogonal to duplicate policy). Only
|
|
51
|
+
// fires when the incumbent has a DIFFERENT id from `item.id`
|
|
52
|
+
// (same-id same-name is handled by the duplicate-policy branch).
|
|
53
|
+
const nameIncumbent = byName.get(item.name);
|
|
54
|
+
if (nameIncumbent &&
|
|
55
|
+
nameIncumbent.id !== item.id &&
|
|
56
|
+
this.nameCollisionMode === 'throw' &&
|
|
57
|
+
!internal) {
|
|
58
|
+
// @fitness-ignore-next-line result-pattern-consistency -- registration guard, throw is appropriate
|
|
59
|
+
throw new ValidationError(`${this.module} registry: name collision — '${item.name}' is already registered with id '${nameIncumbent.id}', cannot register id '${item.id}' with the same name`, { code: this.validationCode ?? 'VALIDATION.REGISTRY.NAME_COLLISION' });
|
|
60
|
+
}
|
|
61
|
+
// Duplicate-condition detection: same id, OR same name with a
|
|
62
|
+
// different id (regardless of nameCollisionMode, because we
|
|
63
|
+
// can't have two entries sharing the byName slot).
|
|
64
|
+
const idIncumbent = byId.get(item.id);
|
|
65
|
+
const isDup = idIncumbent !== undefined || (nameIncumbent !== undefined && nameIncumbent.id !== item.id);
|
|
66
|
+
if (isDup && !internal) {
|
|
67
|
+
switch (this.duplicatePolicy) {
|
|
68
|
+
case 'silent-skip': {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
case 'warn-first-wins': {
|
|
72
|
+
this.logger.warn({
|
|
73
|
+
evt: `${this.evtPrefix}.duplicate`,
|
|
74
|
+
module: this.module,
|
|
75
|
+
id: item.id,
|
|
76
|
+
name: item.name,
|
|
77
|
+
sourcePackage: callOpts.sourcePackage,
|
|
78
|
+
msg: `${item.id} already registered — keeping incumbent`,
|
|
79
|
+
});
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
case 'throw': {
|
|
83
|
+
// @fitness-ignore-next-line result-pattern-consistency -- registration guard, throw is appropriate
|
|
84
|
+
throw new ValidationError(`${this.module}: '${item.name}' (${item.id}) already registered`, { code: this.validationCode ?? 'VALIDATION.REGISTRY.DUPLICATE' });
|
|
85
|
+
}
|
|
86
|
+
case 'overwrite': {
|
|
87
|
+
// Drop stale mappings before re-insert so {byId, byName}
|
|
88
|
+
// stay consistent (e.g. overwrite-by-id when the new
|
|
89
|
+
// entry has a different name).
|
|
90
|
+
if (idIncumbent && idIncumbent.name !== item.name) {
|
|
91
|
+
byName.delete(idIncumbent.name);
|
|
92
|
+
}
|
|
93
|
+
if (nameIncumbent && nameIncumbent.id !== item.id) {
|
|
94
|
+
byId.delete(nameIncumbent.id);
|
|
95
|
+
}
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
case 'allow-internal': {
|
|
99
|
+
// First non-internal write was allowed. Subsequent duplicates throw unless { internal: true }.
|
|
100
|
+
// Harden for idempotent re-registers (tests, reloads): if the exact same item (id+name), allow silently.
|
|
101
|
+
const existing = idIncumbent ?? nameIncumbent;
|
|
102
|
+
if (existing && existing.id === item.id && existing.name === item.name) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// @fitness-ignore-next-line result-pattern-consistency -- registration guard, throw is appropriate
|
|
106
|
+
throw new ValidationError(`${this.module}: '${item.name}' (${item.id}) already registered (allow-internal: only the first write is permitted without { internal: true })`, { code: this.validationCode ?? 'VALIDATION.REGISTRY.DUPLICATE' });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
byId.set(item.id, item);
|
|
111
|
+
byName.set(item.name, item);
|
|
112
|
+
}
|
|
113
|
+
/* eslint-enable sonarjs/cognitive-complexity */
|
|
114
|
+
registerAll(items, callOpts = {}) {
|
|
115
|
+
for (const item of items)
|
|
116
|
+
this.register(item, callOpts);
|
|
117
|
+
}
|
|
118
|
+
get(idOrName) {
|
|
119
|
+
return this.byId.get(idOrName) ?? this.byName.get(idOrName);
|
|
120
|
+
}
|
|
121
|
+
getById(id) {
|
|
122
|
+
return this.byId.get(id);
|
|
123
|
+
}
|
|
124
|
+
getByName(name) {
|
|
125
|
+
return this.byName.get(name);
|
|
126
|
+
}
|
|
127
|
+
has(idOrName) {
|
|
128
|
+
return this.byId.has(idOrName) || this.byName.has(idOrName);
|
|
129
|
+
}
|
|
130
|
+
getAll() {
|
|
131
|
+
return [...this.byId.values()];
|
|
132
|
+
}
|
|
133
|
+
getByTag(tag) {
|
|
134
|
+
return this.getAll().filter((item) => item.tags?.includes(tag));
|
|
135
|
+
}
|
|
136
|
+
remove(id) {
|
|
137
|
+
const item = this.byId.get(id);
|
|
138
|
+
if (!item)
|
|
139
|
+
return false;
|
|
140
|
+
this.byId.delete(id);
|
|
141
|
+
this.byName.delete(item.name);
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
clear() {
|
|
145
|
+
this.byId.clear();
|
|
146
|
+
this.byName.clear();
|
|
147
|
+
}
|
|
148
|
+
get size() {
|
|
149
|
+
return this.byId.size;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"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"}
|