mirror of
https://github.com/morluto/rea.git
synced 2026-10-29 02:45:58 +00:00
Return expected source and semantic failures from the runtime input owner as tagged Results. Bind source schema validation to concrete schemas, preserve nested active-capture paths, and let unexpected interpretation and derivation failures reach the adapter boundary. Remove broad protocol-error wrappers, duplicate active identity validation, and redundant JSON result parsing. Migrate parsed-fact consumers and retain CLI/MCP contracts. Relevant source and public-boundary tests pass; six injected implementation-fault controls fail on the prior revision. Live Electron behavior was not exercised.
83 lines
3.0 KiB
TypeScript
83 lines
3.0 KiB
TypeScript
import { classifyStaticLoadStates } from "./javascriptRuntimeLoadState.js";
|
|
import { buildReconciledApplicationGraph } from "./javascriptRuntimeReconciliationGraph.js";
|
|
import { reconcileRuntimeEntities } from "./javascriptRuntimeReconciliationMatching.js";
|
|
import {
|
|
parseStaticLayers,
|
|
type ParsedStaticLayer,
|
|
} from "./javascriptRuntimeReconciliationParsing.js";
|
|
import {
|
|
parseRuntimeCaptures,
|
|
type ParsedRuntimeCapture,
|
|
} from "./javascriptRuntimeReconciliationCaptureParsing.js";
|
|
import { createJavaScriptRuntimeReconciliationResult } from "./javascriptRuntimeReconciliationResult.js";
|
|
import type { JavaScriptRuntimeReconciliationResult } from "./javascriptRuntimeReconciliationSchemas.js";
|
|
import type { ReconcileJavaScriptRuntimeInput } from "./javascriptRuntimeReconciliationSchemas.js";
|
|
import { projectRuntimeCaptures } from "./javascriptRuntimeReconciliationRuntime.js";
|
|
import { collectStaticRuntimeCandidates } from "./javascriptRuntimeStaticCandidates.js";
|
|
import { AnalysisInputError } from "../analysisErrorCore.js";
|
|
import { err, ok, type Result } from "../result.js";
|
|
|
|
/** Verified caller input and the static and runtime facts parsed from it. */
|
|
export interface ParsedRuntimeReconciliationInput {
|
|
readonly input: ReconcileJavaScriptRuntimeInput;
|
|
readonly layers: readonly ParsedStaticLayer[];
|
|
readonly captures: readonly ParsedRuntimeCapture[];
|
|
}
|
|
|
|
/** Parse caller Evidence once into the owner consumed by reconciliation. */
|
|
export const readRuntimeReconciliationInput = (
|
|
input: ReconcileJavaScriptRuntimeInput,
|
|
): Result<ParsedRuntimeReconciliationInput, AnalysisInputError> => {
|
|
try {
|
|
return ok({
|
|
input,
|
|
layers: parseStaticLayers(input.static_layers, ["static_layers"]),
|
|
captures: parseRuntimeCaptures(input.runtime_observations, [
|
|
"runtime_observations",
|
|
]),
|
|
});
|
|
} catch (cause: unknown) {
|
|
if (cause instanceof AnalysisInputError) return err(cause);
|
|
throw cause;
|
|
}
|
|
};
|
|
|
|
/** Reconcile static JAG layers with authorized passive CDP Evidence. */
|
|
export const reconcileJavaScriptRuntime = (
|
|
parsed: ParsedRuntimeReconciliationInput,
|
|
): JavaScriptRuntimeReconciliationResult => {
|
|
const { layers, captures } = parsed;
|
|
const runtime = projectRuntimeCaptures(captures);
|
|
const candidates = collectStaticRuntimeCandidates(layers);
|
|
const matching = reconcileRuntimeEntities({
|
|
entities: runtime.entities,
|
|
candidates,
|
|
layers,
|
|
});
|
|
const loadStates = classifyStaticLoadStates(
|
|
layers,
|
|
runtime.entities,
|
|
matching.items,
|
|
{
|
|
reconciliationComplete:
|
|
runtime.omittedEntities === 0 && matching.omittedItems === 0,
|
|
},
|
|
);
|
|
const graph = buildReconciledApplicationGraph({
|
|
layers,
|
|
captures,
|
|
runtime,
|
|
reconciliationEdges: matching.edges,
|
|
omittedReconciliationItems: matching.omittedItems,
|
|
});
|
|
return createJavaScriptRuntimeReconciliationResult({
|
|
layers,
|
|
captures,
|
|
runtime,
|
|
matching,
|
|
loadStates,
|
|
graph: graph.graph,
|
|
omittedGraphItems: graph.omittedGraphItems,
|
|
});
|
|
};
|