Files
rea/src/domain/callPathSchemas.ts
郭立 Guo Li 7590b50801 perf(schema): reduce retained integer validator allocations (#4360)
Construct integer formats directly while preserving bounds, refinements, metadata and current shared schema owners. Keep Incur-dependent CLI numeric coercion declarations unchanged.

Verify canonical advertisements, 126 numeric boundary cases, 974 actual CLI parser cases, broad source tests and real public-artifact SDK workflows. Record 72 normal tasks and 12 separate owned-inspector heap diagnostics with whole-family resource bounds; distinguish SDK spans and asymmetric audit overhead. Generate numerical report sections from receipts and reject stale tables through documentation conformance checks.

Closes #6236. Current-head CI and Greptile pass; actionable review findings are addressed. Codex review was unavailable due repository usage limits.
2026-10-22 05:11:08 +00:00

92 lines
2.8 KiB
TypeScript

import { z } from "zod";
import { emptyArraySchema } from "./emptyArraySchema.js";
import { evidenceSchema } from "./evidence.js";
import { prefixedDigestSchema } from "./../domain/digests.js";
import {
nativeAddressSchema,
nativeAddressInputSchema,
} from "./native/nativeAddress.js";
const evidenceIdSchema = prefixedDigestSchema("ev");
/** Strict input for explicit call-path reconstruction from complete dossiers. */
export const callPathInputSchema = z.strictObject({
functions: z.array(evidenceSchema).min(1),
start: z.object({ address: nativeAddressInputSchema }).strict(),
goal: z.object({ address: nativeAddressInputSchema }).strict(),
});
const citedNodeSchema = z.object({
address: nativeAddressSchema,
name: z.string().nullable(),
evidence_links: z.array(evidenceIdSchema).min(1),
});
const citedEdgeSchema = z.object({
source: nativeAddressSchema,
target: nativeAddressSchema,
evidence_links: z.array(evidenceIdSchema).min(1),
});
const pathSchema = z
.object({
hops: z.int().min(0),
nodes: z.array(citedNodeSchema).min(1),
edges: z.array(citedEdgeSchema),
evidence_links: z.array(evidenceIdSchema).min(1),
})
.superRefine((path, context) => {
const edgesConnectNodes = path.edges.every(
(edge, index) =>
edge.source === path.nodes[index]?.address &&
edge.target === path.nodes[index + 1]?.address,
);
if (
path.hops !== path.edges.length ||
path.nodes.length !== path.edges.length + 1 ||
!edgesConnectNodes
)
context.addIssue({
code: "custom",
message: "Path hops and edges must connect the ordered nodes",
});
});
const resultContextShape = {
start: nativeAddressSchema,
goal: nativeAddressSchema,
explored: z.object({
nodes: z.int().min(0),
edges: z.int().min(0),
depth_reached: z.int().min(0),
}),
evidence_links: z.array(evidenceIdSchema).min(1),
limitations: z.array(z.string()),
};
/** Evidence-cited directed call-path result containing every shortest path. */
export const callPathResultSchema = z.union([
z.object({
...resultContextShape,
status: z.literal("found"),
shortest_hops: z.int().min(0),
search_scope: z.object({ exhaustive: z.boolean() }),
paths: z.array(pathSchema).min(1),
}),
z.object({
...resultContextShape,
status: z.literal("not_found"),
shortest_hops: z.null(),
search_scope: z.object({ exhaustive: z.literal(true) }),
paths: emptyArraySchema,
}),
z.object({
...resultContextShape,
status: z.literal("unknown"),
shortest_hops: z.null(),
search_scope: z.object({ exhaustive: z.literal(false) }),
paths: emptyArraySchema,
}),
]);
export type CallPathInput = z.infer<typeof callPathInputSchema>;
export type CallPathResult = z.infer<typeof callPathResultSchema>;
export type OutputCallPath = z.infer<typeof pathSchema>;