@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 @@
|
|
|
1
|
+
{"version":3,"file":"subprocess-transport.test.d.ts","sourceRoot":"","sources":["../../../src/runtime/__tests__/subprocess-transport.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subprocess ProgressTransport (ADR-0028): forks the fixture worker over real
|
|
3
|
+
* IPC and asserts the relay contract — event fan-out, pre-subscribe buffering,
|
|
4
|
+
* result resolution, error propagation (message / throw / premature exit),
|
|
5
|
+
* advanced-serialization payloads, and the in-process fallback selector.
|
|
6
|
+
*
|
|
7
|
+
* These spawn a real child process, so the suite is slower than the in-process
|
|
8
|
+
* sibling; the fixture is a tiny `.mjs` run directly by node (no transform).
|
|
9
|
+
*/
|
|
10
|
+
import { fileURLToPath } from 'node:url';
|
|
11
|
+
import { describe, it, expect, afterEach } from 'vitest';
|
|
12
|
+
import { createSubprocessProgressRun, runOffThreadOrInProcess } from '../subprocess-transport.js';
|
|
13
|
+
const FIXTURE = fileURLToPath(new URL('fixtures/progress-worker.mjs', import.meta.url));
|
|
14
|
+
function descriptorFor(mode) {
|
|
15
|
+
return { command: FIXTURE, argv: [mode] };
|
|
16
|
+
}
|
|
17
|
+
describe('createSubprocessProgressRun', () => {
|
|
18
|
+
it('relays progress events in order and resolves the result', async () => {
|
|
19
|
+
const run = createSubprocessProgressRun(descriptorFor('emit-and-result'));
|
|
20
|
+
const events = [];
|
|
21
|
+
run.onProgress((e) => events.push(e));
|
|
22
|
+
const result = await run.result;
|
|
23
|
+
expect(result).toBe('done');
|
|
24
|
+
expect(events).toEqual([1, 2, 3]);
|
|
25
|
+
});
|
|
26
|
+
it('buffers events emitted before subscription and flushes them in order', async () => {
|
|
27
|
+
// Subscribe only AFTER the result settles: every progress message has been
|
|
28
|
+
// received and buffered (not dropped), then flushed on onProgress — parity
|
|
29
|
+
// with the in-process transport's pre-subscribe buffering.
|
|
30
|
+
const run = createSubprocessProgressRun(descriptorFor('emit-and-result'));
|
|
31
|
+
await run.result;
|
|
32
|
+
const events = [];
|
|
33
|
+
run.onProgress((e) => events.push(e));
|
|
34
|
+
expect(events).toEqual([1, 2, 3]);
|
|
35
|
+
});
|
|
36
|
+
it('rejects the result with the reconstructed message on an error message', async () => {
|
|
37
|
+
const run = createSubprocessProgressRun(descriptorFor('error-message'));
|
|
38
|
+
await expect(run.result).rejects.toThrow('worker blew up');
|
|
39
|
+
});
|
|
40
|
+
it('rejects when the worker throws and exits non-zero without a result', async () => {
|
|
41
|
+
const run = createSubprocessProgressRun(descriptorFor('throw'));
|
|
42
|
+
await expect(run.result).rejects.toThrow(/worker exited/);
|
|
43
|
+
});
|
|
44
|
+
it('rejects when the worker exits cleanly without producing a result', async () => {
|
|
45
|
+
const run = createSubprocessProgressRun(descriptorFor('exit-clean'));
|
|
46
|
+
await expect(run.result).rejects.toThrow(/before producing a result/);
|
|
47
|
+
});
|
|
48
|
+
it('carries a Map across the boundary via advanced serialization', async () => {
|
|
49
|
+
const run = createSubprocessProgressRun(descriptorFor('map-result'));
|
|
50
|
+
const result = await run.result;
|
|
51
|
+
expect(result.tag).toBe('m');
|
|
52
|
+
expect(result.map).toBeInstanceOf(Map);
|
|
53
|
+
expect(result.map.get('a')).toBe(1);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe('runOffThreadOrInProcess', () => {
|
|
57
|
+
afterEach(() => {
|
|
58
|
+
delete process.env.OPENSIP_CLI_NO_WORKER;
|
|
59
|
+
});
|
|
60
|
+
it('runs the worker by default and resolves its result', async () => {
|
|
61
|
+
const events = [];
|
|
62
|
+
const run = runOffThreadOrInProcess({
|
|
63
|
+
descriptor: descriptorFor('emit-and-result'),
|
|
64
|
+
inProcess: () => Promise.reject(new Error('must not run in-process')),
|
|
65
|
+
});
|
|
66
|
+
run.onProgress((e) => events.push(e));
|
|
67
|
+
expect(await run.result).toBe('done');
|
|
68
|
+
expect(events).toEqual([1, 2, 3]);
|
|
69
|
+
});
|
|
70
|
+
it('runs the in-process closure when preferWorker is false', async () => {
|
|
71
|
+
const events = [];
|
|
72
|
+
const run = runOffThreadOrInProcess({
|
|
73
|
+
descriptor: descriptorFor('throw'), // would reject if forked — proves it is not
|
|
74
|
+
preferWorker: false,
|
|
75
|
+
inProcess: (emit) => {
|
|
76
|
+
emit(10);
|
|
77
|
+
emit(20);
|
|
78
|
+
return Promise.resolve('in-process');
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
run.onProgress((e) => events.push(e));
|
|
82
|
+
expect(await run.result).toBe('in-process');
|
|
83
|
+
expect(events).toEqual([10, 20]);
|
|
84
|
+
});
|
|
85
|
+
it('runs the in-process closure when OPENSIP_CLI_NO_WORKER=1', async () => {
|
|
86
|
+
process.env.OPENSIP_CLI_NO_WORKER = '1';
|
|
87
|
+
const run = runOffThreadOrInProcess({
|
|
88
|
+
descriptor: descriptorFor('throw'),
|
|
89
|
+
inProcess: () => Promise.resolve('env-gated in-process'),
|
|
90
|
+
});
|
|
91
|
+
expect(await run.result).toBe('env-gated in-process');
|
|
92
|
+
});
|
|
93
|
+
it('yields an identical result whether it ran off-thread or in-process', async () => {
|
|
94
|
+
// The renderer must not care which path ran. The worker emits the same
|
|
95
|
+
// [1,2,3]/'done' the in-process closure mirrors here.
|
|
96
|
+
const worker = runOffThreadOrInProcess({
|
|
97
|
+
descriptor: descriptorFor('emit-and-result'),
|
|
98
|
+
inProcess: () => Promise.reject(new Error('unused')),
|
|
99
|
+
});
|
|
100
|
+
process.env.OPENSIP_CLI_NO_WORKER = '1';
|
|
101
|
+
const fallback = runOffThreadOrInProcess({
|
|
102
|
+
descriptor: descriptorFor('emit-and-result'),
|
|
103
|
+
inProcess: (emit) => {
|
|
104
|
+
emit(1);
|
|
105
|
+
emit(2);
|
|
106
|
+
emit(3);
|
|
107
|
+
return Promise.resolve('done');
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
const workerEvents = [];
|
|
111
|
+
const fallbackEvents = [];
|
|
112
|
+
worker.onProgress((e) => workerEvents.push(e));
|
|
113
|
+
fallback.onProgress((e) => fallbackEvents.push(e));
|
|
114
|
+
expect(await worker.result).toBe(await fallback.result);
|
|
115
|
+
expect(workerEvents).toEqual(fallbackEvents);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=subprocess-transport.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subprocess-transport.test.js","sourceRoot":"","sources":["../../../src/runtime/__tests__/subprocess-transport.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-process ProgressTransport (ADR-0016) — runs the job in the current process
|
|
3
|
+
* and fans its events out to subscribers. The common case: tools whose execution
|
|
4
|
+
* already yields to the event loop (fit's async file I/O, sim's awaited
|
|
5
|
+
* scenarios), so the render thread stays free to animate.
|
|
6
|
+
*
|
|
7
|
+
* Pre-subscribe events are buffered and flushed when the first listener attaches.
|
|
8
|
+
* Ink mounts the renderer's `useEffect` subscription synchronously after
|
|
9
|
+
* `render(...)`, but the job's first `emit` can still land first — buffering
|
|
10
|
+
* guarantees no early event is dropped.
|
|
11
|
+
*/
|
|
12
|
+
import type { ProgressTransport } from './progress-transport.js';
|
|
13
|
+
/**
|
|
14
|
+
* Create an in-process {@link ProgressTransport} that runs each job eagerly in
|
|
15
|
+
* the current process and fans its events out to a single subscriber. Events
|
|
16
|
+
* emitted before the first `onProgress` listener attaches are buffered and
|
|
17
|
+
* flushed in order on subscription, so no early event is dropped.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createInProcessTransport(): ProgressTransport;
|
|
20
|
+
//# sourceMappingURL=in-process-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-process-transport.d.ts","sourceRoot":"","sources":["../../src/runtime/in-process-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAA4B,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE3F;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,iBAAiB,CA+B5D"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-process ProgressTransport (ADR-0016) — runs the job in the current process
|
|
3
|
+
* and fans its events out to subscribers. The common case: tools whose execution
|
|
4
|
+
* already yields to the event loop (fit's async file I/O, sim's awaited
|
|
5
|
+
* scenarios), so the render thread stays free to animate.
|
|
6
|
+
*
|
|
7
|
+
* Pre-subscribe events are buffered and flushed when the first listener attaches.
|
|
8
|
+
* Ink mounts the renderer's `useEffect` subscription synchronously after
|
|
9
|
+
* `render(...)`, but the job's first `emit` can still land first — buffering
|
|
10
|
+
* guarantees no early event is dropped.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Create an in-process {@link ProgressTransport} that runs each job eagerly in
|
|
14
|
+
* the current process and fans its events out to a single subscriber. Events
|
|
15
|
+
* emitted before the first `onProgress` listener attaches are buffered and
|
|
16
|
+
* flushed in order on subscription, so no early event is dropped.
|
|
17
|
+
*/
|
|
18
|
+
export function createInProcessTransport() {
|
|
19
|
+
return {
|
|
20
|
+
run(job) {
|
|
21
|
+
let listener;
|
|
22
|
+
const buffer = [];
|
|
23
|
+
const emit = (event) => {
|
|
24
|
+
if (listener) {
|
|
25
|
+
listener(event);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
buffer.push(event);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
// Start the job eagerly; events emitted before `onProgress` is called are
|
|
32
|
+
// buffered above.
|
|
33
|
+
const result = job(emit);
|
|
34
|
+
return {
|
|
35
|
+
onProgress(next) {
|
|
36
|
+
listener = next;
|
|
37
|
+
// Flush anything emitted before subscription, in order.
|
|
38
|
+
while (buffer.length > 0) {
|
|
39
|
+
const event = buffer.shift();
|
|
40
|
+
if (event !== undefined)
|
|
41
|
+
next(event);
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
result,
|
|
45
|
+
};
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=in-process-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-process-transport.js","sourceRoot":"","sources":["../../src/runtime/in-process-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,GAAG,CAAkB,GAAiC;YACpD,IAAI,QAA+C,CAAC;YACpD,MAAM,MAAM,GAAa,EAAE,CAAC;YAE5B,MAAM,IAAI,GAAG,CAAC,KAAa,EAAQ,EAAE;gBACnC,IAAI,QAAQ,EAAE,CAAC;oBACb,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC,CAAC;YAEF,0EAA0E;YAC1E,kBAAkB;YAClB,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;YAEzB,OAAO;gBACL,UAAU,CAAC,IAA6B;oBACtC,QAAQ,GAAG,IAAI,CAAC;oBAChB,wDAAwD;oBACxD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACzB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;wBAC7B,IAAI,KAAK,KAAK,SAAS;4BAAE,IAAI,CAAC,KAAK,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC;gBACD,MAAM;aACP,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProgressTransport — the seam that decouples *where a tool's work runs* from
|
|
3
|
+
* *how its progress reaches the renderer* (ADR-0016).
|
|
4
|
+
*
|
|
5
|
+
* Two implementations:
|
|
6
|
+
* - in-process (this directory) — a plain in-memory fan-out, for tools whose
|
|
7
|
+
* execution already yields to the event loop (fit, sim).
|
|
8
|
+
* - subprocess (added with the graph subprocess work) — forks a child and
|
|
9
|
+
* relays IPC messages, for tools whose work is a synchronous CPU blast that
|
|
10
|
+
* would otherwise starve the render thread (graph).
|
|
11
|
+
*
|
|
12
|
+
* The interface is generic over the event and result types so core — the kernel,
|
|
13
|
+
* which imports nothing from the workspace — never names cli-ui's concrete
|
|
14
|
+
* `ProgressEvent`. Callers bind `TEvent` to `ProgressEvent` at the tool layer.
|
|
15
|
+
*/
|
|
16
|
+
/** A live run in progress: subscribe for events, await the final result. */
|
|
17
|
+
export interface ProgressRun<TEvent, TResult> {
|
|
18
|
+
/**
|
|
19
|
+
* Register a listener for streamed events. Events emitted before the first
|
|
20
|
+
* listener attaches are buffered and flushed on subscription, so a fast job
|
|
21
|
+
* cannot race the renderer's mount and drop early events.
|
|
22
|
+
*/
|
|
23
|
+
readonly onProgress: (listener: (event: TEvent) => void) => void;
|
|
24
|
+
/** Resolves with the tool's final result; rejects if the run fails. */
|
|
25
|
+
readonly result: Promise<TResult>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* In-process job: a closure that emits events as it runs and resolves a result.
|
|
29
|
+
* The subprocess transport accepts a serializable descriptor instead (it cannot
|
|
30
|
+
* ship a closure across the process boundary); both satisfy
|
|
31
|
+
* {@link ProgressTransport} via distinct `run` overloads at their call sites.
|
|
32
|
+
*/
|
|
33
|
+
export type ProgressJob<TEvent, TResult> = (emit: (event: TEvent) => void) => Promise<TResult>;
|
|
34
|
+
/** Runs a job and streams its progress to subscribers. */
|
|
35
|
+
export interface ProgressTransport {
|
|
36
|
+
run<TEvent, TResult>(job: ProgressJob<TEvent, TResult>): ProgressRun<TEvent, TResult>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A description of off-main-PROCESS work (ADR-0028). The off-thread variant runs
|
|
40
|
+
* the engine in a forked child that re-bootstraps the full CLI scope (language +
|
|
41
|
+
* tool registries, project, config) — a worker *thread* can't, because that
|
|
42
|
+
* bootstrap is CLI-owned and a partial registry would diverge a polyglot run's
|
|
43
|
+
* results. So the descriptor names the node module to fork (the CLI entry) + argv
|
|
44
|
+
* (a worker subcommand + a temp spec path). No closure and no live handle (e.g.
|
|
45
|
+
* the datastore) crosses the boundary; persistence + egress stay on the main
|
|
46
|
+
* process after the run returns.
|
|
47
|
+
*/
|
|
48
|
+
export interface SubprocessJobDescriptor {
|
|
49
|
+
/** Node module to fork — the CLI entry (`process.argv[1]`). */
|
|
50
|
+
readonly command: string;
|
|
51
|
+
/** Argv for the fork — typically `[<worker-subcommand>, <specPath>]`. */
|
|
52
|
+
readonly argv: readonly string[];
|
|
53
|
+
/** Extra environment for the child (merged over the parent's). */
|
|
54
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The child→parent IPC message protocol. The forked worker posts these via
|
|
58
|
+
* `process.send`; the subprocess {@link ProgressRun} maps `progress` to
|
|
59
|
+
* subscribers, resolves on `result`, and rejects on `error`. One source of truth
|
|
60
|
+
* for both ends.
|
|
61
|
+
*/
|
|
62
|
+
export type WorkerMessage<TEvent, TResult> = {
|
|
63
|
+
readonly kind: 'progress';
|
|
64
|
+
readonly event: TEvent;
|
|
65
|
+
} | {
|
|
66
|
+
readonly kind: 'result';
|
|
67
|
+
readonly value: TResult;
|
|
68
|
+
} | {
|
|
69
|
+
readonly kind: 'error';
|
|
70
|
+
readonly message: string;
|
|
71
|
+
readonly stack?: string;
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=progress-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-transport.d.ts","sourceRoot":"","sources":["../../src/runtime/progress-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,4EAA4E;AAC5E,MAAM,WAAW,WAAW,CAAC,MAAM,EAAE,OAAO;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC;IACjE,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CACnC;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE/F,0DAA0D;AAC1D,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvF;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,uBAAuB;IACtC,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,kEAAkE;IAClE,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACjD;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,CAAC,MAAM,EAAE,OAAO,IACrC;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProgressTransport — the seam that decouples *where a tool's work runs* from
|
|
3
|
+
* *how its progress reaches the renderer* (ADR-0016).
|
|
4
|
+
*
|
|
5
|
+
* Two implementations:
|
|
6
|
+
* - in-process (this directory) — a plain in-memory fan-out, for tools whose
|
|
7
|
+
* execution already yields to the event loop (fit, sim).
|
|
8
|
+
* - subprocess (added with the graph subprocess work) — forks a child and
|
|
9
|
+
* relays IPC messages, for tools whose work is a synchronous CPU blast that
|
|
10
|
+
* would otherwise starve the render thread (graph).
|
|
11
|
+
*
|
|
12
|
+
* The interface is generic over the event and result types so core — the kernel,
|
|
13
|
+
* which imports nothing from the workspace — never names cli-ui's concrete
|
|
14
|
+
* `ProgressEvent`. Callers bind `TEvent` to `ProgressEvent` at the tool layer.
|
|
15
|
+
*/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=progress-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-transport.js","sourceRoot":"","sources":["../../src/runtime/progress-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subprocess ProgressTransport (ADR-0028) — runs a tool's engine in a forked
|
|
3
|
+
* child process and relays its progress back to the main-process renderer, so
|
|
4
|
+
* the Ink reconciler + the 80ms live-progress clock never block on a synchronous
|
|
5
|
+
* CPU blast (AST walks, rule passes, the TS type-checker). This is the
|
|
6
|
+
* off-process variant `progress-transport.ts` always described.
|
|
7
|
+
*
|
|
8
|
+
* Why a child PROCESS, not a worker thread: the engine reads `currentScope()`
|
|
9
|
+
* (the language + tool registries, project, config), which only the CLI bootstrap
|
|
10
|
+
* populates — and a worker thread in an engine package can't re-run that bootstrap
|
|
11
|
+
* (layering) without a partial registry that would diverge a polyglot run's
|
|
12
|
+
* results. A forked CLI subcommand re-bootstraps the whole scope for free (the
|
|
13
|
+
* pattern graph's shard workers already use). The boundary is IPC JSON only.
|
|
14
|
+
*
|
|
15
|
+
* Generic over `TEvent`/`TResult`: core never names cli-ui's `ProgressEvent`.
|
|
16
|
+
*/
|
|
17
|
+
import type { ProgressJob, ProgressRun, SubprocessJobDescriptor } from './progress-transport.js';
|
|
18
|
+
/**
|
|
19
|
+
* Fork `descriptor.command` (the CLI entry) with `descriptor.argv` (a worker
|
|
20
|
+
* subcommand + spec path) and adapt its {@link WorkerMessage} IPC stream to a
|
|
21
|
+
* {@link ProgressRun}. The child's stdout is suppressed (it must not corrupt the
|
|
22
|
+
* parent's Ink frames); stderr is inherited (logs/diagnostics) and the `ipc`
|
|
23
|
+
* channel carries progress/result/error. Buffers events emitted before the
|
|
24
|
+
* renderer subscribes (parity with the in-process transport), and settles
|
|
25
|
+
* `result` exactly once — on a `result`/`error` message, a child `error`, or a
|
|
26
|
+
* premature `exit`. The child is killed on settle so the short-lived CLI exits.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createSubprocessProgressRun<TEvent, TResult>(descriptor: SubprocessJobDescriptor): ProgressRun<TEvent, TResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Run work off the main process when possible, else in-process — with an
|
|
31
|
+
* identical {@link ProgressRun} either way, so the renderer doesn't care which
|
|
32
|
+
* ran. The caller supplies BOTH a {@link SubprocessJobDescriptor} (the forked
|
|
33
|
+
* worker) and the equivalent in-process {@link ProgressJob} (the same work as a
|
|
34
|
+
* local closure). Subprocess is preferred unless `preferWorker: false` or
|
|
35
|
+
* `OPENSIP_CLI_NO_WORKER=1`, and a synchronous fork failure degrades to
|
|
36
|
+
* in-process.
|
|
37
|
+
*/
|
|
38
|
+
export declare function runOffThreadOrInProcess<TEvent, TResult>(opts: {
|
|
39
|
+
readonly descriptor: SubprocessJobDescriptor;
|
|
40
|
+
readonly inProcess: ProgressJob<TEvent, TResult>;
|
|
41
|
+
readonly preferWorker?: boolean;
|
|
42
|
+
}): ProgressRun<TEvent, TResult>;
|
|
43
|
+
//# sourceMappingURL=subprocess-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subprocess-transport.d.ts","sourceRoot":"","sources":["../../src/runtime/subprocess-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AASH,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,uBAAuB,EAExB,MAAM,yBAAyB,CAAC;AAmBjC;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO,EACzD,UAAU,EAAE,uBAAuB,GAClC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAwD9B;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;IAC7D,QAAQ,CAAC,UAAU,EAAE,uBAAuB,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAmB/B"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subprocess ProgressTransport (ADR-0028) — runs a tool's engine in a forked
|
|
3
|
+
* child process and relays its progress back to the main-process renderer, so
|
|
4
|
+
* the Ink reconciler + the 80ms live-progress clock never block on a synchronous
|
|
5
|
+
* CPU blast (AST walks, rule passes, the TS type-checker). This is the
|
|
6
|
+
* off-process variant `progress-transport.ts` always described.
|
|
7
|
+
*
|
|
8
|
+
* Why a child PROCESS, not a worker thread: the engine reads `currentScope()`
|
|
9
|
+
* (the language + tool registries, project, config), which only the CLI bootstrap
|
|
10
|
+
* populates — and a worker thread in an engine package can't re-run that bootstrap
|
|
11
|
+
* (layering) without a partial registry that would diverge a polyglot run's
|
|
12
|
+
* results. A forked CLI subcommand re-bootstraps the whole scope for free (the
|
|
13
|
+
* pattern graph's shard workers already use). The boundary is IPC JSON only.
|
|
14
|
+
*
|
|
15
|
+
* Generic over `TEvent`/`TResult`: core never names cli-ui's `ProgressEvent`.
|
|
16
|
+
*/
|
|
17
|
+
import { fork } from 'node:child_process';
|
|
18
|
+
import { EnvRegistry } from '../lib/env-registry.js';
|
|
19
|
+
import { logger } from '../lib/logger.js';
|
|
20
|
+
import { createInProcessTransport } from './in-process-transport.js';
|
|
21
|
+
/** Governed escape hatch (env-via-registry): force in-process execution. */
|
|
22
|
+
const WORKER_ENV = new EnvRegistry([
|
|
23
|
+
{
|
|
24
|
+
canonical: 'OPENSIP_CLI_NO_WORKER',
|
|
25
|
+
coerce: (raw) => raw === '1',
|
|
26
|
+
default: false,
|
|
27
|
+
docs: 'Set to 1 to run a tool engine in the main process instead of a forked worker (debugging / constrained runtimes). The live view may stutter; output is unchanged.',
|
|
28
|
+
},
|
|
29
|
+
]);
|
|
30
|
+
/** Reconstruct an Error from a worker's `error` message (preserving stack). */
|
|
31
|
+
function workerError(message, stack) {
|
|
32
|
+
const err = new Error(message);
|
|
33
|
+
if (stack !== undefined)
|
|
34
|
+
err.stack = stack;
|
|
35
|
+
return err;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Fork `descriptor.command` (the CLI entry) with `descriptor.argv` (a worker
|
|
39
|
+
* subcommand + spec path) and adapt its {@link WorkerMessage} IPC stream to a
|
|
40
|
+
* {@link ProgressRun}. The child's stdout is suppressed (it must not corrupt the
|
|
41
|
+
* parent's Ink frames); stderr is inherited (logs/diagnostics) and the `ipc`
|
|
42
|
+
* channel carries progress/result/error. Buffers events emitted before the
|
|
43
|
+
* renderer subscribes (parity with the in-process transport), and settles
|
|
44
|
+
* `result` exactly once — on a `result`/`error` message, a child `error`, or a
|
|
45
|
+
* premature `exit`. The child is killed on settle so the short-lived CLI exits.
|
|
46
|
+
*/
|
|
47
|
+
export function createSubprocessProgressRun(descriptor) {
|
|
48
|
+
let listener;
|
|
49
|
+
const buffer = [];
|
|
50
|
+
const emit = (event) => {
|
|
51
|
+
if (listener)
|
|
52
|
+
listener(event);
|
|
53
|
+
else
|
|
54
|
+
buffer.push(event);
|
|
55
|
+
};
|
|
56
|
+
let settle;
|
|
57
|
+
const result = new Promise((resolve, reject) => {
|
|
58
|
+
settle = { resolve, reject };
|
|
59
|
+
});
|
|
60
|
+
const child = fork(descriptor.command, [...descriptor.argv], {
|
|
61
|
+
// stdout ignored (no child render bytes in the parent's live view); stderr
|
|
62
|
+
// inherited (logs surface); ipc channel for the WorkerMessage protocol.
|
|
63
|
+
stdio: ['ignore', 'ignore', 'inherit', 'ipc'],
|
|
64
|
+
// Structured-clone IPC instead of the default JSON serializer: progress
|
|
65
|
+
// events and tool results stay safe even if a payload grows a Map/Set/Date
|
|
66
|
+
// (the JSON serializer would silently drop or mangle those). Workers send
|
|
67
|
+
// slim, plain-data results today; this keeps the transport robust regardless.
|
|
68
|
+
serialization: 'advanced',
|
|
69
|
+
// @fitness-ignore-next-line env-secret-exposure -- fork() REPLACES the child env wholesale when `env` is set, so the parent env must be spread in to preserve it; this object is passed to fork, never logged.
|
|
70
|
+
...(descriptor.env === undefined ? {} : { env: { ...process.env, ...descriptor.env } }),
|
|
71
|
+
});
|
|
72
|
+
let settled = false;
|
|
73
|
+
const done = (apply) => {
|
|
74
|
+
if (settled)
|
|
75
|
+
return;
|
|
76
|
+
settled = true;
|
|
77
|
+
apply();
|
|
78
|
+
child.kill();
|
|
79
|
+
};
|
|
80
|
+
child.on('message', (msg) => {
|
|
81
|
+
if (msg.kind === 'progress')
|
|
82
|
+
emit(msg.event);
|
|
83
|
+
else if (msg.kind === 'result')
|
|
84
|
+
done(() => settle.resolve(msg.value));
|
|
85
|
+
else
|
|
86
|
+
done(() => settle.reject(workerError(msg.message, msg.stack)));
|
|
87
|
+
});
|
|
88
|
+
child.on('error', (err) => done(() => settle.reject(err)));
|
|
89
|
+
child.on('exit', (code) => {
|
|
90
|
+
done(() => settle.reject(new Error(`worker exited (code ${code ?? 'null'}) before producing a result`)));
|
|
91
|
+
});
|
|
92
|
+
return {
|
|
93
|
+
onProgress(next) {
|
|
94
|
+
listener = next;
|
|
95
|
+
while (buffer.length > 0) {
|
|
96
|
+
const event = buffer.shift();
|
|
97
|
+
if (event !== undefined)
|
|
98
|
+
next(event);
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
result,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Run work off the main process when possible, else in-process — with an
|
|
106
|
+
* identical {@link ProgressRun} either way, so the renderer doesn't care which
|
|
107
|
+
* ran. The caller supplies BOTH a {@link SubprocessJobDescriptor} (the forked
|
|
108
|
+
* worker) and the equivalent in-process {@link ProgressJob} (the same work as a
|
|
109
|
+
* local closure). Subprocess is preferred unless `preferWorker: false` or
|
|
110
|
+
* `OPENSIP_CLI_NO_WORKER=1`, and a synchronous fork failure degrades to
|
|
111
|
+
* in-process.
|
|
112
|
+
*/
|
|
113
|
+
export function runOffThreadOrInProcess(opts) {
|
|
114
|
+
const envDisablesWorker = WORKER_ENV.get('OPENSIP_CLI_NO_WORKER') === true;
|
|
115
|
+
const preferWorker = (opts.preferWorker ?? true) && !envDisablesWorker;
|
|
116
|
+
if (preferWorker) {
|
|
117
|
+
try {
|
|
118
|
+
return createSubprocessProgressRun(opts.descriptor);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
// The child could not be forked — degrade to in-process so the run still
|
|
122
|
+
// completes (the live view may stutter; output is unchanged). Log the
|
|
123
|
+
// degradation so it is observable rather than a silent swallow.
|
|
124
|
+
logger.warn({
|
|
125
|
+
evt: 'transport.worker.fork_failed',
|
|
126
|
+
module: 'core:subprocess-transport',
|
|
127
|
+
command: opts.descriptor.command,
|
|
128
|
+
err: error instanceof Error ? error.message : String(error),
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return createInProcessTransport().run(opts.inProcess);
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=subprocess-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subprocess-transport.js","sourceRoot":"","sources":["../../src/runtime/subprocess-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Shared comment-opener table for inline-directive scanning.
|
|
3
|
+
*
|
|
4
|
+
* The kernel home (ADR-0014) of the comment-opener prefixes the inline
|
|
5
|
+
* suppression scanner recognizes. Fitness's directive parsers re-export this
|
|
6
|
+
* table so there is a single source of truth across the platform — the two
|
|
7
|
+
* lists historically drifted (the suppression parser recognized `//`, `/*`,
|
|
8
|
+
* `<!--`, and `#` while the inventory only recognized `//` and `/*`), causing
|
|
9
|
+
* HTML/hash-style directives to suppress findings yet vanish from the
|
|
10
|
+
* inventory. One table prevents that.
|
|
11
|
+
*
|
|
12
|
+
* Tuple shape: `[opener, length]`. The length is encoded once so scanners
|
|
13
|
+
* don't repeat it per opener — `<!--` is 4 chars; the others are 1 or 2.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Comment-opener prefixes the directive scanner recognizes:
|
|
17
|
+
*
|
|
18
|
+
* - `//` — TypeScript / JavaScript / C-family
|
|
19
|
+
* - `/* ` — same family, block form
|
|
20
|
+
* - `<!--` — Markdown / HTML doc files (READMEs, arch docs)
|
|
21
|
+
* - `#` — shell / YAML / Python configs and scripts
|
|
22
|
+
*/
|
|
23
|
+
export declare const COMMENT_OPENERS: readonly (readonly [string, number])[];
|
|
24
|
+
/**
|
|
25
|
+
* Strip a comment opener from the start of a (trimmed) line. Returns `null`
|
|
26
|
+
* when the line doesn't start with any known opener.
|
|
27
|
+
*/
|
|
28
|
+
export declare function stripCommentOpener(trimmedLine: string): string | null;
|
|
29
|
+
//# sourceMappingURL=comment-openers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comment-openers.d.ts","sourceRoot":"","sources":["../../src/signals/comment-openers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAKxD,CAAC;AAEX;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOrE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Shared comment-opener table for inline-directive scanning.
|
|
3
|
+
*
|
|
4
|
+
* The kernel home (ADR-0014) of the comment-opener prefixes the inline
|
|
5
|
+
* suppression scanner recognizes. Fitness's directive parsers re-export this
|
|
6
|
+
* table so there is a single source of truth across the platform — the two
|
|
7
|
+
* lists historically drifted (the suppression parser recognized `//`, `/*`,
|
|
8
|
+
* `<!--`, and `#` while the inventory only recognized `//` and `/*`), causing
|
|
9
|
+
* HTML/hash-style directives to suppress findings yet vanish from the
|
|
10
|
+
* inventory. One table prevents that.
|
|
11
|
+
*
|
|
12
|
+
* Tuple shape: `[opener, length]`. The length is encoded once so scanners
|
|
13
|
+
* don't repeat it per opener — `<!--` is 4 chars; the others are 1 or 2.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Comment-opener prefixes the directive scanner recognizes:
|
|
17
|
+
*
|
|
18
|
+
* - `//` — TypeScript / JavaScript / C-family
|
|
19
|
+
* - `/* ` — same family, block form
|
|
20
|
+
* - `<!--` — Markdown / HTML doc files (READMEs, arch docs)
|
|
21
|
+
* - `#` — shell / YAML / Python configs and scripts
|
|
22
|
+
*/
|
|
23
|
+
export const COMMENT_OPENERS = [
|
|
24
|
+
['//', 2],
|
|
25
|
+
['/*', 2],
|
|
26
|
+
['<!--', 4],
|
|
27
|
+
['#', 1],
|
|
28
|
+
];
|
|
29
|
+
/**
|
|
30
|
+
* Strip a comment opener from the start of a (trimmed) line. Returns `null`
|
|
31
|
+
* when the line doesn't start with any known opener.
|
|
32
|
+
*/
|
|
33
|
+
export function stripCommentOpener(trimmedLine) {
|
|
34
|
+
for (const [opener, length] of COMMENT_OPENERS) {
|
|
35
|
+
if (trimmedLine.startsWith(opener)) {
|
|
36
|
+
return trimmedLine.slice(length);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=comment-openers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comment-openers.js","sourceRoot":"","sources":["../../src/signals/comment-openers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAA2C;IACrE,CAAC,IAAI,EAAE,CAAC,CAAC;IACT,CAAC,IAAI,EAAE,CAAC,CAAC;IACT,CAAC,MAAM,EAAE,CAAC,CAAC;IACX,CAAC,GAAG,EAAE,CAAC,CAAC;CACA,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAC/C,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,OAAO,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comment-openers.test.d.ts","sourceRoot":"","sources":["../../src/signals/comment-openers.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* comment-openers — the shared comment-opener table (ADR-0014) and the
|
|
3
|
+
* `stripCommentOpener` helper that removes a recognized opener from the start
|
|
4
|
+
* of a trimmed line.
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect } from 'vitest';
|
|
7
|
+
import { COMMENT_OPENERS, stripCommentOpener } from './comment-openers.js';
|
|
8
|
+
describe('COMMENT_OPENERS', () => {
|
|
9
|
+
it('encodes each opener with its correct character length', () => {
|
|
10
|
+
expect(COMMENT_OPENERS).toEqual([
|
|
11
|
+
['//', 2],
|
|
12
|
+
['/*', 2],
|
|
13
|
+
['<!--', 4],
|
|
14
|
+
['#', 1],
|
|
15
|
+
]);
|
|
16
|
+
for (const [opener, length] of COMMENT_OPENERS) {
|
|
17
|
+
expect(opener.length).toBe(length);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
describe('stripCommentOpener', () => {
|
|
22
|
+
it('strips a line-comment opener', () => {
|
|
23
|
+
expect(stripCommentOpener('// fitness-disable foo')).toBe(' fitness-disable foo');
|
|
24
|
+
});
|
|
25
|
+
it('strips a block-comment opener', () => {
|
|
26
|
+
expect(stripCommentOpener('/* fitness-disable foo */')).toBe(' fitness-disable foo */');
|
|
27
|
+
});
|
|
28
|
+
it('strips an HTML/markdown opener (4 chars)', () => {
|
|
29
|
+
expect(stripCommentOpener('<!-- fitness-disable foo -->')).toBe(' fitness-disable foo -->');
|
|
30
|
+
});
|
|
31
|
+
it('strips a hash opener (1 char)', () => {
|
|
32
|
+
expect(stripCommentOpener('# fitness-disable foo')).toBe(' fitness-disable foo');
|
|
33
|
+
});
|
|
34
|
+
it('returns null for a line that does not start with any known opener', () => {
|
|
35
|
+
expect(stripCommentOpener('const x = 1;')).toBeNull();
|
|
36
|
+
});
|
|
37
|
+
it('returns null for the empty string', () => {
|
|
38
|
+
expect(stripCommentOpener('')).toBeNull();
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=comment-openers.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comment-openers.test.js","sourceRoot":"","sources":["../../src/signals/comment-openers.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE3E,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC;YAC9B,CAAC,IAAI,EAAE,CAAC,CAAC;YACT,CAAC,IAAI,EAAE,CAAC,CAAC;YACT,CAAC,MAAM,EAAE,CAAC,CAAC;YACX,CAAC,GAAG,EAAE,CAAC,CAAC;SACT,CAAC,CAAC;QACH,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,kBAAkB,CAAC,8BAA8B,CAAC,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|