feat(mcp): support runtime analysis limit recovery (#7049)

* feat(mcp): support runtime analysis limit recovery

* refactor(config): remove unused limit re-exports

* fix(android): keep fixture release metadata dependency-free

* fix(settings): preserve provider budgets and recovery facts

* fix(tests): resolve lint plugins from their repository owner

* refactor(mcp): verify guidance delivery without frozen wording

* fix(android): align availability with runtime timeout

* test(recovery): assert limit facts instead of frozen wording

* fix(mcp): share runtime settings with the default JADX provider

* test(mcp): bound acknowledgements and release held work on failure

* fix(catalog): declare runtime settings tools as MCP-only
This commit is contained in:
morluto authored and GitHub committed 2026-10-25 09:45:26 +08:00
1 parent ab720b4216
commit f3ed1657f8
120 files changed
+2899 -884

No files matched your search

@@ -1,3 +1,4 @@
import type { AnalysisSettingsReader } from "../../domain/analysisSettings.js";
import {
ASAR_HEADER_ADMISSION_SETTING,
parseAsarHeaderAdmission,
@@ -39,6 +40,7 @@ const OPERATION = "analyze_javascript_application" as const;
/** Execution options plus the composition root's environment for admission settings. */
export interface JavaScriptApplicationOptions extends ExecutionOptions {
readonly settings?: AnalysisSettingsReader;
readonly environment?: Readonly<Record<string, string | undefined>>;
}
@@ -67,6 +69,12 @@ export const analyzeJavaScriptApplicationValidated = async (
options.environment?.[ASAR_HEADER_ADMISSION_SETTING],
);
if (!asarHeaderAdmission.ok) return asarHeaderAdmission;
const overrides = options.settings?.().overrides;
const header = overrides?.["asar.max_header_bytes"];
const acceptedAdmission =
header === undefined
? asarHeaderAdmission.value
: { maximumBytes: header, source: "runtime" as const };
let reconstructed: JavaScriptArtifactReconstructionResult | undefined;
let result: JavaScriptApplicationAnalysisResult | undefined;
let evidence: Evidence | undefined;
@@ -84,7 +92,8 @@ export const analyzeJavaScriptApplicationValidated = async (
scope,
options.signal,
options.progress,
asarHeaderAdmission.value,
acceptedAdmission,
overrides,
);
const { electron_summary: summary, ...application } = reconstructed;
await options.progress?.report({