refactor(artifacts): consolidate inventory into inspection

This commit is contained in:
morluto committed 2026-09-29 09:22:24 +08:00
1 parent a66e43a99d
commit 0fe96d92df
28 files changed
+375 -280

No files matched your search

+2 -2
View File
@@ -2,7 +2,7 @@ import type { BinaryTarget } from "../domain/binaryTarget.js";
import type { OfficialToolName } from "../contracts/toolContracts.js";
import type { EnhancedToolName } from "../contracts/enhancedInputs.js";
import type { NativeToolName } from "../contracts/nativeToolContracts.js";
import type { ArtifactToolName } from "../contracts/artifactToolContracts.js";
import type { ArtifactAnalysisOperation } from "../contracts/artifactToolContracts.js";
import type { ManagedToolName } from "../contracts/managedToolContracts.js";
import type { AnalysisError } from "../domain/errors.js";
import type { AnalysisProfileCommitment } from "../domain/analysisProfile.js";
@@ -25,7 +25,7 @@ export type AnalysisOperation =
| OfficialToolName
| EnhancedToolName
| NativeToolName
| ArtifactToolName
| ArtifactAnalysisOperation
| ManagedToolName
| "health";
@@ -126,19 +126,23 @@ export const resolveCompareApplicationVersionsRequestValidated = (
input: CompareApplicationVersionsRequest,
lookup?: EvidenceLookup,
): Result<ComparisonInput, AnalysisError> => {
const left = graphEvidence(
"left" in input
? { application: input.left }
: { application_evidence_id: input.left_evidence_id },
lookup,
);
const leftReference = input.left ?? input.left_evidence_id;
if (leftReference === undefined)
return err(
new AnalysisInputError("compare_application_versions", undefined, [
{ path: ["left"], reason: "missing_argument" },
]),
);
const left = resolveApplicationGraphReference(leftReference, lookup);
if (!left.ok) return left;
const right = graphEvidence(
"right" in input
? { application: input.right }
: { application_evidence_id: input.right_evidence_id },
lookup,
);
const rightReference = input.right ?? input.right_evidence_id;
if (rightReference === undefined)
return err(
new AnalysisInputError("compare_application_versions", undefined, [
{ path: ["right"], reason: "missing_argument" },
]),
);
const right = resolveApplicationGraphReference(rightReference, lookup);
if (!right.ok) return right;
const leftNative = resolveEvidenceReferences(
lookup,
@@ -265,6 +269,14 @@ const graphEvidence = (
return resolved.ok ? ok(resolved.value[0]) : resolved;
};
const resolveApplicationGraphReference = (
reference: Evidence | string,
lookup: EvidenceLookup | undefined,
) =>
typeof reference === "string"
? graphEvidence({ application_evidence_id: reference }, lookup)
: graphEvidence({ application: reference }, lookup);
const invalid = <Value>(
operation: string,
cause: z.ZodError,
+2
View File
@@ -37,6 +37,7 @@ export const binarySessionStatus = ({
const provider = providerSummary(configuredProvider);
const providers = router.providerIdentities(route).map(providerSummary);
const capabilities = [...(route.capabilities?.values() ?? [])]
.filter(({ operation }) => operation !== "inventory_artifact")
.sort((left, right) => left.operation.localeCompare(right.operation))
.map((descriptor) => {
const unavailable = runtimeUnavailability.get(descriptor.operation);
@@ -66,6 +67,7 @@ export const binarySessionStatus = ({
selected: candidate.selected,
capabilities: candidate.capabilities
.slice()
.filter(({ operation }) => operation !== "inventory_artifact")
.sort((left, right) => left.operation.localeCompare(right.operation))
.map(capabilityStatus),
}));
+10 -10
View File
@@ -7,7 +7,7 @@ import { silentLogger, type Logger } from "../logger.js";
import { createEvidence } from "../domain/evidence.js";
import type { Evidence } from "../domain/evidence.js";
import type { NativeToolName } from "../contracts/nativeToolContracts.js";
import type { ArtifactToolName } from "../contracts/artifactToolContracts.js";
import type { ArtifactAnalysisOperation } from "../contracts/artifactToolContracts.js";
import type { ManagedToolName } from "../contracts/managedToolContracts.js";
import {
EvidenceIntegrityError,
@@ -92,7 +92,7 @@ export const runDirectAnalysis = async (
export const runProviderAnalysis = async (
...[path, tool, arguments_, logger = silentLogger, signal]: readonly [
path: string,
tool: NativeToolName | ArtifactToolName | ManagedToolName,
tool: NativeToolName | ArtifactAnalysisOperation | ManagedToolName,
arguments_: Readonly<Record<string, JsonValue>>,
logger?: Logger,
signal?: AbortSignal,
@@ -110,7 +110,7 @@ const authorizeAnalysis = async (
authority: PermissionAuthority,
tool:
| NativeToolName
| ArtifactToolName
| ArtifactAnalysisOperation
| ManagedToolName
| DirectAnalysisTool,
arguments_: Readonly<Record<string, JsonValue>>,
@@ -170,7 +170,7 @@ const authorizeSnapshotAccess = async (
authority: PermissionAuthority,
tool:
| NativeToolName
| ArtifactToolName
| ArtifactAnalysisOperation
| ManagedToolName
| DirectAnalysisTool,
snapshotPath: string | undefined,
@@ -196,7 +196,7 @@ const authorizeAnalysisRun = async (input: {
readonly suppliedAuthority: PermissionAuthority | undefined;
readonly tool:
| NativeToolName
| ArtifactToolName
| ArtifactAnalysisOperation
| ManagedToolName
| DirectAnalysisTool;
readonly arguments: Readonly<Record<string, JsonValue>>;
@@ -226,7 +226,7 @@ const runAnalysis = async (
path: string,
tool:
| NativeToolName
| ArtifactToolName
| ArtifactAnalysisOperation
| ManagedToolName
| DirectAnalysisTool,
arguments_: Readonly<Record<string, JsonValue>>,
@@ -316,7 +316,7 @@ const executeAnalysisTool = async (input: {
readonly openedTarget: BinaryTarget;
readonly tool:
| NativeToolName
| ArtifactToolName
| ArtifactAnalysisOperation
| ManagedToolName
| DirectAnalysisTool;
readonly arguments: Readonly<Record<string, JsonValue>>;
@@ -421,7 +421,7 @@ const replayProviderFor = (
session: ReturnType<typeof createBinarySession>,
tool:
| NativeToolName
| ArtifactToolName
| ArtifactAnalysisOperation
| ManagedToolName
| DirectAnalysisTool,
) =>
@@ -433,7 +433,7 @@ const analysisProfileForEvidence = (
session: ReturnType<typeof createBinarySession>,
tool:
| NativeToolName
| ArtifactToolName
| ArtifactAnalysisOperation
| ManagedToolName
| DirectAnalysisTool,
): AnalysisProfileCommitment | undefined => {
@@ -445,7 +445,7 @@ const analysisProfileForEvidence = (
const isWorkflowEvidenceTool = (
tool:
| NativeToolName
| ArtifactToolName
| ArtifactAnalysisOperation
| ManagedToolName
| DirectAnalysisTool,
): boolean =>