@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,212 @@
|
|
|
1
|
+
import { trace } from '@opentelemetry/api';
|
|
2
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
3
|
+
import { currentTraceparent, getTracer, withSpan, withSpanAsync } from '../../lib/telemetry.js';
|
|
4
|
+
/**
|
|
5
|
+
* Kernel-level telemetry tests assert the **no-op-until-SDK contract** — the
|
|
6
|
+
* load-bearing guarantee for standalone users. core carries only
|
|
7
|
+
* `@opentelemetry/api` and NO SDK, so these tests deliberately never register a
|
|
8
|
+
* provider: they prove `withSpan` runs `fn`, returns its value, and emits
|
|
9
|
+
* nothing through the API's no-op tracer.
|
|
10
|
+
*
|
|
11
|
+
* Span-CAPTURE behavior (assertions that a real span is produced with the
|
|
12
|
+
* expected name/attributes) is tested in `opensip-cli`, where the OTel
|
|
13
|
+
* SDK + InMemorySpanExporter legitimately live. Putting span-capture tests
|
|
14
|
+
* there keeps the SDK out of the kernel — see
|
|
15
|
+
* `packages/cli/src/telemetry/__tests__/`.
|
|
16
|
+
*/
|
|
17
|
+
describe('telemetry primitive (no-op-until-SDK contract)', () => {
|
|
18
|
+
it('getTracer returns a tracer whose spans are non-recording when no SDK is registered', () => {
|
|
19
|
+
// No provider registered ⇒ the global is the API's no-op tracer.
|
|
20
|
+
expect(trace.getTracerProvider().constructor.name).toMatch(/Noop|Proxy/);
|
|
21
|
+
let recording;
|
|
22
|
+
getTracer('test-scope').startActiveSpan('probe', (span) => {
|
|
23
|
+
recording = span.isRecording();
|
|
24
|
+
span.end();
|
|
25
|
+
});
|
|
26
|
+
// The no-op span never records.
|
|
27
|
+
expect(recording).toBe(false);
|
|
28
|
+
});
|
|
29
|
+
it('withSpan runs fn and returns its value with no SDK registered', () => {
|
|
30
|
+
const sentinel = { value: 42 };
|
|
31
|
+
const result = withSpan('test-scope', 'unit', () => sentinel);
|
|
32
|
+
expect(result).toBe(sentinel);
|
|
33
|
+
});
|
|
34
|
+
it('withSpan passes the (no-op) span to fn', () => {
|
|
35
|
+
let received;
|
|
36
|
+
withSpan('test-scope', 'unit', (span) => {
|
|
37
|
+
received = span;
|
|
38
|
+
});
|
|
39
|
+
expect(received).toBeDefined();
|
|
40
|
+
// It is a span object (has the span surface) even when no-op.
|
|
41
|
+
expect(typeof received.end).toBe('function');
|
|
42
|
+
});
|
|
43
|
+
it('withSpan applies attributes before fn runs (no-op span accepts them without throwing)', () => {
|
|
44
|
+
const setAttributes = vi.fn();
|
|
45
|
+
// Stub the tracer so we can observe attribute application on the no-op path.
|
|
46
|
+
const span = {
|
|
47
|
+
setAttributes,
|
|
48
|
+
setStatus: vi.fn(),
|
|
49
|
+
recordException: vi.fn(),
|
|
50
|
+
end: vi.fn(),
|
|
51
|
+
isRecording: () => false,
|
|
52
|
+
};
|
|
53
|
+
const spy = vi.spyOn(trace, 'getTracer').mockReturnValue({
|
|
54
|
+
startActiveSpan: ((_name, fn) => fn(span)),
|
|
55
|
+
});
|
|
56
|
+
try {
|
|
57
|
+
withSpan('test-scope', 'unit', () => 'ok', { 'k.count': 3, 'k.flag': true });
|
|
58
|
+
expect(setAttributes).toHaveBeenCalledWith({ 'k.count': 3, 'k.flag': true });
|
|
59
|
+
expect(span.end).toHaveBeenCalledTimes(1);
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
spy.mockRestore();
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
it('withSpan stringifies a thrown non-Error before recording it', () => {
|
|
66
|
+
const recordException = vi.fn();
|
|
67
|
+
const span = {
|
|
68
|
+
setAttributes: vi.fn(),
|
|
69
|
+
setStatus: vi.fn(),
|
|
70
|
+
recordException,
|
|
71
|
+
end: vi.fn(),
|
|
72
|
+
isRecording: () => false,
|
|
73
|
+
};
|
|
74
|
+
const spy = vi.spyOn(trace, 'getTracer').mockReturnValue({
|
|
75
|
+
startActiveSpan: ((_name, fn) => fn(span)),
|
|
76
|
+
});
|
|
77
|
+
try {
|
|
78
|
+
expect(() => withSpan('test-scope', 'unit', () => {
|
|
79
|
+
// Throwing a bare string exercises the non-Error normalization branch.
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/only-throw-error -- exercising non-Error normalization
|
|
81
|
+
throw 'string boom';
|
|
82
|
+
})).toThrow('string boom');
|
|
83
|
+
expect(recordException).toHaveBeenCalledWith('string boom');
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
spy.mockRestore();
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
it('withSpan records the exception, sets ERROR status, ends the span, and rethrows', () => {
|
|
90
|
+
const recordException = vi.fn();
|
|
91
|
+
const setStatus = vi.fn();
|
|
92
|
+
const end = vi.fn();
|
|
93
|
+
const span = {
|
|
94
|
+
setAttributes: vi.fn(),
|
|
95
|
+
setStatus,
|
|
96
|
+
recordException,
|
|
97
|
+
end,
|
|
98
|
+
isRecording: () => false,
|
|
99
|
+
};
|
|
100
|
+
const spy = vi.spyOn(trace, 'getTracer').mockReturnValue({
|
|
101
|
+
startActiveSpan: ((_name, fn) => fn(span)),
|
|
102
|
+
});
|
|
103
|
+
const boom = new Error('boom');
|
|
104
|
+
try {
|
|
105
|
+
expect(() => withSpan('test-scope', 'unit', () => {
|
|
106
|
+
throw boom;
|
|
107
|
+
})).toThrow(boom);
|
|
108
|
+
expect(recordException).toHaveBeenCalledWith(boom);
|
|
109
|
+
// SpanStatusCode.ERROR === 2
|
|
110
|
+
expect(setStatus).toHaveBeenCalledWith({ code: 2 });
|
|
111
|
+
expect(end).toHaveBeenCalledTimes(1);
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
spy.mockRestore();
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
describe('withSpanAsync (async-aware span)', () => {
|
|
119
|
+
it('awaits fn and returns its resolved value with no SDK registered', async () => {
|
|
120
|
+
const sentinel = { value: 7 };
|
|
121
|
+
const result = await withSpanAsync('test-scope', 'unit', async () => {
|
|
122
|
+
await Promise.resolve();
|
|
123
|
+
return sentinel;
|
|
124
|
+
});
|
|
125
|
+
expect(result).toBe(sentinel);
|
|
126
|
+
});
|
|
127
|
+
it('ends the span only after the awaited work settles (not when the callback returns)', async () => {
|
|
128
|
+
const events = [];
|
|
129
|
+
const span = {
|
|
130
|
+
setAttributes: vi.fn(),
|
|
131
|
+
setStatus: vi.fn(),
|
|
132
|
+
recordException: vi.fn(),
|
|
133
|
+
end: vi.fn(() => events.push('end')),
|
|
134
|
+
isRecording: () => false,
|
|
135
|
+
};
|
|
136
|
+
const spy = vi.spyOn(trace, 'getTracer').mockReturnValue({
|
|
137
|
+
startActiveSpan: ((_name, fn) => fn(span)),
|
|
138
|
+
});
|
|
139
|
+
try {
|
|
140
|
+
await withSpanAsync('test-scope', 'unit', async () => {
|
|
141
|
+
await Promise.resolve();
|
|
142
|
+
events.push('work-done');
|
|
143
|
+
});
|
|
144
|
+
// The span must end AFTER the awaited work, proving it spans the await.
|
|
145
|
+
expect(events).toEqual(['work-done', 'end']);
|
|
146
|
+
}
|
|
147
|
+
finally {
|
|
148
|
+
spy.mockRestore();
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
it('stringifies a non-Error async rejection before recording it', async () => {
|
|
152
|
+
const recordException = vi.fn();
|
|
153
|
+
const span = {
|
|
154
|
+
setAttributes: vi.fn(),
|
|
155
|
+
setStatus: vi.fn(),
|
|
156
|
+
recordException,
|
|
157
|
+
end: vi.fn(),
|
|
158
|
+
isRecording: () => false,
|
|
159
|
+
};
|
|
160
|
+
const spy = vi.spyOn(trace, 'getTracer').mockReturnValue({
|
|
161
|
+
startActiveSpan: ((_name, fn) => fn(span)),
|
|
162
|
+
});
|
|
163
|
+
try {
|
|
164
|
+
await expect(withSpanAsync('test-scope', 'unit', async () => {
|
|
165
|
+
await Promise.resolve();
|
|
166
|
+
// eslint-disable-next-line @typescript-eslint/only-throw-error -- exercising non-Error normalization
|
|
167
|
+
throw 'async string boom';
|
|
168
|
+
})).rejects.toBe('async string boom');
|
|
169
|
+
expect(recordException).toHaveBeenCalledWith('async string boom');
|
|
170
|
+
}
|
|
171
|
+
finally {
|
|
172
|
+
spy.mockRestore();
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
it('records an async rejection, sets ERROR status, ends the span, and rejects', async () => {
|
|
176
|
+
const recordException = vi.fn();
|
|
177
|
+
const setStatus = vi.fn();
|
|
178
|
+
const end = vi.fn();
|
|
179
|
+
const span = {
|
|
180
|
+
setAttributes: vi.fn(),
|
|
181
|
+
setStatus,
|
|
182
|
+
recordException,
|
|
183
|
+
end,
|
|
184
|
+
isRecording: () => false,
|
|
185
|
+
};
|
|
186
|
+
const spy = vi.spyOn(trace, 'getTracer').mockReturnValue({
|
|
187
|
+
startActiveSpan: ((_name, fn) => fn(span)),
|
|
188
|
+
});
|
|
189
|
+
const boom = new Error('async boom');
|
|
190
|
+
try {
|
|
191
|
+
await expect(withSpanAsync('test-scope', 'unit', async () => {
|
|
192
|
+
await Promise.resolve();
|
|
193
|
+
throw boom;
|
|
194
|
+
})).rejects.toBe(boom);
|
|
195
|
+
expect(recordException).toHaveBeenCalledWith(boom);
|
|
196
|
+
expect(setStatus).toHaveBeenCalledWith({ code: 2 }); // SpanStatusCode.ERROR
|
|
197
|
+
expect(end).toHaveBeenCalledTimes(1);
|
|
198
|
+
}
|
|
199
|
+
finally {
|
|
200
|
+
spy.mockRestore();
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
describe('currentTraceparent (subprocess context propagation)', () => {
|
|
205
|
+
it('returns undefined when no SDK/propagator is registered (standalone runs)', () => {
|
|
206
|
+
// No provider/propagator ⇒ the no-op tracer yields an invalid span context,
|
|
207
|
+
// which the W3C propagator declines to serialize. Standalone runs spawning
|
|
208
|
+
// a child thus pass no TRACEPARENT, and the child emits no spans.
|
|
209
|
+
expect(currentTraceparent()).toBeUndefined();
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
//# sourceMappingURL=telemetry.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/telemetry.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* verdict-policy — the host-owned findings gate (ADR-0035). Pins the truth table
|
|
3
|
+
* for `policyPasses` and the reserved-key resolution + per-key `{1,0}` fallback
|
|
4
|
+
* of `resolveVerdictPolicy`, so a future edit can't silently drift the gate.
|
|
5
|
+
*/
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=verdict-policy.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verdict-policy.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/verdict-policy.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* verdict-policy — the host-owned findings gate (ADR-0035). Pins the truth table
|
|
3
|
+
* for `policyPasses` and the reserved-key resolution + per-key `{1,0}` fallback
|
|
4
|
+
* of `resolveVerdictPolicy`, so a future edit can't silently drift the gate.
|
|
5
|
+
*/
|
|
6
|
+
import { describe, expect, it } from 'vitest';
|
|
7
|
+
import { LanguageRegistry } from '../../languages/registry.js';
|
|
8
|
+
import { ToolRegistry } from '../../tools/registry.js';
|
|
9
|
+
import { RunScope, runWithScopeSync } from '../run-scope.js';
|
|
10
|
+
import { DEFAULT_FAIL_ON_DEGRADED, HOST_VERDICT_POLICY_FALLBACK, policyPasses, resolveFailOnDegraded, resolveVerdictPolicy, } from '../verdict-policy.js';
|
|
11
|
+
/** Fresh scope with empty registries — core-internal stand-in for the retired
|
|
12
|
+
* `test-utils/with-scope` sugar (ADR-0040: the shared helper moved to
|
|
13
|
+
* `@opensip-cli/test-support`, which core cannot dev-depend on — that
|
|
14
|
+
* package depends on core, so the edge would make the package graph cyclic). */
|
|
15
|
+
const makeTestScope = () => new RunScope({ languages: new LanguageRegistry(), tools: new ToolRegistry() });
|
|
16
|
+
describe('policyPasses', () => {
|
|
17
|
+
// [errors, warnings, failOnErrors, failOnWarnings, expectedPasses]
|
|
18
|
+
const cases = [
|
|
19
|
+
// {1,0} fallback: fail on any error, warnings informational.
|
|
20
|
+
[0, 0, 1, 0, true],
|
|
21
|
+
[1, 0, 1, 0, false],
|
|
22
|
+
[0, 5, 1, 0, true], // warning-only run PASSES with failOnWarnings:0
|
|
23
|
+
// failOnErrors:0 disables the error gate.
|
|
24
|
+
[3, 0, 0, 0, true],
|
|
25
|
+
// failOnWarnings:k boundary (k active when > 0).
|
|
26
|
+
[0, 1, 1, 2, true], // 1 < 2 → pass
|
|
27
|
+
[0, 2, 1, 2, false], // 2 >= 2 → fail
|
|
28
|
+
[0, 1, 1, 1, false], // 1 >= 1 → fail
|
|
29
|
+
// error gate boundary.
|
|
30
|
+
[2, 0, 3, 0, true], // 2 < 3 → pass
|
|
31
|
+
[3, 0, 3, 0, false], // 3 >= 3 → fail
|
|
32
|
+
];
|
|
33
|
+
for (const [errors, warnings, failOnErrors, failOnWarnings, expected] of cases) {
|
|
34
|
+
it(`(${errors}e,${warnings}w) vs {${failOnErrors},${failOnWarnings}} → ${expected ? 'PASS' : 'FAIL'}`, () => {
|
|
35
|
+
const policy = { failOnErrors, failOnWarnings };
|
|
36
|
+
expect(policyPasses({ errors, warnings }, policy)).toBe(expected);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
/** Resolve a tool's policy inside a scope carrying the given resolved toolConfig. */
|
|
41
|
+
function resolveWith(toolConfig, ns = 'graph') {
|
|
42
|
+
const scope = makeTestScope();
|
|
43
|
+
if (toolConfig !== undefined)
|
|
44
|
+
Object.assign(scope, { toolConfig });
|
|
45
|
+
return runWithScopeSync(scope, () => resolveVerdictPolicy(ns));
|
|
46
|
+
}
|
|
47
|
+
describe('resolveVerdictPolicy', () => {
|
|
48
|
+
it('returns the host fallback {1,0} when the namespace declares neither key', () => {
|
|
49
|
+
expect(resolveWith({ graph: {} })).toEqual(HOST_VERDICT_POLICY_FALLBACK);
|
|
50
|
+
});
|
|
51
|
+
it('returns the host fallback {1,0} when there is no toolConfig at all', () => {
|
|
52
|
+
expect(resolveWith(undefined)).toEqual(HOST_VERDICT_POLICY_FALLBACK);
|
|
53
|
+
});
|
|
54
|
+
it('reads both reserved keys when declared', () => {
|
|
55
|
+
expect(resolveWith({ fitness: { failOnErrors: 0, failOnWarnings: 2 } }, 'fitness')).toEqual({
|
|
56
|
+
failOnErrors: 0,
|
|
57
|
+
failOnWarnings: 2,
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
it('falls back per-key: a tool may declare one key and inherit the other', () => {
|
|
61
|
+
expect(resolveWith({ graph: { failOnWarnings: 3 } })).toEqual({
|
|
62
|
+
failOnErrors: 1, // inherited
|
|
63
|
+
failOnWarnings: 3, // declared
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
it('ignores non-integer / negative values, falling back to the host default', () => {
|
|
67
|
+
expect(resolveWith({ graph: { failOnErrors: -1, failOnWarnings: 1.5 } })).toEqual(HOST_VERDICT_POLICY_FALLBACK);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
/** Resolve failOnDegraded inside a scope carrying the given resolved toolConfig. */
|
|
71
|
+
function degradedWith(toolConfig, ns = 'graph') {
|
|
72
|
+
const scope = makeTestScope();
|
|
73
|
+
if (toolConfig !== undefined)
|
|
74
|
+
Object.assign(scope, { toolConfig });
|
|
75
|
+
return runWithScopeSync(scope, () => resolveFailOnDegraded(ns));
|
|
76
|
+
}
|
|
77
|
+
describe('resolveFailOnDegraded (ADR-0036)', () => {
|
|
78
|
+
it('defaults to true when no toolConfig / no key is present', () => {
|
|
79
|
+
expect(DEFAULT_FAIL_ON_DEGRADED).toBe(true);
|
|
80
|
+
expect(degradedWith(undefined)).toBe(true);
|
|
81
|
+
expect(degradedWith({ graph: {} })).toBe(true);
|
|
82
|
+
});
|
|
83
|
+
it('honours an explicit boolean (ratchet-as-report when false)', () => {
|
|
84
|
+
expect(degradedWith({ graph: { failOnDegraded: false } })).toBe(false);
|
|
85
|
+
expect(degradedWith({ graph: { failOnDegraded: true } })).toBe(true);
|
|
86
|
+
});
|
|
87
|
+
it('ignores a non-boolean value, falling back to the default', () => {
|
|
88
|
+
expect(degradedWith({ graph: { failOnDegraded: 'yes' } })).toBe(true);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
//# sourceMappingURL=verdict-policy.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verdict-policy.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/verdict-policy.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/yaml.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tests for `readYamlFile` — the permissive helper used
|
|
3
|
+
* by plugin-discovery sites.
|
|
4
|
+
*/
|
|
5
|
+
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
6
|
+
import { tmpdir } from 'node:os';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
9
|
+
import { SystemError, ValidationError } from '../errors.js';
|
|
10
|
+
import { readYamlFile, readYamlFileOrThrow } from '../yaml.js';
|
|
11
|
+
let testDir;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
testDir = mkdtempSync(join(tmpdir(), 'opensip-yaml-test-'));
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
rmSync(testDir, { recursive: true, force: true });
|
|
17
|
+
});
|
|
18
|
+
describe('readYamlFile', () => {
|
|
19
|
+
it('returns undefined when the file does not exist', () => {
|
|
20
|
+
expect(readYamlFile(join(testDir, 'missing.yml'))).toBeUndefined();
|
|
21
|
+
});
|
|
22
|
+
it('returns undefined for malformed YAML', () => {
|
|
23
|
+
const path = join(testDir, 'bad.yml');
|
|
24
|
+
writeFileSync(path, 'a: [unterminated');
|
|
25
|
+
expect(readYamlFile(path)).toBeUndefined();
|
|
26
|
+
});
|
|
27
|
+
it('returns the parsed document for valid YAML', () => {
|
|
28
|
+
const path = join(testDir, 'good.yml');
|
|
29
|
+
writeFileSync(path, 'plugins:\n fit:\n - one\n - two\n');
|
|
30
|
+
expect(readYamlFile(path)).toEqual({ plugins: { fit: ['one', 'two'] } });
|
|
31
|
+
});
|
|
32
|
+
it('returns null when the document is an empty YAML', () => {
|
|
33
|
+
const path = join(testDir, 'empty.yml');
|
|
34
|
+
writeFileSync(path, '');
|
|
35
|
+
// js-yaml returns undefined for completely empty input
|
|
36
|
+
expect(readYamlFile(path)).toBeUndefined();
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe('readYamlFileOrThrow (audit-round-2 Finding F)', () => {
|
|
40
|
+
it('returns the parsed document for valid YAML', () => {
|
|
41
|
+
const path = join(testDir, 'good.yml');
|
|
42
|
+
writeFileSync(path, 'fitness:\n failOnErrors: 1\n');
|
|
43
|
+
expect(readYamlFileOrThrow(path)).toEqual({ fitness: { failOnErrors: 1 } });
|
|
44
|
+
});
|
|
45
|
+
it('returns {} for empty YAML rather than undefined', () => {
|
|
46
|
+
const path = join(testDir, 'empty.yml');
|
|
47
|
+
writeFileSync(path, '');
|
|
48
|
+
expect(readYamlFileOrThrow(path)).toEqual({});
|
|
49
|
+
});
|
|
50
|
+
it('throws ValidationError for a missing file with loader attribution', () => {
|
|
51
|
+
const path = join(testDir, 'missing.yml');
|
|
52
|
+
expect(() => readYamlFileOrThrow(path, { loader: 'signalers' })).toThrow(ValidationError);
|
|
53
|
+
});
|
|
54
|
+
it('throws ValidationError for malformed YAML', () => {
|
|
55
|
+
const path = join(testDir, 'bad.yml');
|
|
56
|
+
writeFileSync(path, 'a: [unterminated');
|
|
57
|
+
try {
|
|
58
|
+
readYamlFileOrThrow(path, { loader: 'signalers' });
|
|
59
|
+
throw new Error('expected throw');
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
expect(error).toBeInstanceOf(ValidationError);
|
|
63
|
+
expect(error.message).toContain('invalid YAML');
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
it('throws SystemError when the file exceeds maxBytes', () => {
|
|
67
|
+
const path = join(testDir, 'big.yml');
|
|
68
|
+
writeFileSync(path, 'x: '.repeat(2000));
|
|
69
|
+
try {
|
|
70
|
+
readYamlFileOrThrow(path, { maxBytes: 64, loader: 'signalers' });
|
|
71
|
+
throw new Error('expected throw');
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
expect(error).toBeInstanceOf(SystemError);
|
|
75
|
+
expect(error.code).toBe('SYSTEM.FILE.TOO_LARGE');
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=yaml.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/yaml.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE/D,IAAI,OAAe,CAAC;AAEpB,UAAU,CAAC,GAAG,EAAE;IACd,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACtC,aAAa,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;QACxC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACvC,aAAa,CAAC,IAAI,EAAE,0CAA0C,CAAC,CAAC;QAChE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACxC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxB,uDAAuD;QACvD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+CAA+C,EAAE,GAAG,EAAE;IAC7D,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACvC,aAAa,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;QACrD,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACxC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxB,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACtC,aAAa,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,mBAAmB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;YAC9C,MAAM,CAAE,KAAyB,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACvE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACtC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,mBAAmB,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;YACjE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YAC1C,MAAM,CAAE,KAAqB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Permissive reader for the top-level `schemaVersion:`
|
|
3
|
+
* field of opensip-cli.config.yml + a compatibility classifier.
|
|
4
|
+
*
|
|
5
|
+
* The CLI's pre-action-hook calls these BEFORE any tool's strict loader
|
|
6
|
+
* runs, so the reader must tolerate every "couldn't determine" case
|
|
7
|
+
* (missing file, malformed YAML, missing field, non-integer field) and
|
|
8
|
+
* treat them all as v1. Forward compat for existing user configs
|
|
9
|
+
* written before the field existed.
|
|
10
|
+
*
|
|
11
|
+
* Lives in `core/lib/` alongside `paths.ts` because version detection
|
|
12
|
+
* is a kernel-level concern; every tool's loader benefits.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* The schema version this CLI binary knows how to load. Bumped when
|
|
16
|
+
* the project config structure changes in a way that requires
|
|
17
|
+
* migration.
|
|
18
|
+
*/
|
|
19
|
+
export declare const CLI_SUPPORTED_SCHEMA_VERSION: 1;
|
|
20
|
+
/** Outcome of `checkSchemaCompat`. */
|
|
21
|
+
export type SchemaCompat = {
|
|
22
|
+
readonly kind: 'ok';
|
|
23
|
+
readonly configVersion: number;
|
|
24
|
+
} | {
|
|
25
|
+
readonly kind: 'older';
|
|
26
|
+
readonly configVersion: number;
|
|
27
|
+
readonly cliVersion: number;
|
|
28
|
+
} | {
|
|
29
|
+
readonly kind: 'cli-too-old';
|
|
30
|
+
readonly configVersion: number;
|
|
31
|
+
readonly cliVersion: number;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Read the top-level `schemaVersion:` field. Returns 1 for any
|
|
35
|
+
* "couldn't read it" outcome, by design.
|
|
36
|
+
*/
|
|
37
|
+
export declare function readConfigSchemaVersion(configPath: string): number;
|
|
38
|
+
/**
|
|
39
|
+
* Classify a config's declared version against the CLI's supported version.
|
|
40
|
+
*
|
|
41
|
+
* - 'ok' — versions match; proceed silently.
|
|
42
|
+
* - 'older' — config is older than CLI; CLI can read it (today).
|
|
43
|
+
* Future: `opensip-cli migrate` updates it. For
|
|
44
|
+
* now the CLI runs it as-is.
|
|
45
|
+
* - 'cli-too-old' — config is newer than CLI knows. CLI cannot safely
|
|
46
|
+
* load it. User must upgrade the CLI.
|
|
47
|
+
*/
|
|
48
|
+
export declare function checkSchemaCompat(configVersion: number): SchemaCompat;
|
|
49
|
+
//# sourceMappingURL=config-version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-version.d.ts","sourceRoot":"","sources":["../../src/lib/config-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,EAAG,CAAU,CAAC;AAEvD,sCAAsC;AACtC,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACvF;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAElG;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAOlE;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,YAAY,CAQrE"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Permissive reader for the top-level `schemaVersion:`
|
|
3
|
+
* field of opensip-cli.config.yml + a compatibility classifier.
|
|
4
|
+
*
|
|
5
|
+
* The CLI's pre-action-hook calls these BEFORE any tool's strict loader
|
|
6
|
+
* runs, so the reader must tolerate every "couldn't determine" case
|
|
7
|
+
* (missing file, malformed YAML, missing field, non-integer field) and
|
|
8
|
+
* treat them all as v1. Forward compat for existing user configs
|
|
9
|
+
* written before the field existed.
|
|
10
|
+
*
|
|
11
|
+
* Lives in `core/lib/` alongside `paths.ts` because version detection
|
|
12
|
+
* is a kernel-level concern; every tool's loader benefits.
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync } from 'node:fs';
|
|
15
|
+
import { readYamlFile } from './yaml.js';
|
|
16
|
+
/**
|
|
17
|
+
* The schema version this CLI binary knows how to load. Bumped when
|
|
18
|
+
* the project config structure changes in a way that requires
|
|
19
|
+
* migration.
|
|
20
|
+
*/
|
|
21
|
+
export const CLI_SUPPORTED_SCHEMA_VERSION = 1;
|
|
22
|
+
/**
|
|
23
|
+
* Read the top-level `schemaVersion:` field. Returns 1 for any
|
|
24
|
+
* "couldn't read it" outcome, by design.
|
|
25
|
+
*/
|
|
26
|
+
export function readConfigSchemaVersion(configPath) {
|
|
27
|
+
if (!existsSync(configPath))
|
|
28
|
+
return 1;
|
|
29
|
+
const doc = readYamlFile(configPath);
|
|
30
|
+
if (doc === null || typeof doc !== 'object' || Array.isArray(doc))
|
|
31
|
+
return 1;
|
|
32
|
+
const raw = doc.schemaVersion;
|
|
33
|
+
if (typeof raw !== 'number' || !Number.isInteger(raw) || raw < 1)
|
|
34
|
+
return 1;
|
|
35
|
+
return raw;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Classify a config's declared version against the CLI's supported version.
|
|
39
|
+
*
|
|
40
|
+
* - 'ok' — versions match; proceed silently.
|
|
41
|
+
* - 'older' — config is older than CLI; CLI can read it (today).
|
|
42
|
+
* Future: `opensip-cli migrate` updates it. For
|
|
43
|
+
* now the CLI runs it as-is.
|
|
44
|
+
* - 'cli-too-old' — config is newer than CLI knows. CLI cannot safely
|
|
45
|
+
* load it. User must upgrade the CLI.
|
|
46
|
+
*/
|
|
47
|
+
export function checkSchemaCompat(configVersion) {
|
|
48
|
+
if (configVersion === CLI_SUPPORTED_SCHEMA_VERSION) {
|
|
49
|
+
return { kind: 'ok', configVersion };
|
|
50
|
+
}
|
|
51
|
+
if (configVersion < CLI_SUPPORTED_SCHEMA_VERSION) {
|
|
52
|
+
return { kind: 'older', configVersion, cliVersion: CLI_SUPPORTED_SCHEMA_VERSION };
|
|
53
|
+
}
|
|
54
|
+
return { kind: 'cli-too-old', configVersion, cliVersion: CLI_SUPPORTED_SCHEMA_VERSION };
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=config-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-version.js","sourceRoot":"","sources":["../../src/lib/config-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAU,CAAC;AAQvD;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,UAAkB;IACxD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAI,GAA+B,CAAC,aAAa,CAAC;IAC3D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3E,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,aAAqB;IACrD,IAAI,aAAa,KAAK,4BAA4B,EAAE,CAAC;QACnD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACvC,CAAC;IACD,IAAI,aAAa,GAAG,4BAA4B,EAAE,CAAC;QACjD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,4BAA4B,EAAE,CAAC;IACpF,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,4BAA4B,EAAE,CAAC;AAC1F,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DiagnosticsBus — the scope-owned collector that gathers {@link DiagnosticEvent}s
|
|
3
|
+
* across the uniform tool lifecycle and snapshots them as {@link RunDiagnostics}
|
|
4
|
+
* to ride on a `CommandOutcome` (north-star §5.10, launch).
|
|
5
|
+
*
|
|
6
|
+
* Per-invocation state, held on {@link RunScope} (the no-module-singleton rule):
|
|
7
|
+
* library code deep in the call tree emits via `currentScope()?.diagnostics`, and
|
|
8
|
+
* the host assembler attaches `scope.diagnostics.snapshot()` to every outcome.
|
|
9
|
+
* Additive — the logger, runId, and graph OTEL spans stay; this is the
|
|
10
|
+
* structured, JSON-emittable layer on top.
|
|
11
|
+
*
|
|
12
|
+
* The bus is a runtime collector (like the logger), so it stamps wall-clock time
|
|
13
|
+
* (`new Date().toISOString()`) — the `Date.now()`-free contract applies to the
|
|
14
|
+
* pure formatters (`buildSignalEnvelope`), not to this collector. The OTEL trace
|
|
15
|
+
* bridge is best-effort: `snapshot().trace` carries the active span's
|
|
16
|
+
* trace/span ids when telemetry is on, parsed from the W3C `traceparent` the
|
|
17
|
+
* kernel already exposes — so bundled and external tools are observable
|
|
18
|
+
* identically, with no SDK dependency in the kernel.
|
|
19
|
+
*/
|
|
20
|
+
import type { DiagnosticEvent, DiagnosticLevel, DiagnosticPhase, RunDiagnostics } from './run-diagnostics.js';
|
|
21
|
+
/** A diagnostic event with the timestamp left to the bus to stamp. */
|
|
22
|
+
export type DiagnosticEventInput = Omit<DiagnosticEvent, 'at'> & {
|
|
23
|
+
readonly at?: string;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* The per-invocation diagnostics collector. Construct one per {@link RunScope}.
|
|
27
|
+
*/
|
|
28
|
+
export declare class DiagnosticsBus {
|
|
29
|
+
private readonly runId;
|
|
30
|
+
private readonly events;
|
|
31
|
+
private readonly metrics;
|
|
32
|
+
constructor(runId: string);
|
|
33
|
+
/**
|
|
34
|
+
* Append a lifecycle event. The bus stamps `at` (ISO-8601) when the caller did
|
|
35
|
+
* not supply one. Cheap and allocation-light; safe to call from any phase.
|
|
36
|
+
*/
|
|
37
|
+
emit(event: DiagnosticEventInput): void;
|
|
38
|
+
/** Convenience: emit at a given phase/level with an optional data bag. */
|
|
39
|
+
event(phase: DiagnosticPhase, level: DiagnosticLevel, message: string, data?: Readonly<Record<string, unknown>>): void;
|
|
40
|
+
/** Increment a named counter (e.g. `'plugins.loaded'`). Defaults to +1. */
|
|
41
|
+
counter(name: string, delta?: number): void;
|
|
42
|
+
/**
|
|
43
|
+
* Materialize the JSON-emittable snapshot carried on a `CommandOutcome`. Pure
|
|
44
|
+
* read: copies the event stream + metrics and bridges the active OTEL trace.
|
|
45
|
+
*/
|
|
46
|
+
snapshot(): RunDiagnostics;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=diagnostics-bus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics-bus.d.ts","sourceRoot":"","sources":["../../src/lib/diagnostics-bus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACf,MAAM,sBAAsB,CAAC;AAE9B,sEAAsE;AACtE,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAe1F;;GAEG;AACH,qBAAa,cAAc;IAIb,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHlC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;gBAExB,KAAK,EAAE,MAAM;IAE1C;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI;IAIvC,0EAA0E;IAC1E,KAAK,CACH,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,IAAI;IAIP,2EAA2E;IAC3E,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,IAAI;IAItC;;;OAGG;IACH,QAAQ,IAAI,cAAc;CAS3B"}
|