refactor(views): centralize paging contracts

This commit is contained in:
morluto committed 2026-10-27 09:07:50 +08:00
1 parent 5cf7133f82
commit 9c9c64edfa
7 files changed
+41 -23

No files matched your search

+2 -10
View File
@@ -1,3 +1,4 @@
import { analysisViewCoverageSchema } from "./analysisViewCoverage.js";
import {
javaScriptRouteInventorySourceSchema,
javaScriptRouteInventorySchema,
@@ -480,14 +481,6 @@ export const inspectAnalysisViewInputSchema = z.strictObject({
view: analysisViewRequestSchema,
});
const coverageSchema = z.strictObject({
status: z.enum(["complete-within-view", "page", "empty"]),
examined: z.int().nonnegative(),
total: z.int().nonnegative(),
next_offset: z.int().nonnegative().nullable(),
exhausted: z.boolean(),
});
const artifactSchema = z.strictObject({
path: z
.string()
@@ -566,7 +559,7 @@ const viewResultBase = {
parent_digest: digestSchema,
view_digest: digestSchema,
artifact: artifactSchema,
coverage: coverageSchema,
coverage: analysisViewCoverageSchema,
limitations: z.array(z.string()),
unknowns: z.array(z.string()),
} as const;
@@ -1432,7 +1425,6 @@ export type InspectAnalysisViewInput = z.output<
typeof inspectAnalysisViewInputSchema
>;
export type AnalysisViewResult = z.output<typeof analysisViewResultSchema>;
export type AnalysisViewCoverage = z.output<typeof coverageSchema>;
/** Parent record already resolved from inline Evidence or a session reference. */
export interface AnalysisViewParent {
@@ -1,5 +1,15 @@
import { uniqueSorted } from "../canonicalOrdering.js";
import type { AnalysisViewCoverage } from "./analysisView.js";
import { z } from "zod";
export const analysisViewCoverageSchema = z.strictObject({
status: z.enum(["complete-within-view", "page", "empty"]),
examined: z.int().nonnegative(),
total: z.int().nonnegative(),
next_offset: z.int().nonnegative().nullable(),
exhausted: z.boolean(),
});
export type AnalysisViewCoverage = z.output<typeof analysisViewCoverageSchema>;
/** Coverage for a summary, facet, or single selected object. */
export const completeWithinViewCoverage = (
+12 -3
View File
@@ -1,8 +1,17 @@
import { analysisViewInputError } from "./analysisViewErrors.js";
import type { AnalysisError } from "../analysisErrorBase.js";
import { err, ok, type Result } from "../result.js";
import type { AnalysisViewCoverage } from "./analysisView.js";
import { pageViewCoverage } from "./analysisViewCoverage.js";
import { z } from "zod";
import {
pageViewCoverage,
type AnalysisViewCoverage,
} from "./analysisViewCoverage.js";
/** Exact text pages use UTF-16 code-unit offsets without splitting surrogate pairs. */
export const analysisTextPageItemSchema = z.strictObject({
text: z.string(),
unit: z.literal("utf16-code-units"),
});
const viewError = (message: string): AnalysisError =>
analysisViewInputError([
@@ -17,7 +26,7 @@ export const analysisTextPage = (
label = "Pseudocode",
): Result<
{
readonly item: { readonly text: string; readonly unit: "utf16-code-units" };
readonly item: Readonly<z.output<typeof analysisTextPageItemSchema>>;
readonly coverage: AnalysisViewCoverage;
},
AnalysisError
@@ -10,7 +10,10 @@ import type {
UnsignedAnalysisView,
} from "./analysisView.js";
import { completeWithinViewCoverage } from "./analysisViewCoverage.js";
import { analysisTextPage } from "./analysisViewText.js";
import {
analysisTextPage,
analysisTextPageItemSchema,
} from "./analysisViewText.js";
const packageSchema = androidResultSchemas.inspect_android_package;
@@ -30,9 +33,7 @@ export const androidViewRequestSchema = z.strictObject({
limit: z.int().positive(),
});
export const androidManifestViewItemSchema = z.strictObject({
text: z.string(),
unit: z.literal("utf16-code-units"),
export const androidManifestViewItemSchema = analysisTextPageItemSchema.extend({
source_status: packageSchema.shape.manifest.shape.status,
reported_total_bytes: packageSchema.shape.manifest.shape.reported_total_bytes,
});
@@ -11,10 +11,10 @@ import { analysisViewInputError } from "./analysisViewErrors.js";
import {
completeWithinViewCoverage,
pageViewCoverage,
type AnalysisViewCoverage,
} from "./analysisViewCoverage.js";
import { createAnalysisViewResultReader } from "./analysisViewParent.js";
import type {
AnalysisViewCoverage,
AnalysisViewParent,
AnalysisViewRequest,
UnsignedAnalysisView,
+5 -2
View File
@@ -14,7 +14,10 @@ import {
completeWithinViewCoverage,
pageViewCoverage,
} from "./analysisViewCoverage.js";
import { analysisTextPage } from "./analysisViewText.js";
import {
analysisTextPage,
analysisTextPageItemSchema,
} from "./analysisViewText.js";
/** Retained inferred candidates or exact text; offsets for text count UTF-16 code units. */
export const evmViewRequestSchema = z.strictObject({
@@ -26,7 +29,7 @@ export const evmViewRequestSchema = z.strictObject({
export const evmViewItemSchema = z.union([
evmInterfaceSchema.shape.functions,
z.strictObject({ text: z.string(), unit: z.literal("utf16-code-units") }),
analysisTextPageItemSchema,
]);
/** Complete inferred interface facts without the unrequested hex or duplicated stdout. */
+5 -2
View File
@@ -17,7 +17,10 @@ import {
completeWithinViewCoverage,
pageViewCoverage,
} from "./analysisViewCoverage.js";
import { analysisTextPage } from "./analysisViewText.js";
import {
analysisTextPage,
analysisTextPageItemSchema,
} from "./analysisViewText.js";
/** Source forms and text from completed WASM Evidence; this never executes a VM. */
export const wasmViewRequestSchema = z.strictObject({
@@ -43,7 +46,7 @@ export const wasmViewItemSchema = z.union([
wasmArtifactSchema.shape.candidates,
wasmArtifactSchema.shape.glue,
wasmArtifactSchema.shape.tool_profile,
z.strictObject({ text: z.string(), unit: z.literal("utf16-code-units") }),
analysisTextPageItemSchema,
]);
/** Counts are observations of the completed producer, independent of runtime semantics. */