context-probe 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 +183 -0
- package/README.ja.md +323 -0
- package/README.md +323 -0
- package/dist/src/analyzers/architecture-contract-declarations-dart.d.ts +2 -0
- package/dist/src/analyzers/architecture-contract-declarations-dart.js +129 -0
- package/dist/src/analyzers/architecture-contract-declarations-ecma-core.d.ts +2 -0
- package/dist/src/analyzers/architecture-contract-declarations-ecma-core.js +89 -0
- package/dist/src/analyzers/architecture-contract-declarations-ecma-shared.d.ts +10 -0
- package/dist/src/analyzers/architecture-contract-declarations-ecma-shared.js +56 -0
- package/dist/src/analyzers/architecture-contract-declarations-ecma.d.ts +1 -0
- package/dist/src/analyzers/architecture-contract-declarations-ecma.js +1 -0
- package/dist/src/analyzers/architecture-contract-declarations-shared.d.ts +8 -0
- package/dist/src/analyzers/architecture-contract-declarations-shared.js +21 -0
- package/dist/src/analyzers/architecture-contract-declarations.d.ts +2 -0
- package/dist/src/analyzers/architecture-contract-declarations.js +2 -0
- package/dist/src/analyzers/architecture-contract-score-baseline-analysis.d.ts +8 -0
- package/dist/src/analyzers/architecture-contract-score-baseline-analysis.js +70 -0
- package/dist/src/analyzers/architecture-contract-score-baseline-core.d.ts +8 -0
- package/dist/src/analyzers/architecture-contract-score-baseline-core.js +4 -0
- package/dist/src/analyzers/architecture-contract-score-baseline-entry.d.ts +19 -0
- package/dist/src/analyzers/architecture-contract-score-baseline-entry.js +89 -0
- package/dist/src/analyzers/architecture-contract-score-baseline-scope.d.ts +8 -0
- package/dist/src/analyzers/architecture-contract-score-baseline-scope.js +18 -0
- package/dist/src/analyzers/architecture-contract-score-baseline.d.ts +1 -0
- package/dist/src/analyzers/architecture-contract-score-baseline.js +1 -0
- package/dist/src/analyzers/architecture-contract-score-current.d.ts +3 -0
- package/dist/src/analyzers/architecture-contract-score-current.js +39 -0
- package/dist/src/analyzers/architecture-contract-score-shared.d.ts +18 -0
- package/dist/src/analyzers/architecture-contract-score-shared.js +9 -0
- package/dist/src/analyzers/architecture-contract-scoring.d.ts +15 -0
- package/dist/src/analyzers/architecture-contract-scoring.js +70 -0
- package/dist/src/analyzers/architecture-contract-stats-core.d.ts +9 -0
- package/dist/src/analyzers/architecture-contract-stats-core.js +20 -0
- package/dist/src/analyzers/architecture-contract-stats-file.d.ts +23 -0
- package/dist/src/analyzers/architecture-contract-stats-file.js +77 -0
- package/dist/src/analyzers/architecture-contract-stats.d.ts +2 -0
- package/dist/src/analyzers/architecture-contract-stats.js +1 -0
- package/dist/src/analyzers/architecture-contract-types.d.ts +24 -0
- package/dist/src/analyzers/architecture-contract-types.js +1 -0
- package/dist/src/analyzers/architecture-contracts.d.ts +2 -0
- package/dist/src/analyzers/architecture-contracts.js +1 -0
- package/dist/src/analyzers/architecture-cti-ingest.d.ts +19 -0
- package/dist/src/analyzers/architecture-cti-ingest.js +64 -0
- package/dist/src/analyzers/architecture-delivery-normalization-core.d.ts +6 -0
- package/dist/src/analyzers/architecture-delivery-normalization-core.js +83 -0
- package/dist/src/analyzers/architecture-delivery-normalization-shared.d.ts +16 -0
- package/dist/src/analyzers/architecture-delivery-normalization-shared.js +1 -0
- package/dist/src/analyzers/architecture-delivery-normalization-spec.d.ts +13 -0
- package/dist/src/analyzers/architecture-delivery-normalization-spec.js +52 -0
- package/dist/src/analyzers/architecture-delivery-normalization.d.ts +6 -0
- package/dist/src/analyzers/architecture-delivery-normalization.js +4 -0
- package/dist/src/analyzers/architecture-evolution-efficiency.d.ts +8 -0
- package/dist/src/analyzers/architecture-evolution-efficiency.js +76 -0
- package/dist/src/analyzers/architecture-evolution-locality.d.ts +7 -0
- package/dist/src/analyzers/architecture-evolution-locality.js +129 -0
- package/dist/src/analyzers/architecture-evolution-shared.d.ts +33 -0
- package/dist/src/analyzers/architecture-evolution-shared.js +29 -0
- package/dist/src/analyzers/architecture-evolution.d.ts +3 -0
- package/dist/src/analyzers/architecture-evolution.js +2 -0
- package/dist/src/analyzers/architecture-observation-ingest-delivery.d.ts +9 -0
- package/dist/src/analyzers/architecture-observation-ingest-delivery.js +62 -0
- package/dist/src/analyzers/architecture-observation-ingest-shared.d.ts +13 -0
- package/dist/src/analyzers/architecture-observation-ingest-shared.js +12 -0
- package/dist/src/analyzers/architecture-observation-ingest-telemetry.d.ts +10 -0
- package/dist/src/analyzers/architecture-observation-ingest-telemetry.js +71 -0
- package/dist/src/analyzers/architecture-observation-ingest.d.ts +5 -0
- package/dist/src/analyzers/architecture-observation-ingest.js +2 -0
- package/dist/src/analyzers/architecture-observation-normalization-shared.d.ts +10 -0
- package/dist/src/analyzers/architecture-observation-normalization-shared.js +19 -0
- package/dist/src/analyzers/architecture-operations-common-ops.d.ts +16 -0
- package/dist/src/analyzers/architecture-operations-common-ops.js +76 -0
- package/dist/src/analyzers/architecture-operations.d.ts +27 -0
- package/dist/src/analyzers/architecture-operations.js +56 -0
- package/dist/src/analyzers/architecture-pattern-runtime-fallback.d.ts +8 -0
- package/dist/src/analyzers/architecture-pattern-runtime-fallback.js +79 -0
- package/dist/src/analyzers/architecture-pattern-runtime-family.d.ts +7 -0
- package/dist/src/analyzers/architecture-pattern-runtime-family.js +56 -0
- package/dist/src/analyzers/architecture-pattern-runtime-normalization-blocks.d.ts +12 -0
- package/dist/src/analyzers/architecture-pattern-runtime-normalization-blocks.js +41 -0
- package/dist/src/analyzers/architecture-pattern-runtime-normalization-math.d.ts +10 -0
- package/dist/src/analyzers/architecture-pattern-runtime-normalization-math.js +19 -0
- package/dist/src/analyzers/architecture-pattern-runtime-normalization.d.ts +21 -0
- package/dist/src/analyzers/architecture-pattern-runtime-normalization.js +103 -0
- package/dist/src/analyzers/architecture-pattern-runtime-resolution-shared.d.ts +16 -0
- package/dist/src/analyzers/architecture-pattern-runtime-resolution-shared.js +65 -0
- package/dist/src/analyzers/architecture-pattern-runtime-resolution.d.ts +15 -0
- package/dist/src/analyzers/architecture-pattern-runtime-resolution.js +99 -0
- package/dist/src/analyzers/architecture-pattern-runtime-shared.d.ts +2 -0
- package/dist/src/analyzers/architecture-pattern-runtime-shared.js +1 -0
- package/dist/src/analyzers/architecture-pattern-runtime-types.d.ts +29 -0
- package/dist/src/analyzers/architecture-pattern-runtime-types.js +1 -0
- package/dist/src/analyzers/architecture-pattern-runtime.d.ts +7 -0
- package/dist/src/analyzers/architecture-pattern-runtime.js +20 -0
- package/dist/src/analyzers/architecture-purity-signals.d.ts +6 -0
- package/dist/src/analyzers/architecture-purity-signals.js +21 -0
- package/dist/src/analyzers/architecture-purity.d.ts +2 -0
- package/dist/src/analyzers/architecture-purity.js +1 -0
- package/dist/src/analyzers/architecture-scenarios.d.ts +22 -0
- package/dist/src/analyzers/architecture-scenarios.js +95 -0
- package/dist/src/analyzers/architecture-source-loader-command.d.ts +8 -0
- package/dist/src/analyzers/architecture-source-loader-command.js +73 -0
- package/dist/src/analyzers/architecture-source-loader-core.d.ts +22 -0
- package/dist/src/analyzers/architecture-source-loader-core.js +41 -0
- package/dist/src/analyzers/architecture-source-loader-file.d.ts +8 -0
- package/dist/src/analyzers/architecture-source-loader-file.js +28 -0
- package/dist/src/analyzers/architecture-source-loader-shared.d.ts +24 -0
- package/dist/src/analyzers/architecture-source-loader-shared.js +4 -0
- package/dist/src/analyzers/architecture-source-loader.d.ts +2 -0
- package/dist/src/analyzers/architecture-source-loader.js +1 -0
- package/dist/src/analyzers/architecture-telemetry-normalization-band.d.ts +10 -0
- package/dist/src/analyzers/architecture-telemetry-normalization-band.js +78 -0
- package/dist/src/analyzers/architecture-telemetry-normalization-core.d.ts +6 -0
- package/dist/src/analyzers/architecture-telemetry-normalization-core.js +30 -0
- package/dist/src/analyzers/architecture-telemetry-normalization-shared.d.ts +16 -0
- package/dist/src/analyzers/architecture-telemetry-normalization-shared.js +1 -0
- package/dist/src/analyzers/architecture-telemetry-normalization-spec.d.ts +10 -0
- package/dist/src/analyzers/architecture-telemetry-normalization-spec.js +20 -0
- package/dist/src/analyzers/architecture-telemetry-normalization.d.ts +6 -0
- package/dist/src/analyzers/architecture-telemetry-normalization.js +4 -0
- package/dist/src/analyzers/architecture-topology-core.d.ts +7 -0
- package/dist/src/analyzers/architecture-topology-core.js +4 -0
- package/dist/src/analyzers/architecture-topology-shared.d.ts +2 -0
- package/dist/src/analyzers/architecture-topology-shared.js +9 -0
- package/dist/src/analyzers/architecture-topology-signals.d.ts +21 -0
- package/dist/src/analyzers/architecture-topology-signals.js +98 -0
- package/dist/src/analyzers/architecture-topology.d.ts +2 -0
- package/dist/src/analyzers/architecture-topology.js +1 -0
- package/dist/src/analyzers/architecture.d.ts +16 -0
- package/dist/src/analyzers/architecture.js +44 -0
- package/dist/src/analyzers/code-contracts.d.ts +4 -0
- package/dist/src/analyzers/code-contracts.js +74 -0
- package/dist/src/analyzers/code-dart.d.ts +3 -0
- package/dist/src/analyzers/code-dart.js +57 -0
- package/dist/src/analyzers/code-ecma.d.ts +2 -0
- package/dist/src/analyzers/code-ecma.js +53 -0
- package/dist/src/analyzers/code-shared.d.ts +19 -0
- package/dist/src/analyzers/code-shared.js +64 -0
- package/dist/src/analyzers/code.d.ts +3 -0
- package/dist/src/analyzers/code.js +34 -0
- package/dist/src/analyzers/contract-files.d.ts +13 -0
- package/dist/src/analyzers/contract-files.js +80 -0
- package/dist/src/analyzers/cti-complexity-components.d.ts +12 -0
- package/dist/src/analyzers/cti-complexity-components.js +83 -0
- package/dist/src/analyzers/cti-complexity-recorder.d.ts +31 -0
- package/dist/src/analyzers/cti-complexity-recorder.js +58 -0
- package/dist/src/analyzers/cti-complexity.d.ts +7 -0
- package/dist/src/analyzers/cti-complexity.js +15 -0
- package/dist/src/analyzers/cti-helpers.d.ts +7 -0
- package/dist/src/analyzers/cti-helpers.js +40 -0
- package/dist/src/analyzers/cti.d.ts +2 -0
- package/dist/src/analyzers/cti.js +1 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +95 -0
- package/dist/src/command-architecture-inputs-loaders-config.d.ts +24 -0
- package/dist/src/command-architecture-inputs-loaders-config.js +17 -0
- package/dist/src/command-architecture-inputs-loaders-data.d.ts +22 -0
- package/dist/src/command-architecture-inputs-loaders-data.js +105 -0
- package/dist/src/command-architecture-inputs-loaders.d.ts +42 -0
- package/dist/src/command-architecture-inputs-loaders.js +12 -0
- package/dist/src/command-architecture-inputs-provenance.d.ts +2 -0
- package/dist/src/command-architecture-inputs-provenance.js +29 -0
- package/dist/src/command-architecture-inputs-resolved.d.ts +44 -0
- package/dist/src/command-architecture-inputs-resolved.js +72 -0
- package/dist/src/command-architecture-inputs-sources.d.ts +2 -0
- package/dist/src/command-architecture-inputs-sources.js +1 -0
- package/dist/src/command-architecture-inputs.d.ts +4 -0
- package/dist/src/command-architecture-inputs.js +63 -0
- package/dist/src/command-architecture.d.ts +2 -0
- package/dist/src/command-architecture.js +35 -0
- package/dist/src/command-domain.d.ts +2 -0
- package/dist/src/command-domain.js +124 -0
- package/dist/src/command-extraction-helpers.d.ts +13 -0
- package/dist/src/command-extraction-helpers.js +33 -0
- package/dist/src/command-helpers.d.ts +4 -0
- package/dist/src/command-helpers.js +3 -0
- package/dist/src/command-history.d.ts +2 -0
- package/dist/src/command-history.js +61 -0
- package/dist/src/command-input-loaders-architecture-compat-delivery-complexity.d.ts +3 -0
- package/dist/src/command-input-loaders-architecture-compat-delivery-complexity.js +132 -0
- package/dist/src/command-input-loaders-architecture-compat-pattern-runtime.d.ts +2 -0
- package/dist/src/command-input-loaders-architecture-compat-pattern-runtime.js +54 -0
- package/dist/src/command-input-loaders-architecture-compat-scenario.d.ts +3 -0
- package/dist/src/command-input-loaders-architecture-compat-scenario.js +94 -0
- package/dist/src/command-input-loaders-architecture-compat-shared.d.ts +17 -0
- package/dist/src/command-input-loaders-architecture-compat-shared.js +109 -0
- package/dist/src/command-input-loaders-architecture-compat-telemetry.d.ts +3 -0
- package/dist/src/command-input-loaders-architecture-compat-telemetry.js +137 -0
- package/dist/src/command-input-loaders-architecture-compat-topology-boundary.d.ts +3 -0
- package/dist/src/command-input-loaders-architecture-compat-topology-boundary.js +178 -0
- package/dist/src/command-input-loaders-architecture-compat.d.ts +4 -0
- package/dist/src/command-input-loaders-architecture-compat.js +4 -0
- package/dist/src/command-input-loaders-architecture-config.d.ts +34 -0
- package/dist/src/command-input-loaders-architecture-config.js +25 -0
- package/dist/src/command-input-loaders-architecture-data.d.ts +17 -0
- package/dist/src/command-input-loaders-architecture-data.js +47 -0
- package/dist/src/command-input-loaders-architecture.d.ts +2 -0
- package/dist/src/command-input-loaders-architecture.js +2 -0
- package/dist/src/command-input-loaders-core.d.ts +20 -0
- package/dist/src/command-input-loaders-core.js +58 -0
- package/dist/src/command-input-loaders.d.ts +2 -0
- package/dist/src/command-input-loaders.js +2 -0
- package/dist/src/command-path-helpers.d.ts +6 -0
- package/dist/src/command-path-helpers.js +15 -0
- package/dist/src/command-score-driven.d.ts +19 -0
- package/dist/src/command-score-driven.js +96 -0
- package/dist/src/command-score.d.ts +3 -0
- package/dist/src/command-score.js +78 -0
- package/dist/src/command-shadow-rollout-batch.d.ts +5 -0
- package/dist/src/command-shadow-rollout-batch.js +85 -0
- package/dist/src/command-shadow-rollout-gate.d.ts +5 -0
- package/dist/src/command-shadow-rollout-gate.js +33 -0
- package/dist/src/command-shadow-rollout-observe.d.ts +5 -0
- package/dist/src/command-shadow-rollout-observe.js +43 -0
- package/dist/src/command-shadow-rollout-shared.d.ts +4 -0
- package/dist/src/command-shadow-rollout-shared.js +23 -0
- package/dist/src/command-shadow-rollout.d.ts +2 -0
- package/dist/src/command-shadow-rollout.js +16 -0
- package/dist/src/command-types.d.ts +4 -0
- package/dist/src/command-types.js +1 -0
- package/dist/src/commands.d.ts +6 -0
- package/dist/src/commands.js +66 -0
- package/dist/src/core/aggregate-fitness-core.d.ts +24 -0
- package/dist/src/core/aggregate-fitness-core.js +40 -0
- package/dist/src/core/aggregate-fitness-evidence.d.ts +2 -0
- package/dist/src/core/aggregate-fitness-evidence.js +24 -0
- package/dist/src/core/aggregate-fitness-mapping.d.ts +17 -0
- package/dist/src/core/aggregate-fitness-mapping.js +57 -0
- package/dist/src/core/aggregate-fitness-scoring.d.ts +24 -0
- package/dist/src/core/aggregate-fitness-scoring.js +71 -0
- package/dist/src/core/aggregate-fitness-shared.d.ts +21 -0
- package/dist/src/core/aggregate-fitness-shared.js +127 -0
- package/dist/src/core/aggregate-fitness.d.ts +2 -0
- package/dist/src/core/aggregate-fitness.js +1 -0
- package/dist/src/core/architecture-purity-core.d.ts +3 -0
- package/dist/src/core/architecture-purity-core.js +94 -0
- package/dist/src/core/architecture-purity-types.d.ts +18 -0
- package/dist/src/core/architecture-purity-types.js +1 -0
- package/dist/src/core/architecture-scenario-quality.d.ts +5 -0
- package/dist/src/core/architecture-scenario-quality.js +52 -0
- package/dist/src/core/architecture-scoring-evidence-architecture.d.ts +10 -0
- package/dist/src/core/architecture-scoring-evidence-architecture.js +50 -0
- package/dist/src/core/architecture-scoring-evidence-findings.d.ts +2 -0
- package/dist/src/core/architecture-scoring-evidence-findings.js +2 -0
- package/dist/src/core/architecture-scoring-evidence-inputs-ingest.d.ts +5 -0
- package/dist/src/core/architecture-scoring-evidence-inputs-ingest.js +68 -0
- package/dist/src/core/architecture-scoring-evidence-inputs-shared.d.ts +20 -0
- package/dist/src/core/architecture-scoring-evidence-inputs-shared.js +24 -0
- package/dist/src/core/architecture-scoring-evidence-inputs-source.d.ts +7 -0
- package/dist/src/core/architecture-scoring-evidence-inputs-source.js +16 -0
- package/dist/src/core/architecture-scoring-evidence-inputs.d.ts +2 -0
- package/dist/src/core/architecture-scoring-evidence-inputs.js +2 -0
- package/dist/src/core/architecture-scoring-evidence-observability.d.ts +12 -0
- package/dist/src/core/architecture-scoring-evidence-observability.js +75 -0
- package/dist/src/core/architecture-scoring-evidence.d.ts +30 -0
- package/dist/src/core/architecture-scoring-evidence.js +76 -0
- package/dist/src/core/architecture-scoring-evolution-inputs.d.ts +10 -0
- package/dist/src/core/architecture-scoring-evolution-inputs.js +56 -0
- package/dist/src/core/architecture-scoring-inputs-complexity.d.ts +7 -0
- package/dist/src/core/architecture-scoring-inputs-complexity.js +24 -0
- package/dist/src/core/architecture-scoring-inputs-observability.d.ts +11 -0
- package/dist/src/core/architecture-scoring-inputs-observability.js +84 -0
- package/dist/src/core/architecture-scoring-inputs-static.d.ts +13 -0
- package/dist/src/core/architecture-scoring-inputs-static.js +48 -0
- package/dist/src/core/architecture-scoring-inputs.d.ts +9 -0
- package/dist/src/core/architecture-scoring-inputs.js +16 -0
- package/dist/src/core/architecture-scoring-metric-shared.d.ts +11 -0
- package/dist/src/core/architecture-scoring-metric-shared.js +3 -0
- package/dist/src/core/architecture-scoring-metrics-composite.d.ts +3 -0
- package/dist/src/core/architecture-scoring-metrics-composite.js +56 -0
- package/dist/src/core/architecture-scoring-metrics-core.d.ts +3 -0
- package/dist/src/core/architecture-scoring-metrics-core.js +81 -0
- package/dist/src/core/architecture-scoring-metrics-evolution.d.ts +3 -0
- package/dist/src/core/architecture-scoring-metrics-evolution.js +74 -0
- package/dist/src/core/architecture-scoring-metrics-runtime.d.ts +3 -0
- package/dist/src/core/architecture-scoring-metrics-runtime.js +68 -0
- package/dist/src/core/architecture-scoring-metrics.d.ts +4 -0
- package/dist/src/core/architecture-scoring-metrics.js +14 -0
- package/dist/src/core/architecture-scoring-types.d.ts +94 -0
- package/dist/src/core/architecture-scoring-types.js +1 -0
- package/dist/src/core/architecture-scoring.d.ts +9 -0
- package/dist/src/core/architecture-scoring.js +82 -0
- package/dist/src/core/artifacts.d.ts +3 -0
- package/dist/src/core/artifacts.js +58 -0
- package/dist/src/core/boundary-fitness-attraction.d.ts +4 -0
- package/dist/src/core/boundary-fitness-attraction.js +11 -0
- package/dist/src/core/boundary-fitness-contexts.d.ts +7 -0
- package/dist/src/core/boundary-fitness-contexts.js +80 -0
- package/dist/src/core/boundary-fitness-core.d.ts +28 -0
- package/dist/src/core/boundary-fitness-core.js +132 -0
- package/dist/src/core/boundary-fitness-evidence.d.ts +17 -0
- package/dist/src/core/boundary-fitness-evidence.js +27 -0
- package/dist/src/core/boundary-fitness-separation.d.ts +13 -0
- package/dist/src/core/boundary-fitness-separation.js +14 -0
- package/dist/src/core/boundary-fitness-shared.d.ts +3 -0
- package/dist/src/core/boundary-fitness-shared.js +17 -0
- package/dist/src/core/boundary-fitness-signals.d.ts +21 -0
- package/dist/src/core/boundary-fitness-signals.js +104 -0
- package/dist/src/core/boundary-fitness.d.ts +3 -0
- package/dist/src/core/boundary-fitness.js +2 -0
- package/dist/src/core/command-analytics.d.ts +32 -0
- package/dist/src/core/command-analytics.js +80 -0
- package/dist/src/core/contracts/analysis.d.ts +105 -0
- package/dist/src/core/contracts/analysis.js +1 -0
- package/dist/src/core/contracts/architecture-complexity.d.ts +20 -0
- package/dist/src/core/contracts/architecture-complexity.js +1 -0
- package/dist/src/core/contracts/architecture-constraints.d.ts +62 -0
- package/dist/src/core/contracts/architecture-constraints.js +1 -0
- package/dist/src/core/contracts/architecture-contract-baseline.d.ts +33 -0
- package/dist/src/core/contracts/architecture-contract-baseline.js +1 -0
- package/dist/src/core/contracts/architecture-delivery.d.ts +42 -0
- package/dist/src/core/contracts/architecture-delivery.js +1 -0
- package/dist/src/core/contracts/architecture-normalization.d.ts +6 -0
- package/dist/src/core/contracts/architecture-normalization.js +1 -0
- package/dist/src/core/contracts/architecture-pattern-runtime.d.ts +69 -0
- package/dist/src/core/contracts/architecture-pattern-runtime.js +1 -0
- package/dist/src/core/contracts/architecture-scenarios.d.ts +62 -0
- package/dist/src/core/contracts/architecture-scenarios.js +1 -0
- package/dist/src/core/contracts/architecture-telemetry.d.ts +47 -0
- package/dist/src/core/contracts/architecture-telemetry.js +1 -0
- package/dist/src/core/contracts/architecture-topology.d.ts +35 -0
- package/dist/src/core/contracts/architecture-topology.js +1 -0
- package/dist/src/core/contracts/architecture.d.ts +9 -0
- package/dist/src/core/contracts/architecture.js +9 -0
- package/dist/src/core/contracts/common.d.ts +87 -0
- package/dist/src/core/contracts/common.js +1 -0
- package/dist/src/core/contracts/domain-design-score.d.ts +14 -0
- package/dist/src/core/contracts/domain-design-score.js +1 -0
- package/dist/src/core/contracts/domain-design-shadow-rollout-batch.d.ts +58 -0
- package/dist/src/core/contracts/domain-design-shadow-rollout-batch.js +1 -0
- package/dist/src/core/contracts/domain-design-shadow-rollout-gate.d.ts +46 -0
- package/dist/src/core/contracts/domain-design-shadow-rollout-gate.js +1 -0
- package/dist/src/core/contracts/domain-design-shadow-rollout-observation.d.ts +17 -0
- package/dist/src/core/contracts/domain-design-shadow-rollout-observation.js +1 -0
- package/dist/src/core/contracts/domain-design-shadow-rollout-registry.d.ts +15 -0
- package/dist/src/core/contracts/domain-design-shadow-rollout-registry.js +1 -0
- package/dist/src/core/contracts/domain-design.d.ts +5 -0
- package/dist/src/core/contracts/domain-design.js +5 -0
- package/dist/src/core/contracts/domain-model.d.ts +35 -0
- package/dist/src/core/contracts/domain-model.js +1 -0
- package/dist/src/core/contracts/governance-extraction.d.ts +65 -0
- package/dist/src/core/contracts/governance-extraction.js +1 -0
- package/dist/src/core/contracts/governance-policy.d.ts +23 -0
- package/dist/src/core/contracts/governance-policy.js +1 -0
- package/dist/src/core/contracts/governance-review.d.ts +31 -0
- package/dist/src/core/contracts/governance-review.js +1 -0
- package/dist/src/core/contracts/governance-runtime.d.ts +12 -0
- package/dist/src/core/contracts/governance-runtime.js +1 -0
- package/dist/src/core/contracts/governance-scoring.d.ts +41 -0
- package/dist/src/core/contracts/governance-scoring.js +1 -0
- package/dist/src/core/contracts/governance.d.ts +5 -0
- package/dist/src/core/contracts/governance.js +5 -0
- package/dist/src/core/contracts.d.ts +6 -0
- package/dist/src/core/contracts.js +6 -0
- package/dist/src/core/document-extractor-glossary.d.ts +3 -0
- package/dist/src/core/document-extractor-glossary.js +90 -0
- package/dist/src/core/document-extractor-identity.d.ts +18 -0
- package/dist/src/core/document-extractor-identity.js +37 -0
- package/dist/src/core/document-extractor-shared.d.ts +3 -0
- package/dist/src/core/document-extractor-shared.js +2 -0
- package/dist/src/core/document-extractor-statements-classification-cli.d.ts +3 -0
- package/dist/src/core/document-extractor-statements-classification-cli.js +50 -0
- package/dist/src/core/document-extractor-statements-classification-core.d.ts +17 -0
- package/dist/src/core/document-extractor-statements-classification-core.js +91 -0
- package/dist/src/core/document-extractor-statements-classification-heuristic.d.ts +3 -0
- package/dist/src/core/document-extractor-statements-classification-heuristic.js +32 -0
- package/dist/src/core/document-extractor-statements-classification.d.ts +2 -0
- package/dist/src/core/document-extractor-statements-classification.js +2 -0
- package/dist/src/core/document-extractor-statements-segments.d.ts +3 -0
- package/dist/src/core/document-extractor-statements-segments.js +38 -0
- package/dist/src/core/document-extractor-statements.d.ts +1 -0
- package/dist/src/core/document-extractor-statements.js +1 -0
- package/dist/src/core/document-extractor-text-normalization.d.ts +5 -0
- package/dist/src/core/document-extractor-text-normalization.js +29 -0
- package/dist/src/core/document-extractor-text-review.d.ts +3 -0
- package/dist/src/core/document-extractor-text-review.js +15 -0
- package/dist/src/core/document-extractor-text-signals.d.ts +11 -0
- package/dist/src/core/document-extractor-text-signals.js +115 -0
- package/dist/src/core/document-extractor-text.d.ts +3 -0
- package/dist/src/core/document-extractor-text.js +3 -0
- package/dist/src/core/document-extractor-types.d.ts +30 -0
- package/dist/src/core/document-extractor-types.js +1 -0
- package/dist/src/core/document-extractors-review.d.ts +4 -0
- package/dist/src/core/document-extractors-review.js +10 -0
- package/dist/src/core/document-extractors-runner.d.ts +15 -0
- package/dist/src/core/document-extractors-runner.js +31 -0
- package/dist/src/core/document-extractors.d.ts +24 -0
- package/dist/src/core/document-extractors.js +130 -0
- package/dist/src/core/domain-design-matching.d.ts +2 -0
- package/dist/src/core/domain-design-matching.js +85 -0
- package/dist/src/core/domain-design-scoring-context.d.ts +25 -0
- package/dist/src/core/domain-design-scoring-context.js +66 -0
- package/dist/src/core/domain-design-scoring-core-docs.d.ts +5 -0
- package/dist/src/core/domain-design-scoring-core-docs.js +8 -0
- package/dist/src/core/domain-design-scoring-core.d.ts +24 -0
- package/dist/src/core/domain-design-scoring-core.js +137 -0
- package/dist/src/core/domain-design-scoring-docs-afs.d.ts +2 -0
- package/dist/src/core/domain-design-scoring-docs-afs.js +40 -0
- package/dist/src/core/domain-design-scoring-docs-bfs.d.ts +2 -0
- package/dist/src/core/domain-design-scoring-docs-bfs.js +46 -0
- package/dist/src/core/domain-design-scoring-docs-core.d.ts +12 -0
- package/dist/src/core/domain-design-scoring-docs-core.js +47 -0
- package/dist/src/core/domain-design-scoring-docs-drf.d.ts +2 -0
- package/dist/src/core/domain-design-scoring-docs-drf.js +55 -0
- package/dist/src/core/domain-design-scoring-docs-shared.d.ts +25 -0
- package/dist/src/core/domain-design-scoring-docs-shared.js +1 -0
- package/dist/src/core/domain-design-scoring-docs-uli.d.ts +2 -0
- package/dist/src/core/domain-design-scoring-docs-uli.js +39 -0
- package/dist/src/core/domain-design-scoring-docs.d.ts +1 -0
- package/dist/src/core/domain-design-scoring-docs.js +1 -0
- package/dist/src/core/domain-design-scoring-locality.d.ts +27 -0
- package/dist/src/core/domain-design-scoring-locality.js +87 -0
- package/dist/src/core/domain-design-scoring-mccs.d.ts +18 -0
- package/dist/src/core/domain-design-scoring-mccs.js +29 -0
- package/dist/src/core/domain-design-scoring-pilot.d.ts +13 -0
- package/dist/src/core/domain-design-scoring-pilot.js +57 -0
- package/dist/src/core/domain-design-scoring-response-shared.d.ts +20 -0
- package/dist/src/core/domain-design-scoring-response-shared.js +30 -0
- package/dist/src/core/domain-design-scoring-response.d.ts +18 -0
- package/dist/src/core/domain-design-scoring-response.js +27 -0
- package/dist/src/core/domain-design-scoring-support-drf.d.ts +17 -0
- package/dist/src/core/domain-design-scoring-support-drf.js +118 -0
- package/dist/src/core/domain-design-scoring-support-persistence.d.ts +6 -0
- package/dist/src/core/domain-design-scoring-support-persistence.js +8 -0
- package/dist/src/core/domain-design-scoring-support-uli.d.ts +12 -0
- package/dist/src/core/domain-design-scoring-support-uli.js +31 -0
- package/dist/src/core/domain-design-scoring-support.d.ts +3 -0
- package/dist/src/core/domain-design-scoring-support.js +3 -0
- package/dist/src/core/domain-design-scoring.d.ts +1 -0
- package/dist/src/core/domain-design-scoring.js +1 -0
- package/dist/src/core/formula-parser-tokenize.d.ts +14 -0
- package/dist/src/core/formula-parser-tokenize.js +58 -0
- package/dist/src/core/formula-parser.d.ts +1 -0
- package/dist/src/core/formula-parser.js +91 -0
- package/dist/src/core/formula.d.ts +1 -0
- package/dist/src/core/formula.js +1 -0
- package/dist/src/core/history-locality.d.ts +5 -0
- package/dist/src/core/history-locality.js +48 -0
- package/dist/src/core/history-normalization.d.ts +13 -0
- package/dist/src/core/history-normalization.js +105 -0
- package/dist/src/core/history-persistence-analysis.d.ts +6 -0
- package/dist/src/core/history-persistence-analysis.js +26 -0
- package/dist/src/core/history-persistence-clusters.d.ts +6 -0
- package/dist/src/core/history-persistence-clusters.js +9 -0
- package/dist/src/core/history-persistence-comparison.d.ts +6 -0
- package/dist/src/core/history-persistence-comparison.js +66 -0
- package/dist/src/core/history-persistence-components.d.ts +8 -0
- package/dist/src/core/history-persistence-components.js +99 -0
- package/dist/src/core/history-persistence-stability.d.ts +8 -0
- package/dist/src/core/history-persistence-stability.js +79 -0
- package/dist/src/core/history-persistence.d.ts +2 -0
- package/dist/src/core/history-persistence.js +2 -0
- package/dist/src/core/history-shared.d.ts +27 -0
- package/dist/src/core/history-shared.js +145 -0
- package/dist/src/core/history.d.ts +3 -0
- package/dist/src/core/history.js +3 -0
- package/dist/src/core/io.d.ts +9 -0
- package/dist/src/core/io.js +86 -0
- package/dist/src/core/measurement-metadata.d.ts +13 -0
- package/dist/src/core/measurement-metadata.js +142 -0
- package/dist/src/core/model.d.ts +3 -0
- package/dist/src/core/model.js +33 -0
- package/dist/src/core/policy-defaults-architecture.d.ts +2 -0
- package/dist/src/core/policy-defaults-architecture.js +75 -0
- package/dist/src/core/policy-defaults-domain.d.ts +2 -0
- package/dist/src/core/policy-defaults-domain.js +51 -0
- package/dist/src/core/policy-defaults-profiles.d.ts +2 -0
- package/dist/src/core/policy-defaults-profiles.js +24 -0
- package/dist/src/core/policy-defaults.d.ts +2 -0
- package/dist/src/core/policy-defaults.js +4 -0
- package/dist/src/core/policy-formulas.d.ts +5 -0
- package/dist/src/core/policy-formulas.js +5 -0
- package/dist/src/core/policy.d.ts +4 -0
- package/dist/src/core/policy.js +20 -0
- package/dist/src/core/progress.d.ts +8 -0
- package/dist/src/core/progress.js +40 -0
- package/dist/src/core/providers-normalization.d.ts +7 -0
- package/dist/src/core/providers-normalization.js +27 -0
- package/dist/src/core/providers-prompt.d.ts +4 -0
- package/dist/src/core/providers-prompt.js +63 -0
- package/dist/src/core/providers-runner.d.ts +3 -0
- package/dist/src/core/providers-runner.js +32 -0
- package/dist/src/core/providers-types.d.ts +10 -0
- package/dist/src/core/providers-types.js +1 -0
- package/dist/src/core/providers.d.ts +4 -0
- package/dist/src/core/providers.js +30 -0
- package/dist/src/core/report-actionability.d.ts +4 -0
- package/dist/src/core/report-actionability.js +57 -0
- package/dist/src/core/report-architecture.d.ts +2 -0
- package/dist/src/core/report-architecture.js +80 -0
- package/dist/src/core/report-domain.d.ts +2 -0
- package/dist/src/core/report-domain.js +50 -0
- package/dist/src/core/report-gate.d.ts +3 -0
- package/dist/src/core/report-gate.js +54 -0
- package/dist/src/core/report-shared-format.d.ts +2 -0
- package/dist/src/core/report-shared-format.js +6 -0
- package/dist/src/core/report-shared-guidance.d.ts +2 -0
- package/dist/src/core/report-shared-guidance.js +98 -0
- package/dist/src/core/report-shared-predicates.d.ts +17 -0
- package/dist/src/core/report-shared-predicates.js +9 -0
- package/dist/src/core/report-shared.d.ts +4 -0
- package/dist/src/core/report-shared.js +3 -0
- package/dist/src/core/report.d.ts +3 -0
- package/dist/src/core/report.js +10 -0
- package/dist/src/core/response.d.ts +8 -0
- package/dist/src/core/response.js +67 -0
- package/dist/src/core/review-items.d.ts +2 -0
- package/dist/src/core/review-items.js +116 -0
- package/dist/src/core/review-resolutions.d.ts +3 -0
- package/dist/src/core/review-resolutions.js +43 -0
- package/dist/src/core/review.d.ts +2 -0
- package/dist/src/core/review.js +2 -0
- package/dist/src/core/scaffold-aggregation.d.ts +13 -0
- package/dist/src/core/scaffold-aggregation.js +18 -0
- package/dist/src/core/scaffold-architecture-balances.d.ts +3 -0
- package/dist/src/core/scaffold-architecture-balances.js +25 -0
- package/dist/src/core/scaffold-architecture-drafts-builders.d.ts +19 -0
- package/dist/src/core/scaffold-architecture-drafts-builders.js +114 -0
- package/dist/src/core/scaffold-architecture-drafts-profiles.d.ts +11 -0
- package/dist/src/core/scaffold-architecture-drafts-profiles.js +183 -0
- package/dist/src/core/scaffold-architecture-drafts.d.ts +12 -0
- package/dist/src/core/scaffold-architecture-drafts.js +4 -0
- package/dist/src/core/scaffold-architecture-layer-candidates.d.ts +3 -0
- package/dist/src/core/scaffold-architecture-layer-candidates.js +32 -0
- package/dist/src/core/scaffold-architecture-layers.d.ts +3 -0
- package/dist/src/core/scaffold-architecture-layers.js +15 -0
- package/dist/src/core/scaffold-architecture-orchestration.d.ts +5 -0
- package/dist/src/core/scaffold-architecture-orchestration.js +36 -0
- package/dist/src/core/scaffold-architecture-ordering.d.ts +4 -0
- package/dist/src/core/scaffold-architecture-ordering.js +55 -0
- package/dist/src/core/scaffold-architecture.d.ts +1 -0
- package/dist/src/core/scaffold-architecture.js +1 -0
- package/dist/src/core/scaffold-domain-aggregates-candidates.d.ts +4 -0
- package/dist/src/core/scaffold-domain-aggregates-candidates.js +8 -0
- package/dist/src/core/scaffold-domain-aggregates-core.d.ts +1 -0
- package/dist/src/core/scaffold-domain-aggregates-core.js +1 -0
- package/dist/src/core/scaffold-domain-aggregates-dedupe.d.ts +2 -0
- package/dist/src/core/scaffold-domain-aggregates-dedupe.js +18 -0
- package/dist/src/core/scaffold-domain-aggregates-explicit.d.ts +4 -0
- package/dist/src/core/scaffold-domain-aggregates-explicit.js +43 -0
- package/dist/src/core/scaffold-domain-aggregates-inferred.d.ts +4 -0
- package/dist/src/core/scaffold-domain-aggregates-inferred.js +117 -0
- package/dist/src/core/scaffold-domain-aggregates-shared.d.ts +23 -0
- package/dist/src/core/scaffold-domain-aggregates-shared.js +91 -0
- package/dist/src/core/scaffold-domain-aggregates.d.ts +1 -0
- package/dist/src/core/scaffold-domain-aggregates.js +1 -0
- package/dist/src/core/scaffold-domain-context-candidates.d.ts +5 -0
- package/dist/src/core/scaffold-domain-context-candidates.js +65 -0
- package/dist/src/core/scaffold-domain-context-naming.d.ts +8 -0
- package/dist/src/core/scaffold-domain-context-naming.js +117 -0
- package/dist/src/core/scaffold-domain-contexts.d.ts +11 -0
- package/dist/src/core/scaffold-domain-contexts.js +75 -0
- package/dist/src/core/scaffold-domain-docs.d.ts +17 -0
- package/dist/src/core/scaffold-domain-docs.js +18 -0
- package/dist/src/core/scaffold-domain.d.ts +7 -0
- package/dist/src/core/scaffold-domain.js +62 -0
- package/dist/src/core/scaffold-naming.d.ts +4 -0
- package/dist/src/core/scaffold-naming.js +32 -0
- package/dist/src/core/scaffold-options.d.ts +2 -0
- package/dist/src/core/scaffold-options.js +10 -0
- package/dist/src/core/scaffold-shared.d.ts +5 -0
- package/dist/src/core/scaffold-shared.js +4 -0
- package/dist/src/core/scaffold-source-group-classification.d.ts +3 -0
- package/dist/src/core/scaffold-source-group-classification.js +91 -0
- package/dist/src/core/scaffold-source-group-constants.d.ts +3 -0
- package/dist/src/core/scaffold-source-group-constants.js +52 -0
- package/dist/src/core/scaffold-source-group-merge.d.ts +5 -0
- package/dist/src/core/scaffold-source-group-merge.js +56 -0
- package/dist/src/core/scaffold-source-group-naming.d.ts +4 -0
- package/dist/src/core/scaffold-source-group-naming.js +66 -0
- package/dist/src/core/scaffold-source-groups.d.ts +5 -0
- package/dist/src/core/scaffold-source-groups.js +123 -0
- package/dist/src/core/scaffold-types.d.ts +30 -0
- package/dist/src/core/scaffold-types.js +1 -0
- package/dist/src/core/scaffold.d.ts +2 -0
- package/dist/src/core/scaffold.js +2 -0
- package/dist/src/core/scoring-shared.d.ts +12 -0
- package/dist/src/core/scoring-shared.js +39 -0
- package/dist/src/core/scoring.d.ts +2 -0
- package/dist/src/core/scoring.js +2 -0
- package/dist/src/core/shadow-rollout-gate-reasons.d.ts +8 -0
- package/dist/src/core/shadow-rollout-gate-reasons.js +22 -0
- package/dist/src/core/shadow-rollout-gate-summary.d.ts +2 -0
- package/dist/src/core/shadow-rollout-gate-summary.js +36 -0
- package/dist/src/core/shadow-rollout-gate.d.ts +2 -0
- package/dist/src/core/shadow-rollout-gate.js +50 -0
- package/dist/src/core/shadow-rollout-registry.d.ts +5 -0
- package/dist/src/core/shadow-rollout-registry.js +31 -0
- package/dist/src/core/shadow-rollout-summary.d.ts +4 -0
- package/dist/src/core/shadow-rollout-summary.js +39 -0
- package/dist/src/core/shadow-rollout.d.ts +3 -0
- package/dist/src/core/shadow-rollout.js +3 -0
- package/dist/src/core/shared-utils.d.ts +4 -0
- package/dist/src/core/shared-utils.js +15 -0
- package/dist/src/core/trace.d.ts +14 -0
- package/dist/src/core/trace.js +118 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.js +7 -0
- package/dist/src/packs/index.d.ts +2 -0
- package/dist/src/packs/index.js +36 -0
- package/package.json +68 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { classifySubgroup, findSourceRootIndex, inferGroupOrigin } from "./scaffold-source-group-classification.js";
|
|
3
|
+
import { mergeMonorepoEquivalentGroups } from "./scaffold-source-group-merge.js";
|
|
4
|
+
import { normalizeSegmentKey } from "./scaffold-source-group-naming.js";
|
|
5
|
+
export { LAYER_PRIORITY_HINTS } from "./scaffold-source-group-constants.js";
|
|
6
|
+
export { inferGroupDisplayName, inferGroupNames } from "./scaffold-source-group-naming.js";
|
|
7
|
+
export function groupSourceFiles(codebase) {
|
|
8
|
+
const groups = new Map();
|
|
9
|
+
for (const filePath of codebase.scorableSourceFiles) {
|
|
10
|
+
const parts = filePath.split("/");
|
|
11
|
+
if (parts.length === 0) {
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
let key = "__root__";
|
|
15
|
+
let basePath = "";
|
|
16
|
+
let sourceRoot;
|
|
17
|
+
let segment;
|
|
18
|
+
let heuristicSplit = false;
|
|
19
|
+
let origins = [];
|
|
20
|
+
let pathGlobs = [filePath];
|
|
21
|
+
const sourceRootIndex = findSourceRootIndex(parts);
|
|
22
|
+
if (sourceRootIndex >= 0) {
|
|
23
|
+
const rootName = parts[sourceRootIndex];
|
|
24
|
+
if (!rootName) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
sourceRoot = rootName;
|
|
28
|
+
const prefix = parts.slice(0, sourceRootIndex).join("/");
|
|
29
|
+
const segmentName = parts[sourceRootIndex + 1];
|
|
30
|
+
basePath = prefix ? `${prefix}/${sourceRoot}` : sourceRoot;
|
|
31
|
+
if (segmentName && !path.extname(segmentName)) {
|
|
32
|
+
segment = segmentName;
|
|
33
|
+
basePath = `${basePath}/${segment}`;
|
|
34
|
+
key = basePath;
|
|
35
|
+
pathGlobs = [`${basePath}/**`];
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
key = `${basePath}/__root__`;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else if (parts.length >= 2) {
|
|
42
|
+
const segmentName = parts[0];
|
|
43
|
+
if (!segmentName) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
segment = segmentName;
|
|
47
|
+
basePath = segment;
|
|
48
|
+
key = segment;
|
|
49
|
+
pathGlobs = [`${basePath}/**`];
|
|
50
|
+
}
|
|
51
|
+
const classifiedSegment = classifySubgroup(segment, filePath, basePath);
|
|
52
|
+
if (classifiedSegment) {
|
|
53
|
+
key = `__heuristic__/${normalizeSegmentKey(classifiedSegment)}`;
|
|
54
|
+
segment = classifiedSegment;
|
|
55
|
+
heuristicSplit = true;
|
|
56
|
+
origins = [inferGroupOrigin(basePath, sourceRoot, filePath)];
|
|
57
|
+
basePath = origins[0] ?? "";
|
|
58
|
+
pathGlobs = [filePath];
|
|
59
|
+
}
|
|
60
|
+
const group = groups.get(key) ?? {
|
|
61
|
+
key,
|
|
62
|
+
basePath,
|
|
63
|
+
...(sourceRoot ? { sourceRoot } : {}),
|
|
64
|
+
...(segment ? { segment } : {}),
|
|
65
|
+
...(heuristicSplit ? { heuristicSplit: true } : {}),
|
|
66
|
+
...(origins.length > 0 ? { origins } : {}),
|
|
67
|
+
pathGlobs,
|
|
68
|
+
files: [],
|
|
69
|
+
};
|
|
70
|
+
group.files.push(filePath);
|
|
71
|
+
if (heuristicSplit) {
|
|
72
|
+
group.heuristicSplit = true;
|
|
73
|
+
for (const origin of origins) {
|
|
74
|
+
if (!(group.origins ?? []).includes(origin)) {
|
|
75
|
+
group.origins = [...(group.origins ?? []), origin];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
for (const glob of pathGlobs) {
|
|
80
|
+
if (!group.pathGlobs.includes(glob)) {
|
|
81
|
+
group.pathGlobs.push(glob);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
groups.set(key, group);
|
|
85
|
+
}
|
|
86
|
+
return mergeMonorepoEquivalentGroups(Array.from(groups.values()))
|
|
87
|
+
.map((group) => ({ ...group, files: group.files.sort(), pathGlobs: group.pathGlobs.sort() }))
|
|
88
|
+
.sort((left, right) => left.key.localeCompare(right.key));
|
|
89
|
+
}
|
|
90
|
+
export function collectMarkerGlobs(group, markers) {
|
|
91
|
+
const globs = new Set();
|
|
92
|
+
const markerFiles = new Set();
|
|
93
|
+
for (const filePath of group.files) {
|
|
94
|
+
const matchingOrigin = group.origins
|
|
95
|
+
?.slice()
|
|
96
|
+
.sort((left, right) => right.length - left.length)
|
|
97
|
+
.find((origin) => filePath.startsWith(`${origin}/`)) ?? group.basePath;
|
|
98
|
+
const relative = matchingOrigin && filePath.startsWith(`${matchingOrigin}/`)
|
|
99
|
+
? filePath.slice(matchingOrigin.length + 1)
|
|
100
|
+
: group.basePath && filePath.startsWith(`${group.basePath}/`)
|
|
101
|
+
? filePath.slice(group.basePath.length + 1)
|
|
102
|
+
: filePath;
|
|
103
|
+
const relativeParts = relative.split("/");
|
|
104
|
+
for (const segment of relativeParts.slice(0, -1)) {
|
|
105
|
+
if (markers.has(segment.toLowerCase())) {
|
|
106
|
+
if (matchingOrigin) {
|
|
107
|
+
globs.add(`${matchingOrigin}/${segment}/**`);
|
|
108
|
+
}
|
|
109
|
+
else if (group.basePath) {
|
|
110
|
+
globs.add(`${group.basePath}/${segment}/**`);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
globs.add(`${segment}/**`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const baseName = path.basename(filePath, path.extname(filePath)).toLowerCase();
|
|
118
|
+
if (Array.from(markers).some((marker) => baseName.includes(marker))) {
|
|
119
|
+
markerFiles.add(filePath);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return globs.size > 0 ? Array.from(globs).sort() : Array.from(markerFiles).sort();
|
|
123
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ArchitectureLayerCandidate, CodebaseAnalysis, DomainContextCandidate, Evidence, ExtractionBackend, ExtractionProviderName, ReviewResolutionLog } from "./contracts.js";
|
|
2
|
+
export interface ExtractionOptions {
|
|
3
|
+
root: string;
|
|
4
|
+
cwd: string;
|
|
5
|
+
extractor?: ExtractionBackend;
|
|
6
|
+
provider?: ExtractionProviderName;
|
|
7
|
+
providerCommand?: string;
|
|
8
|
+
promptProfile?: string;
|
|
9
|
+
fallback?: "heuristic" | "none";
|
|
10
|
+
reviewLog?: ReviewResolutionLog;
|
|
11
|
+
applyReviewLog?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface SourceGroup {
|
|
14
|
+
key: string;
|
|
15
|
+
basePath: string;
|
|
16
|
+
sourceRoot?: string;
|
|
17
|
+
segment?: string;
|
|
18
|
+
heuristicSplit?: boolean;
|
|
19
|
+
origins?: string[];
|
|
20
|
+
pathGlobs: string[];
|
|
21
|
+
files: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface ScaffoldComputation<T> {
|
|
24
|
+
result: T;
|
|
25
|
+
confidence: number;
|
|
26
|
+
evidence: Evidence[];
|
|
27
|
+
unknowns: string[];
|
|
28
|
+
diagnostics: string[];
|
|
29
|
+
}
|
|
30
|
+
export type { ArchitectureLayerCandidate, CodebaseAnalysis, DomainContextCandidate };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { BoundaryLeakFinding, MetricScore } from "./contracts.js";
|
|
2
|
+
import { average, clamp01 } from "./shared-utils.js";
|
|
3
|
+
export declare function computeLeakRatio(leaks: BoundaryLeakFinding[], applicableReferences: number): number;
|
|
4
|
+
export declare function toMetricScore(metricId: string, value: number, components: Record<string, number>, evidenceRefs: string[], confidence: number, unknowns: string[]): MetricScore;
|
|
5
|
+
export { average, clamp01 };
|
|
6
|
+
export declare function weightedAverage(entries: Array<{
|
|
7
|
+
value: number | undefined;
|
|
8
|
+
weight: number;
|
|
9
|
+
}>, fallback: number): number;
|
|
10
|
+
export declare function dedupeEvidence<T extends {
|
|
11
|
+
evidenceId: string;
|
|
12
|
+
}>(items: T[]): T[];
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { average, clamp01 } from "./shared-utils.js";
|
|
2
|
+
export function computeLeakRatio(leaks, applicableReferences) {
|
|
3
|
+
if (applicableReferences === 0) {
|
|
4
|
+
return 0;
|
|
5
|
+
}
|
|
6
|
+
return leaks.length / applicableReferences;
|
|
7
|
+
}
|
|
8
|
+
export function toMetricScore(metricId, value, components, evidenceRefs, confidence, unknowns) {
|
|
9
|
+
return {
|
|
10
|
+
metricId,
|
|
11
|
+
value,
|
|
12
|
+
components,
|
|
13
|
+
confidence,
|
|
14
|
+
evidenceRefs,
|
|
15
|
+
unknowns,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export { average, clamp01 };
|
|
19
|
+
export function weightedAverage(entries, fallback) {
|
|
20
|
+
const observed = entries.filter((entry) => entry.value !== undefined && Number.isFinite(entry.value));
|
|
21
|
+
if (observed.length === 0) {
|
|
22
|
+
return fallback;
|
|
23
|
+
}
|
|
24
|
+
const totalWeight = observed.reduce((sum, entry) => sum + entry.weight, 0);
|
|
25
|
+
if (totalWeight <= 0) {
|
|
26
|
+
return fallback;
|
|
27
|
+
}
|
|
28
|
+
return observed.reduce((sum, entry) => sum + (entry.value ?? 0) * entry.weight, 0) / totalWeight;
|
|
29
|
+
}
|
|
30
|
+
export function dedupeEvidence(items) {
|
|
31
|
+
const seen = new Set();
|
|
32
|
+
return items.filter((item) => {
|
|
33
|
+
if (seen.has(item.evidenceId)) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
seen.add(item.evidenceId);
|
|
37
|
+
return true;
|
|
38
|
+
});
|
|
39
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DomainDesignShadowRolloutGateAggregate } from "./contracts.js";
|
|
2
|
+
export declare function evaluateGateReasons(aggregate: DomainDesignShadowRolloutGateAggregate, observationCount: number, options?: {
|
|
3
|
+
requireManifestPaths?: boolean;
|
|
4
|
+
hasMissingVersionedManifestPath?: boolean;
|
|
5
|
+
minObservationCount?: number;
|
|
6
|
+
insufficientObservationReason?: string;
|
|
7
|
+
}): string[];
|
|
8
|
+
export declare const SHADOW_ROLLOUT_GATE_CATEGORY_MIN_OBSERVATIONS = 3;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SHADOW_ROLLOUT_MIN_CATEGORY_REPO_OBSERVATIONS, SHADOW_ROLLOUT_MIN_REAL_REPO_OBSERVATIONS, } from "./shadow-rollout-summary.js";
|
|
2
|
+
const SHADOW_ROLLOUT_MAX_WEIGHTED_AVERAGE_DELTA = 0.05;
|
|
3
|
+
const SHADOW_ROLLOUT_MAX_DELTA_RANGE = 0.15;
|
|
4
|
+
export function evaluateGateReasons(aggregate, observationCount, options) {
|
|
5
|
+
const reasons = [];
|
|
6
|
+
const minObservationCount = options?.minObservationCount ?? SHADOW_ROLLOUT_MIN_REAL_REPO_OBSERVATIONS;
|
|
7
|
+
const insufficientObservationReason = options?.insufficientObservationReason ?? "insufficient_real_repo_observations";
|
|
8
|
+
if (observationCount < minObservationCount) {
|
|
9
|
+
reasons.push(insufficientObservationReason);
|
|
10
|
+
}
|
|
11
|
+
if (options?.requireManifestPaths && options.hasMissingVersionedManifestPath) {
|
|
12
|
+
reasons.push("missing_versioned_manifest_path");
|
|
13
|
+
}
|
|
14
|
+
if (aggregate.deltaRange > SHADOW_ROLLOUT_MAX_DELTA_RANGE) {
|
|
15
|
+
reasons.push("real_repo_delta_range_above_threshold");
|
|
16
|
+
}
|
|
17
|
+
if (Math.abs(aggregate.weightedAverageDelta) > SHADOW_ROLLOUT_MAX_WEIGHTED_AVERAGE_DELTA) {
|
|
18
|
+
reasons.push("real_repo_weighted_average_delta_above_threshold");
|
|
19
|
+
}
|
|
20
|
+
return reasons;
|
|
21
|
+
}
|
|
22
|
+
export const SHADOW_ROLLOUT_GATE_CATEGORY_MIN_OBSERVATIONS = SHADOW_ROLLOUT_MIN_CATEGORY_REPO_OBSERVATIONS;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export function summarizeGateObservations(observations) {
|
|
2
|
+
if (observations.length === 0) {
|
|
3
|
+
return {
|
|
4
|
+
repoCount: 0,
|
|
5
|
+
averageDelta: 0,
|
|
6
|
+
weightedAverageDelta: 0,
|
|
7
|
+
medianDelta: 0,
|
|
8
|
+
minDelta: 0,
|
|
9
|
+
maxDelta: 0,
|
|
10
|
+
deltaRange: 0,
|
|
11
|
+
positiveDeltaCount: 0,
|
|
12
|
+
negativeDeltaCount: 0,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
const deltas = observations.map((entry) => entry.delta).sort((left, right) => left - right);
|
|
16
|
+
const totalRelevantCommits = observations.reduce((sum, entry) => sum + entry.relevantCommitCount, 0);
|
|
17
|
+
const weightedDeltaTotal = observations.reduce((sum, entry) => sum + entry.delta * entry.relevantCommitCount, 0);
|
|
18
|
+
const averageDelta = observations.reduce((sum, entry) => sum + entry.delta, 0) / observations.length;
|
|
19
|
+
const middleIndex = Math.floor(deltas.length / 2);
|
|
20
|
+
const medianDelta = deltas.length % 2 === 0
|
|
21
|
+
? ((deltas[middleIndex - 1] ?? 0) + (deltas[middleIndex] ?? 0)) / 2
|
|
22
|
+
: (deltas[middleIndex] ?? 0);
|
|
23
|
+
const minDelta = deltas[0] ?? 0;
|
|
24
|
+
const maxDelta = deltas.at(-1) ?? 0;
|
|
25
|
+
return {
|
|
26
|
+
repoCount: observations.length,
|
|
27
|
+
averageDelta,
|
|
28
|
+
weightedAverageDelta: totalRelevantCommits === 0 ? averageDelta : weightedDeltaTotal / totalRelevantCommits,
|
|
29
|
+
medianDelta,
|
|
30
|
+
minDelta,
|
|
31
|
+
maxDelta,
|
|
32
|
+
deltaRange: maxDelta - minDelta,
|
|
33
|
+
positiveDeltaCount: observations.filter((entry) => entry.delta > 0).length,
|
|
34
|
+
negativeDeltaCount: observations.filter((entry) => entry.delta < 0).length,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { evaluateGateReasons, SHADOW_ROLLOUT_GATE_CATEGORY_MIN_OBSERVATIONS } from "./shadow-rollout-gate-reasons.js";
|
|
2
|
+
import { summarizeGateObservations } from "./shadow-rollout-gate-summary.js";
|
|
3
|
+
export function evaluateShadowRolloutGate(observations) {
|
|
4
|
+
const overall = summarizeGateObservations(observations);
|
|
5
|
+
const repoOwnedCount = observations.filter((entry) => entry.modelSource === "repo_owned").length;
|
|
6
|
+
const versionedManifestCount = observations.filter((entry) => entry.modelSource === "versioned_manifest").length;
|
|
7
|
+
const categories = Array.from(observations
|
|
8
|
+
.reduce((groups, observation) => {
|
|
9
|
+
const current = groups.get(observation.category) ?? [];
|
|
10
|
+
current.push(observation);
|
|
11
|
+
groups.set(observation.category, current);
|
|
12
|
+
return groups;
|
|
13
|
+
}, new Map())
|
|
14
|
+
.entries())
|
|
15
|
+
.map(([category, categoryObservations]) => ({
|
|
16
|
+
category,
|
|
17
|
+
repoIds: categoryObservations.map((entry) => entry.repoId),
|
|
18
|
+
summary: summarizeGateObservations(categoryObservations),
|
|
19
|
+
gate: (() => {
|
|
20
|
+
const summary = summarizeGateObservations(categoryObservations);
|
|
21
|
+
const reasons = evaluateGateReasons(summary, categoryObservations.length, {
|
|
22
|
+
requireManifestPaths: true,
|
|
23
|
+
hasMissingVersionedManifestPath: categoryObservations.some((entry) => entry.modelSource === "versioned_manifest" && !entry.modelPath),
|
|
24
|
+
minObservationCount: SHADOW_ROLLOUT_GATE_CATEGORY_MIN_OBSERVATIONS,
|
|
25
|
+
insufficientObservationReason: "insufficient_category_observations",
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
reasons,
|
|
29
|
+
replacementVerdict: reasons.length === 0 ? "go" : "no_go",
|
|
30
|
+
rolloutDisposition: reasons.length === 0 ? "replace" : "shadow_only",
|
|
31
|
+
};
|
|
32
|
+
})(),
|
|
33
|
+
}))
|
|
34
|
+
.sort((left, right) => left.category.localeCompare(right.category));
|
|
35
|
+
const reasons = evaluateGateReasons(overall, observations.length, {
|
|
36
|
+
requireManifestPaths: true,
|
|
37
|
+
hasMissingVersionedManifestPath: observations.some((entry) => entry.modelSource === "versioned_manifest" && !entry.modelPath),
|
|
38
|
+
});
|
|
39
|
+
return {
|
|
40
|
+
observations,
|
|
41
|
+
repoCount: observations.length,
|
|
42
|
+
repoOwnedCount,
|
|
43
|
+
versionedManifestCount,
|
|
44
|
+
overall,
|
|
45
|
+
categories,
|
|
46
|
+
reasons,
|
|
47
|
+
replacementVerdict: reasons.length === 0 ? "go" : "no_go",
|
|
48
|
+
rolloutDisposition: reasons.length === 0 ? "replace" : "shadow_only",
|
|
49
|
+
};
|
|
50
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DomainDesignShadowRolloutBatchObservation, DomainDesignShadowRolloutGateObservation, DomainDesignShadowRolloutRegistry } from "./contracts.js";
|
|
2
|
+
export declare function inferShadowRolloutModelSource(modelPath: string): "repo_owned" | "versioned_manifest";
|
|
3
|
+
export declare function loadShadowRolloutRegistry(registryPath: string): Promise<DomainDesignShadowRolloutRegistry>;
|
|
4
|
+
export declare function registryToGateObservations(registry: DomainDesignShadowRolloutRegistry, registryPath: string): DomainDesignShadowRolloutGateObservation[];
|
|
5
|
+
export declare function batchToGateObservations(observations: DomainDesignShadowRolloutBatchObservation[]): DomainDesignShadowRolloutGateObservation[];
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { readDataFile } from "./io.js";
|
|
3
|
+
export function inferShadowRolloutModelSource(modelPath) {
|
|
4
|
+
return modelPath.includes(`${path.sep}fixtures${path.sep}validation${path.sep}shadow-rollout${path.sep}`)
|
|
5
|
+
? "versioned_manifest"
|
|
6
|
+
: "repo_owned";
|
|
7
|
+
}
|
|
8
|
+
export async function loadShadowRolloutRegistry(registryPath) {
|
|
9
|
+
return readDataFile(registryPath);
|
|
10
|
+
}
|
|
11
|
+
export function registryToGateObservations(registry, registryPath) {
|
|
12
|
+
const registryDirectory = path.dirname(registryPath);
|
|
13
|
+
return registry.repos.map((entry) => ({
|
|
14
|
+
repoId: entry.repoId,
|
|
15
|
+
category: entry.category,
|
|
16
|
+
modelSource: entry.modelSource,
|
|
17
|
+
...(entry.manifestPath ? { modelPath: path.resolve(registryDirectory, entry.manifestPath) } : {}),
|
|
18
|
+
relevantCommitCount: entry.observation.relevantCommitCount,
|
|
19
|
+
delta: entry.observation.delta,
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
export function batchToGateObservations(observations) {
|
|
23
|
+
return observations.map((entry) => ({
|
|
24
|
+
repoId: entry.repoId,
|
|
25
|
+
category: entry.category,
|
|
26
|
+
modelSource: entry.modelSource,
|
|
27
|
+
modelPath: entry.modelPath,
|
|
28
|
+
relevantCommitCount: entry.relevantCommitCount,
|
|
29
|
+
delta: entry.policyDelta,
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DomainDesignShadowRolloutBatchAggregate, DomainDesignShadowRolloutBatchObservation } from "./contracts.js";
|
|
2
|
+
export declare const SHADOW_ROLLOUT_MIN_REAL_REPO_OBSERVATIONS = 4;
|
|
3
|
+
export declare const SHADOW_ROLLOUT_MIN_CATEGORY_REPO_OBSERVATIONS = 3;
|
|
4
|
+
export declare function summarizeShadowRolloutBatchObservations(observations: DomainDesignShadowRolloutBatchObservation[]): DomainDesignShadowRolloutBatchAggregate;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export const SHADOW_ROLLOUT_MIN_REAL_REPO_OBSERVATIONS = 4;
|
|
2
|
+
export const SHADOW_ROLLOUT_MIN_CATEGORY_REPO_OBSERVATIONS = 3;
|
|
3
|
+
export function summarizeShadowRolloutBatchObservations(observations) {
|
|
4
|
+
if (observations.length === 0) {
|
|
5
|
+
return {
|
|
6
|
+
repoCount: 0,
|
|
7
|
+
averageDelta: 0,
|
|
8
|
+
weightedAverageDelta: 0,
|
|
9
|
+
minDelta: 0,
|
|
10
|
+
maxDelta: 0,
|
|
11
|
+
deltaRange: 0,
|
|
12
|
+
driftCounts: {
|
|
13
|
+
aligned: 0,
|
|
14
|
+
candidateHigher: 0,
|
|
15
|
+
candidateLower: 0,
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const deltas = observations.map((entry) => entry.policyDelta).sort((left, right) => left - right);
|
|
20
|
+
const totalRelevantCommits = observations.reduce((sum, entry) => sum + entry.relevantCommitCount, 0);
|
|
21
|
+
const weightedDeltaTotal = observations.reduce((sum, entry) => sum + entry.policyDelta * entry.relevantCommitCount, 0);
|
|
22
|
+
const averageDelta = observations.reduce((sum, entry) => sum + entry.policyDelta, 0) / observations.length;
|
|
23
|
+
const weightedAverageDelta = totalRelevantCommits === 0 ? averageDelta : weightedDeltaTotal / totalRelevantCommits;
|
|
24
|
+
const minDelta = deltas[0] ?? 0;
|
|
25
|
+
const maxDelta = deltas.at(-1) ?? 0;
|
|
26
|
+
return {
|
|
27
|
+
repoCount: observations.length,
|
|
28
|
+
averageDelta,
|
|
29
|
+
weightedAverageDelta,
|
|
30
|
+
minDelta,
|
|
31
|
+
maxDelta,
|
|
32
|
+
deltaRange: maxDelta - minDelta,
|
|
33
|
+
driftCounts: {
|
|
34
|
+
aligned: observations.filter((entry) => entry.driftCategory === "aligned").length,
|
|
35
|
+
candidateHigher: observations.filter((entry) => entry.driftCategory === "candidate_higher").length,
|
|
36
|
+
candidateLower: observations.filter((entry) => entry.driftCategory === "candidate_lower").length,
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { evaluateShadowRolloutGate } from "./shadow-rollout-gate.js";
|
|
2
|
+
export { batchToGateObservations, inferShadowRolloutModelSource, loadShadowRolloutRegistry, registryToGateObservations, } from "./shadow-rollout-registry.js";
|
|
3
|
+
export { summarizeShadowRolloutBatchObservations } from "./shadow-rollout-summary.js";
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { evaluateShadowRolloutGate } from "./shadow-rollout-gate.js";
|
|
2
|
+
export { batchToGateObservations, inferShadowRolloutModelSource, loadShadowRolloutRegistry, registryToGateObservations, } from "./shadow-rollout-registry.js";
|
|
3
|
+
export { summarizeShadowRolloutBatchObservations } from "./shadow-rollout-summary.js";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function clamp01Finite(value) {
|
|
2
|
+
return Math.max(0, Math.min(1, Number.isFinite(value) ? value : 0));
|
|
3
|
+
}
|
|
4
|
+
export function clamp01(value) {
|
|
5
|
+
return Math.max(0, Math.min(1, value));
|
|
6
|
+
}
|
|
7
|
+
export function average(values, fallback) {
|
|
8
|
+
if (values.length === 0) {
|
|
9
|
+
return fallback;
|
|
10
|
+
}
|
|
11
|
+
return values.reduce((sum, value) => sum + value, 0) / values.length;
|
|
12
|
+
}
|
|
13
|
+
export function unique(values) {
|
|
14
|
+
return Array.from(new Set(values));
|
|
15
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DomainModel, GlossaryTerm, ModelCodeLink, TermTraceLink } from "./contracts.js";
|
|
2
|
+
export declare function buildTermTraceLinks(options: {
|
|
3
|
+
docsRoot: string;
|
|
4
|
+
repoRoot?: string;
|
|
5
|
+
terms: GlossaryTerm[];
|
|
6
|
+
codeFiles?: string[];
|
|
7
|
+
onProgress?: (update: {
|
|
8
|
+
phase: "start" | "heartbeat" | "complete";
|
|
9
|
+
message: string;
|
|
10
|
+
elapsedMs?: number;
|
|
11
|
+
}) => void;
|
|
12
|
+
progressIntervalMs?: number;
|
|
13
|
+
}): Promise<TermTraceLink[]>;
|
|
14
|
+
export declare function buildModelCodeLinks(model: DomainModel, filePaths: string[]): ModelCodeLink[];
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { normalizeDocuments } from "./artifacts.js";
|
|
3
|
+
import { isSourceFile, listFiles, matchGlobs, readText, relativePath } from "./io.js";
|
|
4
|
+
function countOccurrences(text, query) {
|
|
5
|
+
if (!query) {
|
|
6
|
+
return 0;
|
|
7
|
+
}
|
|
8
|
+
return text.toLowerCase().split(query.toLowerCase()).length - 1;
|
|
9
|
+
}
|
|
10
|
+
function formatDuration(ms) {
|
|
11
|
+
if (ms < 1000) {
|
|
12
|
+
return `${ms}ms`;
|
|
13
|
+
}
|
|
14
|
+
const seconds = ms / 1000;
|
|
15
|
+
if (seconds < 60) {
|
|
16
|
+
return `${seconds.toFixed(1)}s`;
|
|
17
|
+
}
|
|
18
|
+
const minutes = Math.floor(seconds / 60);
|
|
19
|
+
const remainingSeconds = Math.round(seconds % 60);
|
|
20
|
+
return `${minutes}m${remainingSeconds.toString().padStart(2, "0")}s`;
|
|
21
|
+
}
|
|
22
|
+
export async function buildTermTraceLinks(options) {
|
|
23
|
+
const startedAt = Date.now();
|
|
24
|
+
const fragments = await normalizeDocuments(options.docsRoot);
|
|
25
|
+
const codeFiles = options.repoRoot
|
|
26
|
+
? (options.codeFiles ?? (await listFiles(options.repoRoot)).filter((filePath) => isSourceFile(filePath)))
|
|
27
|
+
: [];
|
|
28
|
+
const progressIntervalMs = options.progressIntervalMs ?? 5000;
|
|
29
|
+
let lastProgressAt = startedAt;
|
|
30
|
+
options.onProgress?.({
|
|
31
|
+
phase: "start",
|
|
32
|
+
message: `Preparing trace links for ${options.terms.length} term(s) across ${codeFiles.length} code file(s).`,
|
|
33
|
+
});
|
|
34
|
+
const codeContents = await Promise.all(codeFiles.map(async (filePath) => ({
|
|
35
|
+
path: options.repoRoot && path.isAbsolute(filePath)
|
|
36
|
+
? relativePath(options.repoRoot, filePath)
|
|
37
|
+
: options.repoRoot
|
|
38
|
+
? filePath
|
|
39
|
+
: filePath,
|
|
40
|
+
content: options.repoRoot && !path.isAbsolute(filePath)
|
|
41
|
+
? await readText(path.join(options.repoRoot, filePath))
|
|
42
|
+
: await readText(filePath),
|
|
43
|
+
})));
|
|
44
|
+
const links = options.terms.map((term, index) => {
|
|
45
|
+
const queries = Array.from(new Set([term.canonicalTerm, ...(term.aliases ?? [])].filter(Boolean)));
|
|
46
|
+
if (Date.now() - lastProgressAt >= progressIntervalMs) {
|
|
47
|
+
lastProgressAt = Date.now();
|
|
48
|
+
const processedTerms = Math.max(index, 1);
|
|
49
|
+
const elapsedMs = lastProgressAt - startedAt;
|
|
50
|
+
const termsPerSecond = processedTerms / Math.max(elapsedMs / 1000, 0.001);
|
|
51
|
+
const remainingTerms = Math.max(options.terms.length - index, 0);
|
|
52
|
+
const etaMs = remainingTerms > 0 ? Math.round((remainingTerms / termsPerSecond) * 1000) : 0;
|
|
53
|
+
options.onProgress?.({
|
|
54
|
+
phase: "heartbeat",
|
|
55
|
+
message: `Trace linking is still running: processed ${index}/${options.terms.length} term(s) at ${termsPerSecond.toFixed(1)} term(s)/s, ETA ${formatDuration(etaMs)}.`,
|
|
56
|
+
elapsedMs,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
const occurrences = [];
|
|
60
|
+
for (const fragment of fragments) {
|
|
61
|
+
const matchCount = queries.reduce((sum, query) => sum + countOccurrences(fragment.text, query), 0);
|
|
62
|
+
if (matchCount > 0 || term.fragmentIds.includes(fragment.fragmentId)) {
|
|
63
|
+
occurrences.push({
|
|
64
|
+
kind: "document",
|
|
65
|
+
path: fragment.path,
|
|
66
|
+
fragmentId: fragment.fragmentId,
|
|
67
|
+
matchCount: Math.max(matchCount, term.fragmentIds.includes(fragment.fragmentId) ? 1 : 0),
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
for (const codeFile of codeContents) {
|
|
72
|
+
const matchCount = queries.reduce((sum, query) => sum + countOccurrences(codeFile.content, query), 0);
|
|
73
|
+
if (matchCount > 0) {
|
|
74
|
+
occurrences.push({
|
|
75
|
+
kind: "code",
|
|
76
|
+
path: codeFile.path,
|
|
77
|
+
matchCount,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const documentHits = occurrences.filter((occurrence) => occurrence.kind === "document").length;
|
|
82
|
+
const codeHits = occurrences.filter((occurrence) => occurrence.kind === "code").length;
|
|
83
|
+
return {
|
|
84
|
+
termId: term.termId,
|
|
85
|
+
canonicalTerm: term.canonicalTerm,
|
|
86
|
+
occurrences,
|
|
87
|
+
coverage: {
|
|
88
|
+
documentHits,
|
|
89
|
+
codeHits,
|
|
90
|
+
},
|
|
91
|
+
confidence: Math.min(1, term.confidence * (documentHits + codeHits > 0 ? 1 : 0.7)),
|
|
92
|
+
};
|
|
93
|
+
});
|
|
94
|
+
options.onProgress?.({
|
|
95
|
+
phase: "complete",
|
|
96
|
+
message: `Trace linking completed for ${options.terms.length} term(s) across ${codeFiles.length} code file(s).`,
|
|
97
|
+
elapsedMs: Date.now() - startedAt,
|
|
98
|
+
});
|
|
99
|
+
return links;
|
|
100
|
+
}
|
|
101
|
+
export function buildModelCodeLinks(model, filePaths) {
|
|
102
|
+
return model.contexts.map((context) => {
|
|
103
|
+
const files = filePaths.filter((filePath) => matchGlobs(filePath, context.pathGlobs));
|
|
104
|
+
const contract = files.filter((filePath) => matchGlobs(filePath, context.contractGlobs)).length;
|
|
105
|
+
const internal = files.filter((filePath) => matchGlobs(filePath, context.internalGlobs)).length;
|
|
106
|
+
const unclassified = Math.max(0, files.length - contract - internal);
|
|
107
|
+
return {
|
|
108
|
+
context: context.name,
|
|
109
|
+
files,
|
|
110
|
+
counts: {
|
|
111
|
+
contract,
|
|
112
|
+
internal,
|
|
113
|
+
unclassified,
|
|
114
|
+
},
|
|
115
|
+
coverage: files.length === 0 ? 0 : (contract + internal) / files.length,
|
|
116
|
+
};
|
|
117
|
+
});
|
|
118
|
+
}
|