Add explicit package summary delivery and exact retained manifest pages while preserving complete MCP defaults, one-shot CLI output, provider requests, source identity and session lifetime. Return distinct linked Evidence and preserve partial/null facts; reject unavailable retention before engine work. Validation: 27 relevant SDK/domain/Android boundary checks, focused test-only correction rerun, full supported compiler/lint and docs checks, real NewPipe SDK pairs, authentic old Evidence continuation, four actual Codex trials with failures/regressions retained, and all 39 exact-head CI checks. Package replies shrink 119,527 to 8,659 bytes; no model-token or time gain is established. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
44 lines
1.8 KiB
TypeScript
44 lines
1.8 KiB
TypeScript
import type { ExecutionOptions } from "../AnalysisProvider.js";
|
|
import type { AndroidAnalysisService } from "./AndroidAnalysisService.js";
|
|
import {
|
|
requireAnalysisViewRetention,
|
|
summarizeRetainedAnalysis,
|
|
type AnalysisViewRetention,
|
|
} from "../analysisView/AnalysisViewService.js";
|
|
import type { AnalysisError } from "../../domain/analysisErrorBase.js";
|
|
import { AnalysisCancelledError } from "../../domain/analysisErrorCore.js";
|
|
import { androidPackageInspectionInputSchema } from "../../domain/android/androidAnalysis.js";
|
|
import type { Evidence } from "../../domain/evidence.js";
|
|
import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js";
|
|
import { err, type Result } from "../../domain/result.js";
|
|
|
|
/** Preserve the complete provider request; select retained delivery explicitly. */
|
|
export const inspectAndroidPackage = async (
|
|
service: AndroidAnalysisService,
|
|
rawInput: unknown,
|
|
retention: AnalysisViewRetention,
|
|
options?: ExecutionOptions,
|
|
): Promise<Result<Evidence, AnalysisError>> => {
|
|
const operation = "inspect_android_package";
|
|
if (options?.signal?.aborted === true)
|
|
return err(new AnalysisCancelledError(operation));
|
|
const parsed = androidPackageInspectionInputSchema.safeParse(rawInput);
|
|
if (!parsed.success)
|
|
return err(
|
|
analysisInputErrorFromIssues(operation, parsed.error.issues, rawInput, {
|
|
cause: parsed.error,
|
|
}),
|
|
);
|
|
if (parsed.data.detail === "summary") {
|
|
const ready = requireAnalysisViewRetention(operation, retention);
|
|
if (!ready.ok) return ready;
|
|
}
|
|
const executed = await service.execute(
|
|
operation,
|
|
{ path: parsed.data.path },
|
|
options,
|
|
);
|
|
if (!executed.ok || parsed.data.detail !== "summary") return executed;
|
|
return summarizeRetainedAnalysis(executed.value, retention);
|
|
};
|